场景

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

比如读取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);
                
            }

 

效果

 

 

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。