当前位置:首页 > 技术知识 > 正文内容

C#动态生成控件_c# 动态创建对象

maynowei8个月前 (09-18)技术知识88

在一些场景下,我们需要根据条件在画面上动态生成控件。比如某些时候,我们的数据查询条件不是固定的,它需要根据配置文件里面的信息动态生成筛选条件。那么我们就需要在程序运行时先读取配置信息,然后根据配置信息里面的文本条目,在窗体上动态生成CheckBox。勾选CheckBox则此条件有效,反之则无效。下图演示了配置文件。


下面代码演示了读取配置文件并动态生成CheckBox的过程。

//获取配置文件里面的文本条目
var lst= Infrastructure.INIOperationClass.INIGetAllItems(Infrastructure.CommData.ConfigPath, "Area");
for(int i = 0; i < lst.Length; i++)
 {
     CheckBox ce = new CheckBox();
    //用配置文件里面的文本条目命名控件以及显示的文本
     ce.Name = lst[i];
     ce.Text = lst[i];
     ce.Checked = false;
     //控件位置
     ce.Left = 20;
     ce.Top = i * 20 + i * 6;
     ce.Width = 200;
     //对控件勾选的事件响应
     ce.CheckedChanged += Ce_CheckedChanged;
     //添加控件到Panel
     P1.Controls.Add(ce);
    //根据控件数量动态修改窗体高度,避免窗体尺寸失调
}
this.Height = lst.Length * 26 + 40;

运行程序,我们可以看到窗体加载后的效果。

当然我们还需要响应CheckBox的选择事件。代码如下。

private void Ce_CheckedChanged(object sender, EventArgse)
{
     if (sender is CheckBox)
     {
        CheckBox chk = sender as CheckBox;
        if (chk.Checked) MessageBox.Show(#34;你选择了{chk.Name}");
        if (!chk.Checked) MessageBox.Show(#34;你取消了{chk.Name}");
    }
 }

上面的代码首选判断控件是否为CheckBox,然后根据是否勾选弹出不同的信息。程序运行后勾选或不勾选CheckBox就会弹出对应的窗口。

实际项目会根据具体要求在事件里面编写业务代码,这里仅做演示。动态生成控件的方式会使应用程序的灵活性大大增强。

相关文章

Shopee新手指南:Shopee卖家中心用户界面介绍

1.Shopee各站点前台网页链接:2.Shopee各站点后台网页链接3.Shopee APP下载:安卓版下载链接:https://pan.baidu.com/s/1eSp8M1k#list/path...

C++11 同步机制:互斥锁和条件变量

前段时间,我研究了 ROS2(Jazzy)机器人开发系统,并将官网中比较重要的教程和概念,按照自己的学习顺序翻译成了中文,进行了整理和记录。到目前为止,已经整理了20多篇文章。如果你想回顾之前的内容,...

大量类加载器创建导致诡异FullGC(类的加载器有什么用)

“ 由 GC 问题带你全面了解 JDK8 Metaspace”01—现象最近接手了一个同事的项目,某一天接口的响应耗时突然增加了很多,由几十ms 增加到了几十秒。首先查看机器上的日志,有调用第三方接口...

一个快要被忘记的数据库开发岗位,但应该被尊重

数据库测试,似乎是被人遗忘的数据库职业,但依然是不错的选择。底下是我在某站找的招聘启事,就连蚂蚁金服都在积极寻找数据库测试人:要说我经历的项目,大大小小也有几十个,从 C/S, B/S, 再到 B/C...

Oracle数据库无法连接问题排查(oracle数据库连接不成功)

数据库告警日志 如下图 。发现 问题时间段,没有 数据库服务故障 报错,但是存在较多 TNS-12535 、 12560 、 12170 、 00505 错误:通过检查问题时间段应用日志, 也记录了...

本地配置plsql远程连接oracle数据库

由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql、toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持。最后终于发现一个很有效的方法,O...