C# 在Windows窗体中调用公共方法

C# 在Windows窗体中调用公共方法,c#,winforms,mdi,public-method,C#,Winforms,Mdi,Public Method,我有一个MDI窗体,其中包含一个面板控件,还有一个窗体,其中包含一个按钮,用于使MDI中的面板不可见 MDI格式的代码: public void displayInit() { panel1.Visible = false; } 格式1中的代码: private void button1_Click(object sender, EventArgs e) { displayInit(); } 错误是:名称

我有一个MDI窗体,其中包含一个面板控件,还有一个窗体,其中包含一个按钮,用于使MDI中的面板不可见

MDI格式的代码:

    public void displayInit()
    {
        panel1.Visible = false;
    }
格式1中的代码:

        private void button1_Click(object sender, EventArgs e)
    {
        displayInit();
    }
错误是:名称“displayInit”在当前上下文中不存在,
有什么建议吗?

方法
displayinit()
是一个实例方法,因此您需要一个实例来调用它

MyMDIForm.displayInit();

构造MDI表单时,保留对它的引用,并在调用其方法时使用该引用。

尝试引用父级(并强制转换它):


但这可能不是最好的方法。考虑让孩子的形式向MDI家长提出一个事件。关注点分离。

当你说MDI表单时,你是指MDI子表单还是父表单?现在,谢谢LarsTech,请你进一步澄清你的评论:“考虑让子表单向MDI父表单引发事件。关注点分离。”@AlphaBird你的子表单不应该真正了解父表单的详细信息。这将使将来维护代码变得更加困难。因此,您可以让子窗体引发一个事件,比如
UpdateDisplay(…)
,而不是强制子窗体了解父窗体的任何信息。当您创建子窗体时,您将添加该事件处理程序,当调用该事件时,主窗体可以调用
displayInit()
本身。您也可以将该方法更改为private而不是public;“保留对MDI表单的引用”是什么意思?@AlphaBird在另一个表单上调用方法时,您需要访问另一个表单,在这种情况下,您可以使用MDIParent作为快捷方式,在其他情况下,在构建表单时使用
myforminstance=new MyForm()然后,当需要引用MyForm时,它将使用FormInstance。这有意义吗?谢谢JamesB,是的,MyForm FormInstance=new MyForm();这是有用的。
((MyMDIForm)this.MDIParent).displayInit();