【问题标题】:How to modify a Form and refresh it from another Form如何修改表单并从另一个表单刷新它
【发布时间】:2012-08-13 08:10:00
【问题描述】:

我使用两种形式:

Form1 包含 button1

Form2 包含 button2 和 Panel1

我的项目开始使用 Form2。然后我点击 button2 显示 Form1

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

然后在Form1上,我点击button1来隐藏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;
    }

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

【问题讨论】:

  • 在 button1_Click 中添加 FormInstance.Show() 以查看您创建的新表单。有很多优秀的书籍可以帮助你学习面向对象编程。
  • 谢谢汉斯,有没有办法将更改传递给最初显示的 Form2 ?

标签: c# winforms forms public-method


【解决方案1】:

让两个表单(或任何两个类)相互交谈的标准方式是使用事件。

在您的情况下,将其添加到 Form1 代码的顶部:

public event ClosePanelHandler ClosePanel;
public delegate void ClosePanelHandler(object sender, EventArgs e);

然后,在Form1 的 Button1_Click 事件中(这会引发事件):

 private void button1_Click(object sender, EventArgs e)
    {
     if (ClosePanel != null){
       ClosePanel(this, new EventArgs());
    }}

-

最后,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();
    }

我希望这会有所帮助。

【讨论】:

  • 太棒了,这就像一个魅力,非常感谢 Holger。
  • @AlphaBird,不客气。我对Form1button1_Click 事件稍作更改以检查null。 (如果没有订阅该事件的侦听器,则返回一个null,如果我们不检查它会抛出异常。)
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2021-11-08
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多