欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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);
                
            }

 

效果

Winforn中使用代码动态生成控件

 

 

Winforn中使用代码动态生成控件

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