如何在c#中获得窗体的活动对象

本文关键字:窗体 活动 对象 | 更新日期: 2023-09-27 18:06:24

我想做的是-如果我单击主(MDI)表单的菜单,如果表单已经打开,则不会在该菜单上创建指定表单的新对象。请帮助。

如何在c#中获得窗体的活动对象

您需要在某个地方(可能是一个字段)保持对打开表单的引用,如果它已设置,则不创建新实例。

伪代码:

// a field
Form myForm;
// In the method where you would normally instantiate the form:
if (myForm == null)
   myForm = new MyForm();
myForm.Show();

示例:

     private void buttonUnits_Click(object sender, EventArgs e)
            {
                if (this.unitsForm == null)
                {
                    this.unitsForm = new UnitsForm();
                    this.unitsForm.MdiParent = this;
                    this.unitsForm.Disposed += new EventHandler(unitsForm_Disposed);
                    this.unitsForm.Dock = DockStyle.Fill;
                }
                this.unitsForm.Show();
                this.unitsForm.BringToFront();
                this.unitsForm.Focus();
            }
 void unitsForm_Disposed(object sender, EventArgs e)
        {
            this.unitsForm = null;
        }


应用程序。OpenForms持有所有打开表单的列表,只需迭代它并检查它是否包含您想要创建的类型的表单,如果它包含什么都不做。像这样

private void button1_Click(object sender, EventArgs e)
{
    foreach (Form form in Application.OpenForms) 
    {
       if (form is FormTypeToOpen ) 
            return;
     }
     FormTypeToOpen newForm = new FormTypeToOpen();
     this.newForm .Show();
     this.newForm.BringToFront();
     this.newForm.Focus();
}

最诚挚的问候,Iordan

像下面这样创建一个打开表单的对象Form1纳;

菜单中的

单击处理程序检查表单的实例,如

if(frm ==null)
   frm = new Form1();

好的,我们得到了新的表单1。现在我们可以显示表单了。

use frm.Show() 
or 
frm.ShowDialog();

条件:如果你使用的是from . close ();然后使用需要创建对象并显示它如果你使用from .hide();