关闭Form2并显示Form1。

3

我有两个表单,Form1和Form2。在Form1中有一个按钮,当我点击它时,会打开Form2并隐藏Form1。

但是现在,如果我关闭Form2并显示Form1,我不知道该怎么做。

第二个问题: 如果我在Form1中为元素(标签、按钮)编写了Update()方法,那么我可以在Form2中使用这个方法吗?

谢谢

3个回答

4

您需要使用 FormClosing 事件。在创建 form2 的代码中,将您的 form1 附加到关闭事件上。这样,您的 form1 就会知道 form2 正在被关闭。

private void OpenForm()
{
     var form2 = new Form2();
     form2.FormClosing += FormIsClosing;
     form2.Show();

     this.Hide();
}

private void FormIsClosing(object sender, FormClosingEventArgs e)
{
     if (e.Cancel)
     {
         return;
     }

     this.Show();
     this.Update();
}

不要这样做,Form2 不应该知道任何关于 Form1 的信息。只需将 FormClosing 事件处理程序放在 Form1 中即可。不要忘记检查 e.Cancel。请注意,您不再需要设置 Owner,它只是 this - Hans Passant
1
@HansPassant 确实,非常感谢。我不确定为什么我之前这样做了 :(,但是我已经改了我的代码。 - gzaxx

1

你所提出的两个问题都可以通过事件轻松解决。以下是代码:

Form1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Declare your new form
        Form2 form2 = new Form2();

        //Register the update event
        form2.updateEvent += new EventHandler(handleUpdateEvent);

        //Register form closed event
        form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);

        Visible = false;

        //Show your new form
        form2.Show();
    }

    void form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Visible = true;
    }

    //Handler for the event from form 2
    void handleUpdateEvent(object sender, EventArgs e)
    {
        this.BackColor = Color.Red;
    }
}

Form2:
public partial class Form2 : Form
{
    //Declare your event
    public event EventHandler updateEvent;

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //If the event is registered fire it, otherwise do nothing
        if (updateEvent != null)
        {
            //fire the event and give our custom event args some text
            updateEvent(sender, e);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        //Another way to close the form, beside clicking the red "X"
        Close();
    }
}

点击Form1上的按钮会导致Form1创建Form2,注册其事件,隐藏自身并显示Form2。当点击“更新按钮”(即Form2上的button1)时,它将在Form1上进行一些更新。对于此演示,我只更改了Form1的背景颜色。当Form2关闭时,它的关闭事件将返回到Form1,Form1将通过使自己可见来处理该事件。

0
在Form1中为Form2的Form.FormClosing添加事件处理程序。当它触发时,再次显示Form1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接