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, 最后还要获取操作 ...
随机推荐
- getpost请求案例
public class MainActivity extends AppCompatActivity { private ListView lv; @Override protected void ...
- 直击--vue项目微信小程序页面跳转web-view不刷新-根源
背景 最近项目需要适配小程序,项目是使用了vue开发的网站,其中改造方式是,每个页面都使用小程序创建一个页面通过web-view来显示指定页面的. 在没有使用小程序时,路由跳转时,刷新页面等等,这个是 ...
- Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)
简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...
- spring-boot-plus后台快速开发脚手架之代码生成器使用(十)
spring-boot-plus 代码生成 Generator 代码生成内容 spring-boot-plus在mybatis-plus基础上,新增param/vo等模板 拓展controller/s ...
- python之“装饰器”
在python里装饰器 其定义:装饰器就是一个函数,用来装饰其他函数,就是给其他函数添加功能. 装饰器有两个特点: 1.装饰器不修改被装饰函数的源码: 2.装饰器不锈钢被装饰函数的调用方式. 在编程中 ...
- 【Windows Of CCPC HDU - 6708】【打表,找规律】
题意分析 HDU - 6708 题意:给出一个整数k,要求你输出一个长和宽均为2^k^ 的符合要求的矩阵.比如k等于1时输出 \[ \begin{matrix} C & C \\ P & ...
- GIt到本地小技巧
运行CMD自动到C盘,假如我要把项目clone D盘 ,就要去cd : D:\.. 乱七八糟的重复工作.烦死了. 下面是更加方便的技巧 直接在要GIt clone的路径打上CMD,然后回车.方便多了, ...
- 变量、常量、input、if语句
Chapter2 Python基础 2.1 变量命名规则 字母.数字.下划线组成 不能数字开头 不能使用python中的关键字 变量名具有意义 推荐驼峰(ArvinGood).或者下划线方式 (arv ...
- Ms Sql server 主键并发冲突解决办法
问题原因,同事把表的自增长ID主键,改成是自定义的编号,没有严格的并发测试.在多线程同时插入数据时会引起主键冲突: 看了一些道友的文章,尝试了几个方法.经测试 使用 WITH(updlock) 可以 ...
- emlog博客的安装教程
简介 emlog 是一款基于PHP和MySQL的功能强大的博客及CMS建站系统.致力于为您提供快速.稳定,且在使用上又极其简单.舒适的内容创作及站点搭建服务. 安装步骤 1.将src文件夹下的所有文件 ...