没有什么是静态的,我得到一个关于非静态字段的错误

时间:2013-09-02 21:50:13

标签: c# visual-studio

我真的不知道如何说出这个问题所以我只是解释一下情况。

我有一个带有绑定源“classBindingSource”的表单,并且我想从另一个表单中添加对象到这个绑定源,所以从那个表单我写了方法

public void addClass(Class new_class)
    {
        classBindingSource.Add(new_class);
    }

然而,当我用我的第二种形式用这种方法调用该方法时

private void button1_Click(object sender, EventArgs e)
        {
            string name = textBox1.Text;
            Class new_class = new Class(name);
            Form1.addClass(new_class);
        }

我收到以下错误

  

非静态字段,方法或属性GPACalculator.Form1.addClass(GPACalculator.Class)'

需要对象引用

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

正如错误告诉您的那样,您需要该表单的实例。像这样:

Form1 myForm = new Form1();
string name = textBox1.Text;
Class new_class = new Class(name);
myForm.addClass(new_class);

你可能正在打开这样的表格:Form1.Show();,这是错误的。您需要一个如上所示的实例,然后调用声明的实例的.Show()

答案 1 :(得分:0)

您通过它的类名而不是类的实例调用此方法。这就是为什么要求该方法是静态的。

Form1.addClass(new_class);

因此,要么将其设置为静态(因为您需要访问BindingSource等表单的控件,所以它不起作用)或使用Form1的实例。您可以在创建并打开它时将Form1实例传递给Form2,例如通过构造函数或属性。

(假设你有Opener类型的非静态(!)属性Form1

Opener.addClass(new_class);