在类内添加按钮控件

时间:2016-03-17 07:23:05

标签: c# winforms

我遇到了这个问题,我无法在类中添加控件。更具体地说是Controls.Add(Button);。这是可能的还是我错过了什么。

    MyFunctions mf = new MyFunctions();
    class MyFunctions
    {
        public int ButtonWidth(int number)
        {
            string a = "";
            int ButtonWidth=0;

            Button x = new Button();
            x.Size = new Size(10, 40);//Initial Size
            x.AutoSize = true;
            x.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            Controls.Add(x);//Why i can't this one?

            for(int i=1;i<=number;i++)
            {
                a += "X";
                x.Text = a;
                ButtonWidth = x.Width;

                MessageBox.Show(i + "-" + a + "-" + ButtonWidth);
            }
            return ButtonWidth;
        }
  }`

我收到了一条错误消息。

  

无法访问外部类型的非静态成员。

我试用了button.text更改长度时按钮宽度是否正在变化。但button.width保持不变。

2 个答案:

答案 0 :(得分:1)

您的MyFunctions是与Form课程分开的课程。因此,它没有Controls属性(Controls属性属于您的Form - 或其派生 - class

如果您想在Button Form中添加class,则应将代码视为Method Form而不是MyFunctions class ,分开public class MyForm : Form { public int ButtonWidth(int number) //this is OK { string a = ""; int ButtonWidth=0; Button x = new Button(); x.Size = new Size(10, 40);//Initial Size x.AutoSize = true; x.AutoSizeMode = AutoSizeMode.GrowAndShrink; Controls.Add(x);//Why i can't this one? for(int i=1;i<=number;i++) { a += "X"; x.Text = a; ButtonWidth = x.Width; MessageBox.Show(i + "-" + a + "-" + ButtonWidth); } return ButtonWidth; } }

ButtonWidth

话虽如此,由于您的方法名称是Button,因此在一个旨在获取ButtonWidth的方法中添加CreateButton是不可取的(不是一个好的设计)。考虑分离方法:Button创建GetButtonWidthButtonWidth以获取Button(虽然它可能不一定是方法),然后您只需添加您创建的Form Controls var sampleSwitch = new UISwitch (); sampleSwitch.Frame = new CoreGraphics.CGRect (100f,100f,10f,10f); sampleSwitch.ValueChanged += delegate { if (sampleSwitch.On) { Console.WriteLine ("TRUE"); } else { Console.WriteLine ("FALSE"); } }; this.View.AddSubview (sampleSwitch); {/ 1}}。{/ 1}

答案 1 :(得分:0)

您正在尝试从另一个类的实例访问类的实例。

尝试将MyFunctions设为静态,或将函数包含在第一类派生自的基类中。