场景

有时候需要根据配置文件在窗体中使用代码动态生成控件。

比如读取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中使用代码动态生成控件的更多相关文章

  1. Asp.net中使用文本框的值动态生成控件的方法

    这篇文章主要介绍了Asp.net中使用文本框的值动态生成控件的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个“花 ...

  2. Silverlight动态生成控件实例

    刚学习Silverlight,做了一个动态创建控件的实例 实现结果:根据已有的控件类名称,得到控件的实例化对象 实现思路1:就是定义一个模板文件,将类名做为参数,在silverlight中使用Srea ...

  3. WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)

    原文:WPF: WrapPanel 容器的数据绑定(动态生成控件.遍历) 问题:        有一些CheckBox需要作为选项添加到页面上,但是数目不定.而为了方便排版,我选择用WrapPanel ...

  4. Asp.net web form 动态生成控件的注意事项

    Asp.net页面生命周期 页面初始化          Page_Init   加载View State      LoadViewState    回发数据处理      LoadPostData ...

  5. (五)ASP.NET中动态生成控件

    今天被问到如何在ASP.NET 页面中动态创建一批控件,并且希望在后续代码中能访问到这些动态创建的控件.我用下面的例子来解释这个问题 ================================= ...

  6. 嵌套在母版页中的repeater自动生成控件ID

    注:如果直接在后台通过e.Item.FindControl()方法直接找控件,然后再通过对其ID赋值,在编译之后会出现“母版页名称_ID“类似的很长的ID值(详情点击) 解决方法:<asp:Co ...

  7. [Ext.Net]动态生成控件(二)--js动态添加文本框

    转自:http://www.ext.net.cn/forum.php?mod=viewthread&tid=11931 点击一个按钮就出现一行控件,点击删除控件就可将一行控件删除,这是不是你一 ...

  8. Unity UGUI动态生成控件

    一. 首先你得先清楚RectTransform组件的一些程序控制 1. 先得到UGUI控件上面的RectTransform组件 RectTransform rtr = gameObject.GetCo ...

  9. c# winform动态生成控件与获取动态控件输入的值

    差不多有2年没有写winform程序,一直都是写bs.最近项目需要,又开始着手写一个小功能的winform程序,需要动态获取xml文件的节点个数,生成跟节点个数一样的textbox, 最后还要获取操作 ...

随机推荐

  1. Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)

    简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...

  2. (二十二)c#Winform自定义控件-半透明窗体

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  3. centos7通过yum安装docker

    ##yum源安装#1.更新yumyum update #2.删除旧版本yum remove docker \docker-client \docker-client-latest \docker-co ...

  4. IDEA部署 java Web项目 常见配置

    前言 从eclipse上转到idea上,第一次使用idea部署web项目,真折磨人,写了一个 helloworld 5分钟,了解idea部署web项目5小时. 我使用的是idea 2019.1版本,其 ...

  5. Spring学习之旅(十五)--SpringBoot

    在使用 Spring 的过程中,有时候会出现一些 ClassNotFoundException 异常,这是因为 JAR 依赖之间的版本不匹配所导致的.而 Spring Boot 就能避免绝大多数依赖版 ...

  6. ranger-hdfs 插件组权限测试

    当hdfs文件对外是公开的则该其他用户就算没有配置相关的权限一样可以进行相关的操作.当hdfs文件对外权限是没有开放的,其他用户若需要进行相关操作则需要通过Ranger进行相关权限的配置. 首先  / ...

  7. input 上传图片

    <!--多图上传--><input name="image_mortgage_property[]" type="file" multiple ...

  8. Python多进程的Join和daemon(守护)的用法

    join和daemon 下面仅以多进程为例: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下 ...

  9. ASP.NET Core实现对象自动映射-AgileMapper

    我们为什么要在对象之间做映射 处于耦合性或者安全性考虑或者性能考虑我们不希望将Model模型传递给他们,我们会在项目中创建一些DTO(Data transfer object数据传输对象),进行数据的 ...

  10. 【凭据不工作】Win远程桌面提示您的凭据不工作

    1.浏览器直接进入云服务器 2.打开运行 --输入gpedit.msc--计算机配置--管理模板--windows组件--远程桌面服务--远程桌面会话主机--安全--远程(RDP)链接要求使用制定的安 ...