【问题标题】:How to close one FORM from another FORM in C# Winform Application如何在 C# Winform 应用程序中从另一个 FORM 关闭一个 FORM
【发布时间】:2014-10-09 10:11:52
【问题描述】:

我正在开发 C# winform 应用程序,因为我想从另一个表单关闭一个表单,即我有 2 个表单 Form1 和 Form2,我想从 Form1 关闭 Form2,因为我在按钮单击时编写了以下代码Form1 的事件,但我得到以下异常-

“对象引用未设置为对象的实例。”

private void button_click(object sender, eventArgs e)
{
     Form2.ActiveForm.Disposed+= new EventHandler(closeForm2) // Getting Exception to ***closeForm2***
}

private void closeForm2(object sender, eventArgs e)
{
      Form2.ActiveForm.Dispose();
}

【问题讨论】:

标签: c# winforms forms


【解决方案1】:

给未来的读者!

您可以使用以下代码在 C# Winform 应用程序中从另一个 FORM 关闭一个 FORM。

FrmToBeClosed obj = (FrmToBeClosed)Application.OpenForms["FrmToBeClosed"];
obj.Close();

这两行代码一目了然!

就是这样!

【讨论】:

  • 或者你也可以Application.OpenForms["FrmToBeClosed"].Close();
【解决方案2】:

ActiveForm 返回“来自此应用程序的当前活动表单”= 您单击的表单... 你如何启动你的 Form2? 我认为你应该像这样定义它

Form2 DetailsForm = null;
public void prepareForm2() //bind this to action to open new form
{
    if (DetailsForm == null)
    {
        DetailsForm = new Form2(this);
    }
}

你可以调用 close()/Dispose/Hide 通过调用

private void closeForm2(object sender, eventArgs e)
{
   DetailsForm.Close();
   // or DetailsForm.Hide();
   // or DetailsForm.Dispose();
}

【讨论】:

  • 我采用了 MDIParent 表单并在 ToolStripMenuItem_Click 事件上调用 Form1 和 Form2,如下所示-- private void form1ToolStripMenuItem_Click(object sender, EventArgs e) { Form1 f = new Form1(); f.MdiParent = 这个; f.显示(); } private void form2ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 f = new Form2(); f.MdiParent = 这个; f.显示(); }
【解决方案3】:

参见 MSDN -> Form.ActiveForm 属性

如果您的应用程序是多文档界面 (MDI) 应用程序,请使用 ActiveMdiChild 属性获取当前活动的 MDI 子窗体。

我认为您的 MDI 表单中需要一个 void,例如

public void closeChild(Type FormType)
{
  foreach(Form form in this.MdiChildren)
  {
    if(typeof(form) == FormType)
    {
       /* what ever you wanna do */
    }
  }
}

希望我能帮上忙:)

【讨论】:

    【解决方案4】:
     CloseProgramForm closepf = new CloseProgramForm();
                closepf.ShowDialog();
                if (closeoption == 1)
                    e.Cancel = false;
                else
                    e.Cancel = true;
    

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 2011-05-15
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      相关资源
      最近更新 更多