怎么获取winform中动态代码生成的控件的状态

50 篇文章 1 订阅

winform怎么获取动态代码生成窗口里面的控件的属性状态

MainForm中调用

        private void ShowPropertyForm()
        {
            PropertyForm form = new PropertyForm(selectedShape);
            form.ShowDialog();
          
            pictureBox1.Refresh();
        }

MainForm中生成

 public class PropertyForm : Form
        {
            private ShapeType selectedShape;
            private Shape shape;
            private DashStyle StrokeStyle;  //线型
            private float StrokeWidth = 1.0f;  //线宽
            private Color StrokeColor;  //边框颜色   
            private RadioButton IsFilledRadioButton;     //是否填充
            private RadioButton NoFilledRadioButton;
            private ColorDialog FilledColorColorDialog; //填充颜色
            private Button renewButton;
            private Button cancelButton;
            private Color CurrentStrokeColor;

            public PropertyForm(Shape shape)
            {
                this.shape = shape;
                InitializeComponents();
            }

            public void InitializeComponents()
            {
                this.Text = "图形属性";
                this.FormBorderStyle = FormBorderStyle.FixedDialog;//属性框边框样式
                this.MaximizeBox = false;//右上角是否有最大化按钮
                this.MinimizeBox = false;//右上角是否有最小化按钮
                this.StartPosition = FormStartPosition.CenterParent;
                this.ClientSize = new Size(200, 350);


                // 添加类型Label
                this.Controls.Add(new Label()
                {
                    Text = "类型",
                    Location = new Point(25, 28),
                    Size = new Size(30, 20),

                });
                //添加下拉框
                this.Controls.Add(new ComboBox()
                {
                    Location = new Point(60, 25),
                    Size = new Size(115, 20),
                    Text = shape.Type.ToString()
                });


                //添加线型Label
                this.Controls.Add(new Label()
                {
                    Text = "线型",
                    Location = new Point(25, 78),
                    Size = new Size(30, 20)
                });
                //添加下拉框
                ComboBox comboBox1 = new ComboBox();
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
                comboBox1.Items.Add(DashStyle.Solid);
                comboBox1.Items.Add(DashStyle.Dash);
                comboBox1.Items.Add(DashStyle.DashDot);
                comboBox1.Items.Add(DashStyle.DashDotDot);
                comboBox1.SelectedIndex = (int)selectedShape;
                comboBox1.Location = new Point(60, 75);
                comboBox1.Size = new Size(115, 20);
                this.Controls.Add(comboBox1);

                //添加线宽Label
                this.Controls.Add(new Label()
                {
                    Text = "线宽",
                    Location = new Point(25, 128),
                    Size = new Size(30, 20)
                });
                //添加下拉框
                ComboBox comboBox2 = new ComboBox();
                comboBox2.Text = shape.StrokeWidth.ToString();
                comboBox2.Location = new Point(60, 125);
                comboBox2.Size = new Size(115, 20);
                comboBox2.Items.Add("0.5");
                comboBox2.Items.Add("1");
                comboBox2.Items.Add("2");
                comboBox2.Items.Add("4");
                comboBox2.Items.Add("8");
                comboBox2.Items.Add("16");
                comboBox2.Items.Add("32");
                this.Controls.Add(comboBox2);

                //添加颜色Label
                this.Controls.Add(new Label()
                {
                    Text = "颜色",
                    Location = new Point(25, 178),
                    Size = new Size(30, 20)
                });
                //添加颜色对话框
                Button StrokeColorbutton = new Button();
                StrokeColorbutton.Location = new Point(60, 175);
                StrokeColorbutton.Size = new Size(115, 20);
                this.Controls.Add(StrokeColorbutton);


                //添加填充label
                this.Controls.Add(new Label()
                {
                    Text = "填充",
                    Location = new Point(25, 240),
                    Size = new Size(30, 20)
                });

                RadioButton radioButton2 = new RadioButton();
                radioButton2.Text = "否";
                radioButton2.Location = new Point(100, 238);
                this.Controls.Add(radioButton2);
                //添加RadioButton
                RadioButton radioButton1 = new RadioButton();
                radioButton1.Text = "是";
                radioButton1.Location = new Point(60, 238);
                this.Controls.Add(radioButton1);
            


                //添加颜色Label
                this.Controls.Add(new Label()
                {
                    Text = "颜色",
                    Location = new Point(25, 280),
                    Size = new Size(30, 20)
                });
                //添加颜色对话框
                Button FillColorbutton = new Button();
                FillColorbutton.Location = new Point(60, 275);
                FillColorbutton.Size = new Size(115, 20);
                this.Controls.Add(FillColorbutton);




                //添加图形GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "图形",
                    Location = new Point(0, 5),
                    Size = new Size(200, 50),

                });



                //添加类型GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "边框",
                    Location = new Point(0, 55),
                    Size = new Size(200, 150)

                });

                //添加内部GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "内部",
                    Location = new Point(0, 205),
                    Size = new Size(200, 100)
                });

                //添加更新Button
                renewButton = new Button();
                renewButton.Location = new Point(20, 315);
                renewButton.Size = new Size(70, 30);
                renewButton.Text = "更新";
                renewButton.DialogResult = DialogResult.OK;
                this.Controls.Add(renewButton);

                //添加取消Button
                cancelButton = new Button();
                cancelButton.Location = new Point(110, 315);
                cancelButton.Size = new Size(70, 30);
                cancelButton.Text = "取消";
                cancelButton.DialogResult = DialogResult.Cancel;
                this.Controls.Add(cancelButton);
                renewButton.Click += renewButton_Click;
                comboBox2.SelectedValueChanged += ComboBox2_SelectedValueChanged;
            }

          

            public static float nStrokeWidth;
            private void renewButton_Click(object sender, EventArgs e)
            {
             
                shape.StrokeWidth = 这里取控件中的状态属性 ;
                MessageBox.Show("更新成功");

            }


        }

遇到的困难

在renewButton_Click方法中,无法调用生成控件的状态,只有在InitializeComponents方法中可以使用

解决思路

1,首先想到的是在InitializeComponents中把控件的属性赋值出去给变量,然后在其他地方调用

InitializeComponents只初始化刚刚生成的时候,后面调用的变量为空值不行

2.renewButton_Click方法放入InitializeComponents中,private删除,即可调用,不影响,成功解决

解决办法

 public class PropertyForm : Form
        {
            private ShapeType selectedShape;
            private Shape shape;
            private DashStyle StrokeStyle;  //线型
            private float StrokeWidth = 1.0f;  //线宽
            private Color StrokeColor;  //边框颜色   
            private RadioButton IsFilledRadioButton;     //是否填充
            private RadioButton NoFilledRadioButton;
            private ColorDialog FilledColorColorDialog; //填充颜色
            private Button renewButton;
            private Button cancelButton;
            private Color CurrentStrokeColor;

            public PropertyForm(Shape shape)
            {
                this.shape = shape;
                InitializeComponents();
            }

            public void InitializeComponents()
            {
                this.Text = "图形属性";
                this.FormBorderStyle = FormBorderStyle.FixedDialog;//属性框边框样式
                this.MaximizeBox = false;//右上角是否有最大化按钮
                this.MinimizeBox = false;//右上角是否有最小化按钮
                this.StartPosition = FormStartPosition.CenterParent;
                this.ClientSize = new Size(200, 350);


                // 添加类型Label
                this.Controls.Add(new Label()
                {
                    Text = "类型",
                    Location = new Point(25, 28),
                    Size = new Size(30, 20),

                });
                //添加下拉框
                this.Controls.Add(new ComboBox()
                {
                    Location = new Point(60, 25),
                    Size = new Size(115, 20),
                    Text = shape.Type.ToString()
                });


                //添加线型Label
                this.Controls.Add(new Label()
                {
                    Text = "线型",
                    Location = new Point(25, 78),
                    Size = new Size(30, 20)
                });
                //添加下拉框
                ComboBox comboBox1 = new ComboBox();
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
                comboBox1.Items.Add(DashStyle.Solid);
                comboBox1.Items.Add(DashStyle.Dash);
                comboBox1.Items.Add(DashStyle.DashDot);
                comboBox1.Items.Add(DashStyle.DashDotDot);
                comboBox1.SelectedIndex = (int)selectedShape;
                comboBox1.Location = new Point(60, 75);
                comboBox1.Size = new Size(115, 20);
                this.Controls.Add(comboBox1);

                //添加线宽Label
                this.Controls.Add(new Label()
                {
                    Text = "线宽",
                    Location = new Point(25, 128),
                    Size = new Size(30, 20)
                });
                //添加下拉框
                ComboBox comboBox2 = new ComboBox();
                comboBox2.Text = shape.StrokeWidth.ToString();
                comboBox2.Location = new Point(60, 125);
                comboBox2.Size = new Size(115, 20);
                comboBox2.Items.Add("0.5");
                comboBox2.Items.Add("1");
                comboBox2.Items.Add("2");
                comboBox2.Items.Add("4");
                comboBox2.Items.Add("8");
                comboBox2.Items.Add("16");
                comboBox2.Items.Add("32");
                this.Controls.Add(comboBox2);

                //添加颜色Label
                this.Controls.Add(new Label()
                {
                    Text = "颜色",
                    Location = new Point(25, 178),
                    Size = new Size(30, 20)
                });
                //添加颜色对话框
                Button StrokeColorbutton = new Button();
                StrokeColorbutton.Location = new Point(60, 175);
                StrokeColorbutton.Size = new Size(115, 20);
                this.Controls.Add(StrokeColorbutton);


                //添加填充label
                this.Controls.Add(new Label()
                {
                    Text = "填充",
                    Location = new Point(25, 240),
                    Size = new Size(30, 20)
                });

                RadioButton radioButton2 = new RadioButton();
                radioButton2.Text = "否";
                radioButton2.Location = new Point(100, 238);
                this.Controls.Add(radioButton2);
                //添加RadioButton
                RadioButton radioButton1 = new RadioButton();
                radioButton1.Text = "是";
                radioButton1.Location = new Point(60, 238);
                this.Controls.Add(radioButton1);
            


                //添加颜色Label
                this.Controls.Add(new Label()
                {
                    Text = "颜色",
                    Location = new Point(25, 280),
                    Size = new Size(30, 20)
                });
                //添加颜色对话框
                Button FillColorbutton = new Button();
                FillColorbutton.Location = new Point(60, 275);
                FillColorbutton.Size = new Size(115, 20);
                this.Controls.Add(FillColorbutton);




                //添加图形GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "图形",
                    Location = new Point(0, 5),
                    Size = new Size(200, 50),

                });



                //添加类型GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "边框",
                    Location = new Point(0, 55),
                    Size = new Size(200, 150)

                });

                //添加内部GroupBox
                this.Controls.Add(new GroupBox()
                {
                    Text = "内部",
                    Location = new Point(0, 205),
                    Size = new Size(200, 100)
                });

                //添加更新Button
                renewButton = new Button();
                renewButton.Location = new Point(20, 315);
                renewButton.Size = new Size(70, 30);
                renewButton.Text = "更新";
                renewButton.DialogResult = DialogResult.OK;
                this.Controls.Add(renewButton);

                //添加取消Button
                cancelButton = new Button();
                cancelButton.Location = new Point(110, 315);
                cancelButton.Size = new Size(70, 30);
                cancelButton.Text = "取消";
                cancelButton.DialogResult = DialogResult.Cancel;
                this.Controls.Add(cancelButton);
                renewButton.Click += renewButton_Click;
                  void renewButton_Click(object sender, EventArgs e)
                {

                    shape.StrokeWidth =(float)Convert.ToInt32( comboBox2.SelectedItem);
                    MessageBox.Show("更新成功");

                }
            }

          

            public static float nStrokeWidth;
          


        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值