Winforn中使用代码动态生成控件
场景
有时候需要根据配置文件在窗体中使用代码动态生成控件。
比如读取xml配置文件中的节点数量,然后在窗体中生成指定数量的RadioGroup控件。
实现
新建一个窗体,在窗体的加载完之后的事件中
private void ChartOption_Load(object sender, EventArgs e)
{
//根据配置文件路径初始化图形选项Dialog
initChartOptionPane(Global.RADIO_GROUP_YAXIS_FILEPATH); }
传入配置文件路径,然后生成控件。
public void initChartOptionPane(string xmlFilePath)
{
//不同组水平方向控件之间的距离 = 控件的宽度 + 组与组之间的距离
int horizontalDistance = Global.NOGROUP_HORIZONTAL_DISTANCE + Global.CHART_OPTION_WIDTH;
//获取Y轴的list
List<YAxisModel> yList = ChartOptionHelper.getYAxisList(xmlFilePath);
//获取配置文件中的radioGroup的选项
List<string> radioGrupItems = initRadioGroupItem(Global.RADIO_GROUP_ITEM_FILEPATH);
//生成对应组元素
for (int i = ; i < yList.Count; i++)
{
//生成一个radioGroup
RadioGroup radioGroup = new RadioGroup();
foreach (string s in radioGrupItems)
{
//每一个单元按钮对应的选项item
RadioGroupItem item = new RadioGroupItem();
//设置选项的value值
item.Value = s;
//设置选项的描述值 即 要显示的值
item.Description = s;
//使选项启用
item.Enabled = true;
//将新增的选项添加到radiogroup的Items中
radioGroup.Properties.Items.Add(item);
}
//设置宽度
radioGroup.Width = Global.CHART_OPTION_WIDTH;
//加1 保留出空白选项的高度
radioGroup.Height = Global.RADIO_HEIGHT * (radioGrupItems.Count + );
//设置位置
radioGroup.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE);
this.Controls.Add(radioGroup); //添加下限输入框
TextEdit minTextEdit = new TextEdit();
minTextEdit.Text = yList[i].Min.ToString();
minTextEdit.Width = Global.CHART_OPTION_WIDTH;
minTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height);
this.Controls.Add(minTextEdit); //添加上限输入框
TextEdit maxTextEdit = new TextEdit();
maxTextEdit.Text = yList[i].Max.ToString();
maxTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height + minTextEdit.Height);
maxTextEdit.Width = Global.CHART_OPTION_WIDTH;
this.Controls.Add(maxTextEdit); //添加颜色选择器
ColorPickEdit colorPickEdit = new ColorPickEdit();
colorPickEdit.Text = yList[i].Color;
colorPickEdit.Width = Global.CHART_OPTION_WIDTH;
colorPickEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height + minTextEdit.Height + maxTextEdit.Height);
this.Controls.Add(colorPickEdit); }
}
注:
1.生成控件对象。
2.设置控件对象的显示值text属性以及宽度等属性。
3.设置控件的位置。
4.将控件添加进窗体。
主要实现代码:
for (int i = ; i < yList.Count; i++)
{
//生成一个radioGroup
RadioGroup radioGroup = new RadioGroup();
foreach (string s in radioGrupItems)
{
//每一个单元按钮对应的选项item
RadioGroupItem item = new RadioGroupItem();
//设置选项的value值
item.Value = s;
//设置选项的描述值 即 要显示的值
item.Description = s;
//使选项启用
item.Enabled = true;
//将新增的选项添加到radiogroup的Items中
radioGroup.Properties.Items.Add(item);
}
//设置宽度
radioGroup.Width = Global.CHART_OPTION_WIDTH;
//加1 保留出空白选项的高度
radioGroup.Height = Global.RADIO_HEIGHT * (radioGrupItems.Count + );
//设置位置
radioGroup.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE);
this.Controls.Add(radioGroup); //添加下限输入框
TextEdit minTextEdit = new TextEdit();
minTextEdit.Text = yList[i].Min.ToString();
minTextEdit.Width = Global.CHART_OPTION_WIDTH;
minTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height);
this.Controls.Add(minTextEdit); //添加上限输入框
TextEdit maxTextEdit = new TextEdit();
maxTextEdit.Text = yList[i].Max.ToString();
maxTextEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height + minTextEdit.Height);
maxTextEdit.Width = Global.CHART_OPTION_WIDTH;
this.Controls.Add(maxTextEdit); //添加颜色选择器
ColorPickEdit colorPickEdit = new ColorPickEdit();
colorPickEdit.Text = yList[i].Color;
colorPickEdit.Width = Global.CHART_OPTION_WIDTH;
colorPickEdit.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE + i * horizontalDistance, Global.GROUP_VERTICAL_DISTANCE * + radioGroup.Height + minTextEdit.Height + maxTextEdit.Height);
this.Controls.Add(colorPickEdit); }
效果

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
Winforn中使用代码动态生成控件的更多相关文章
- Asp.net中使用文本框的值动态生成控件的方法
这篇文章主要介绍了Asp.net中使用文本框的值动态生成控件的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个“花 ...
- Silverlight动态生成控件实例
刚学习Silverlight,做了一个动态创建控件的实例 实现结果:根据已有的控件类名称,得到控件的实例化对象 实现思路1:就是定义一个模板文件,将类名做为参数,在silverlight中使用Srea ...
- WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)
原文:WPF: WrapPanel 容器的数据绑定(动态生成控件.遍历) 问题: 有一些CheckBox需要作为选项添加到页面上,但是数目不定.而为了方便排版,我选择用WrapPanel ...
- Asp.net web form 动态生成控件的注意事项
Asp.net页面生命周期 页面初始化 Page_Init 加载View State LoadViewState 回发数据处理 LoadPostData ...
- (五)ASP.NET中动态生成控件
今天被问到如何在ASP.NET 页面中动态创建一批控件,并且希望在后续代码中能访问到这些动态创建的控件.我用下面的例子来解释这个问题 ================================= ...
- 嵌套在母版页中的repeater自动生成控件ID
注:如果直接在后台通过e.Item.FindControl()方法直接找控件,然后再通过对其ID赋值,在编译之后会出现“母版页名称_ID“类似的很长的ID值(详情点击) 解决方法:<asp:Co ...
- [Ext.Net]动态生成控件(二)--js动态添加文本框
转自:http://www.ext.net.cn/forum.php?mod=viewthread&tid=11931 点击一个按钮就出现一行控件,点击删除控件就可将一行控件删除,这是不是你一 ...
- Unity UGUI动态生成控件
一. 首先你得先清楚RectTransform组件的一些程序控制 1. 先得到UGUI控件上面的RectTransform组件 RectTransform rtr = gameObject.GetCo ...
- c# winform动态生成控件与获取动态控件输入的值
差不多有2年没有写winform程序,一直都是写bs.最近项目需要,又开始着手写一个小功能的winform程序,需要动态获取xml文件的节点个数,生成跟节点个数一样的textbox, 最后还要获取操作 ...
随机推荐
- Linux 下用C语言连接 sqlite
1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码,名称为 sql.c,代码如下 // name: sql.c // This ...
- CSS3的滤镜filter属性
css3的滤镜filter属性,可以对网页中的图片进行类似Photoshop图片处理的效果,例如背景的毛玻璃效果.老照片(黑白照片).火焰效果等. 一.blur(px)高斯模糊 二.brightnes ...
- JavaScript数组方法大全(第二篇)
数组方法大全(第二篇) 注意:如有错误欢迎指出,如有雷同纯属巧合,本博客参考书籍JavaScript权威指南,有兴趣的小伙伴可以去翻阅一下哦 forEach()方法 遍历数组,里面可以传递一个方法 v ...
- 操作微信-itchat库的安装
基于pyCharm开发环境,在CMD控制台输入:pip install itchat 等待安装...... Microsoft Windows [版本 6.1.7601]版权所有 (c) 2 ...
- Unity进阶:行为树 02 夺旗战搭建场景,AI脚本,旗子拿起
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- 高并发下,调整IIS相关的设置,以提高服务器并发量
1.修改 IIS 队列长度 参考资料:https://docs.microsoft.com/zh-cn/previous-versions/office/communications-server/d ...
- springcloud项目配置拓展从本地config目录加载
本文受阿里开源的Nacos启发,应用启动后从Nacos服务加载配置到应用中,想着本地开发的时候加载配置能否从本地存储中加载,这样也能加快开发效率 首先我们来看下SpringCloud项目应用Nacos ...
- java短信验证和注册
最近公司需要用到短信验证注册,所以申请了阿里云的短信服务.我的项目是分布式的spring boot 原理: 利用第三方发送短信 获取回执消息,然后存入缓存里面 将用户填写的验证码与缓存里面的验证码对比 ...
- 单页面应用的History路由模式express后端中间件配合
这篇文章主要分享一下通过HTML5的history API的时候,使用NodeJS后端应该如何配置,来避免产生404的问题,这里是使用的express的框架,主要是通过connect-history- ...
- js的真值与假值
假值 结果为 false 的值称为 假值.例如,空字符串 "" 为假值,因为在布尔表达式中,"" 等于 false. false == 0返回:true fal ...