问题本身听起来有点不高兴。要从另一个类调用非静态方法,您必须使用该类的当前实例。我试图用我想要调用第二个类的方法获取类的实例。我想我成功了但它还没有工作。
这是我试图将实例带到第二类的一种方式:
arbeitsbearbeitung arbeitenbearbeitung = new arbeitsbearbeitung(arbeit);
arbeitenbearbeitung.Parent = this;
arbeitenbearbeitung.Show();
(1级以外)
这就是我在第2课中使用它的地方:
Form frm = (Form)this.Parent;
frm.updateGrid();
我也用不同的方式尝试过,比如将它作为参数传递;同样的结果......
这是第1课中的updateGrid()
:
public void updateGrid()
{
klassenarbeitenTableAdapter.Fill(this.database1DataSet.Klassenarbeiten);
}
它告诉我Form不包含updateGrid
的定义。
我一定是傻瓜,但我找不到自己的错误。
思考和谷歌搜索2小时仍然没有线索。
我现在感到愚蠢。谢谢你的帮助!
答案 0 :(得分:3)
你必须使用班级的当前实例
您必须使用该类的 实例。不一定是现在的那个。
我试图获取类的实例
没有 实例(除非它是单身),有 实例。
接下来,Microsoft已将Form
作为.NET框架的一部分实现。 Microsoft的Form
类没有updateGrid()
方法。
如果您创建了表单,那么该表单会从Form
继承,并添加了方法updateGrid()
。因此,不要强制转换为Form
,而是将其投放到您的班级。
所以代码可能会读取
arbeitsbearbeitung frm = (arbeitsbearbeitung) this.Parent;
frm.updateGrid();
请注意,这不是干净的代码,因为它会破坏Liskov substitution principle。但我认为目前这不是你最关心的问题。
答案 1 :(得分:3)
Form
没有updateGrid
方法,但您的派生类却有。您需要将Parent转换为您的类:
MyForm frm =(MyForm)this.Parent;
答案 2 :(得分:0)
您宣布frm
为普通Form
:
Form frm = (Form)this.Parent;
问题是Form
类没有名为updateGrid
的函数。当您说frm.updateGrid()
时,编译器认为"好的,frm
是Form
,但Form
没有任何名为updateGrid
的内容&#34 ;.它并不知道frm
实际上是Form
的特殊子类,并定义了updateGrid
函数。
相反,您需要使用实际的Class 1类声明frm
:
MyCustomForm frm = (MyCustomForm)this.Parent;
然后当你frm.updateGrid()
时,编译器会知道你在说什么。