Winforn中使用代码动态生成控件
程序员文章站
2023-11-14 17:14:16
场景 有时候需要根据配置文件在窗体中使用代码动态生成控件。 比如读取xml配置文件中的节点数量,然后在窗体中生成指定数量的RadioGroup控件。 实现 新建一个窗体,在窗体的加载完之后的事件中 传入配置文件路径,然后生成控件。 注: 1.生成控件对象。 2.设置控件对象的显示值text属性以及宽 ......
场景
有时候需要根据配置文件在窗体中使用代码动态生成控件。
比如读取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 = 0; 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 + 1); //设置位置 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 * 2 + 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 * 3 + 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 * 4 + radiogroup.height + mintextedit.height + maxtextedit.height); this.controls.add(colorpickedit); } }
注:
1.生成控件对象。
2.设置控件对象的显示值text属性以及宽度等属性。
3.设置控件的位置。
4.将控件添加进窗体。
主要实现代码:
for (int i = 0; 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 + 1); //设置位置 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 * 2 + 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 * 3 + 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 * 4 + radiogroup.height + mintextedit.height + maxtextedit.height); this.controls.add(colorpickedit); }
效果
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
上一篇: spring data jpa碰到的坑
下一篇: 详解php反序列化