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, 最后还要获取操作 ...
随机推荐
- SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
[前言] 本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目.目录如下: SonarQube系列一.Linux安装与部署 SonarQube系列二.分析 ...
- 002——Netty之Netty介绍
Netty出现背景 Java NIO难用 据说存在bug 业界其他NIO框架不成熟 Netty主要解决两个相应关注领域 (1)异步和事件驱动的实现. (2)一组设计模式,将应用逻辑与网络层解耦. 特性 ...
- (四)c#Winform自定义控件-选择按钮组
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- Goland_IDE的护眼、主题、字体等设置
Goland_IDE的护眼.主题.字体等设置 1.代码格式化 File->Settings->Tools->File Watchers->+->go fmt->将N ...
- 以阿里IoT开发物联网和应用平台
1. 链接物联网的概念 物联网(The Internet of Things,简称IOT)是指通过 各种信息传感器.射频识别技术.全球定位系统.红外感应器.激光扫描器等各种装置与技术,实时采集任何需要 ...
- spring-boot-plus后台快速开发脚手架之代码生成器使用(十)
spring-boot-plus 代码生成 Generator 代码生成内容 spring-boot-plus在mybatis-plus基础上,新增param/vo等模板 拓展controller/s ...
- unity_小功能实现(碰撞检测)
1.触发器Trigger:勾选IsTrigger属性 //当player刚进入触发区域的时刻发生触发检测,比如在靠近门的某个区域门一直处于开着状态 void OnTriggerEnter(Collid ...
- Flink 源码解析 —— TaskManager 处理 SubmitJob 的过程
TaskManager 处理 SubmitJob 的过程 https://t.zsxq.com/eu7mQZj 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink ...
- Netty源码分析 (一)----- NioEventLoopGroup
提到Netty首当其冲被提起的肯定是支持它承受高并发的线程模型,说到线程模型就不得不提到NioEventLoopGroup这个线程池,接下来进入正题. 线程模型 首先来看一段Netty的使用示例 pa ...
- ElementUI使用v-if控制tab标签显示遇到的Duplicate keys detected: 'xxx'问题
今天工作遇到一个问题: 需求背景:页面中有几个tab,需要根据登录用户的权限控制tab标签的显示与隐藏 . <el-tabs @tab-click="handleClick" ...