C# 如何修改表单并从其他表单刷新表单

C# 如何修改表单并从其他表单刷新表单,c#,winforms,forms,public-method,C#,Winforms,Forms,Public Method,我使用两种形式: 表单1包含按钮1 表单2包含按钮2和面板1 我的项目开始使用Form2。然后我点击按钮2显示表单1 private void button2_Click(object sender, EventArgs e) { Form1 Frm = new Form1(); Frm.Show(); } 然后在Form1上,我单击按钮1以隐藏Form2上的Panel1 private void button1_Click(ob

我使用两种形式:

表单1包含按钮1

表单2包含按钮2和面板1

我的项目开始使用Form2。然后我点击按钮2显示表单1

    private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.Show();
    }
然后在Form1上,我单击按钮1以隐藏Form2上的Panel1

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 FormInstance = new Form2();
        FormInstance.displayInit();
        FormInstance.Refresh();
    }
displayInit()是Form2中的一个方法:

    public void displayInit()
    {
        panel1.Visible = false;
    }

但是由于刷新问题,面板没有隐藏,有什么想法吗?

让两个窗体(或任意两个类)相互对话的标准方式是使用事件

在您的情况下,将此添加到
表格1
代码的顶部:

public event ClosePanelHandler ClosePanel;
public delegate void ClosePanelHandler(object sender, EventArgs e);
然后,在
表单1
的按钮1\u单击事件(这会引发事件):

-

最后,
Form2
需要处理事件(并监听事件),以便采取行动:

 private void HandleCloseRequest(object sender, EventArgs e)
    {
     panel1.Visible = false;
    }
另外,修改

private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.ClosePanel += HandleCloseRequest;
        Frm.Show();
    }

我希望这能有所帮助。

在按钮1中添加
FormInstance.Show()
以查看您创建的新表单。有许多优秀的书籍可以帮助您学习面向对象编程。谢谢您,Hans,有没有办法将更改传递到最初显示的Form2?太棒了,这很有魅力,非常感谢Holger。@AlphaBird,欢迎您。我对
Form1
按钮做了一个小小的更改,单击
事件检查
null
。(如果没有订阅事件的侦听器,则返回一个
null
,如果我们不检查它,它将抛出异常。)
private void button2_Click(object sender, EventArgs e)
    {
        Form1 Frm = new Form1();
        Frm.ClosePanel += HandleCloseRequest;
        Frm.Show();
    }