窗体关闭事件visual studio c#

窗体关闭事件visual studio c#,c#,forms,events,C#,Forms,Events,直截了当地说: 在我的主窗体中,有三个按钮可以打开三个不同的窗体。我将向你展示它是如何建造的 MainForm(这里有三个按钮,上面有三个不同的表单名称) 理论->点击此按钮打开理论表单 任务->单击此按钮打开TasksForm 竞争->点击此按钮打开竞争表单 在我的TasksForm中有一个按钮,它将打开理论表单。这是我的密码: public partial class TasksForm : Form { public TasksForm() {

直截了当地说: 在我的主窗体中,有三个按钮可以打开三个不同的窗体。我将向你展示它是如何建造的

  • MainForm
    (这里有三个按钮,上面有三个不同的表单名称)

    • 理论->点击此按钮打开
      理论表单
    • 任务->单击此按钮打开
      TasksForm
    • 竞争->点击此按钮打开竞争表单
在我的
TasksForm
中有一个按钮,它将打开
理论表单
。这是我的密码:

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

     public void TheoryButton_Click(object sender, EventArgs e)
     {
          Form TheoryForm_Child = new TeoriForm();
          TheoryForm_Child.Show();
     }
     //Add some code here so that when `TasksForm` closes, the `TheoryForm_Child` closes too.
}

我不明白的是,当
任务表单
关闭时,
理论表单
也应该关闭,现在没有。

尝试在
理论按钮之外的
理论表单
中声明变量。单击事件处理程序,然后在
任务表单中使用它。FormClosing
事件处理程序关闭它

public partial class TasksForm : Form
{
    private Form TheoryForm_Child;

    public TasksForm()
    {
        InitializeComponent();
        FormClosing += TaskForm_FormClosing;
    }

    public void TheoryButton_Click(object sender, EventArgs e)
    {
        TheoryForm_Child = new TeoriForm();
        TheoryForm_Child.Show();
    }

    public void TaskForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        if(TheoryForm_Child != null)
            TheoryForm_Child.Close();
    }
}

仅仅因为TasksForm正在创建TheoryForm并不意味着当TasksForm关闭时,TheoryForm也会关闭。相反,您应该显式地关闭它,就像在TasksForm中处理关闭的事件一样,如下所示

public partial class TasksForm : Form
{
    Form _TheoryFor_Child = new TheoryForm();

    public TasksForm()
    {
      InitializeComponent();
      Closed += TasksForm_Closed;
    }

    private void TasksForm_Closed(object sender, EventArgs e)
    {
      _TheoryFor_Child.Close();
    }

    private void TheoryButton_Click(object sender, EventArgs e)
    {      
      _TheoryFor_Child.Show();
    }
}

您需要以某种方式连接父窗体和子窗体。 例如,将父窗体作为所有者赋予子窗体

就叫

 TheoryForm_Child.Show(this);

有一个非常简单的解决方案。您应该使用其他版本的Show方法,如下所示:

Form TheoryForm_Child = new TeoriForm();
TheoryForm_Child.Show(this);
就这些。然后你的表单将成为理论表单的所有者。所以它会在关闭自身后自动破坏理论形式

更多阅读: