-1

我真的不知道如何表达这个问题,所以我将解释一下情况。

我有一个带有绑定源“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)' 需要对象引用

谢谢您的帮助

4

2 回答 2

0

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

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

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

于 2013-09-02T21:53:53.783 回答
0

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

Form1.addClass(new_class);

所以要么让它成为静态的(什么不起作用,因为你需要访问像这样的表单控件BindingSource)或者使用Form1. 您可以在创建和打开它时将Form1实例传递给Form2它,例如通过构造函数或属性。

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

Opener.addClass(new_class);
于 2013-09-02T21:55:47.040 回答