【问题标题】:How to check if a specific form with a specific serial is open, and close that specific form如何检查具有特定序列的特定表单是否打开,并关闭该特定表单
【发布时间】:2015-09-24 07:50:58
【问题描述】:

我有一个可以多次打开的 Form1,每次都有不同的序列号。所以说:

Form1 - 序列号 100
Form1 - 序列号 110
Form1 - 序列号 120

序列号是 Form1 上的公共 int 变量。只要不是同一个序列号,该程序就应该能够多次打开同一个表单。所以我需要程序检测Form1-Serial 100何时已经打开,以免同一个表单打开两次。

我在 Form1 上有这段代码

public string GetSerial
{
   get
   {
        return databaseviewserial;
   }
}

我在启动 Form1 的表单上有这个:

Form1 s = (Form1)Application.OpenForms["Form1"]; 
if (s != null && s.GetSerial == record)
{
    s.BringToFront();
    s.WindowState = FormWindowState.Maximized;
}
else
{
    Form1 type = new Form1(record, "PendingForm");
    type.FormClosed += new FormClosedEventHandler(inhouse_FormClosed);
    type.Show();
}

这将成功检查带有序列号 100 的 Form1 是否打开,如果用户尝试重新打开同一个表单,则将其最大化,但是一旦我打开了两个带有不同序列号的 Form1,它就不再工作,并且将打开 Form1 而没有检查表单序列。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c# .net forms winforms


    【解决方案1】:

    为方便起见,首先编写一个函数,查找具有指定序列号的打开表单,如下所示:

    static Form1 FindMyForm(string serial)
    {
        for (int i = 0; i < Application.OpenForms.Count; i++)
        {
            var myForm = Application.OpenForms[i] as Form1;
            if (myForm != null && myForm.GetSerial == serial) return myForm;
        }
        return null;
    }
    

    那么你的sn-p就变成了这样:

    var myForm = FindMyForm(record);
    if (myForms != null)
    {
        myForm.BringToFront();
        myForm.WindowState = FormWindowState.Maximized;
    }
    else
    {
        myForm = new Form1(record, "PendingForm");
        myForm.FormClosed += new FormClosedEventHandler(inhouse_FormClosed);
        myForm.Show();
    }
    

    【讨论】:

      【解决方案2】:

      由于您使用单个打开的表单进行验证,因此系统不会检查第二个表单。

      Form1 s = (Form1)Application.OpenForms["Form1"];

      除此之外,获取一组打开的表单并执行上面的代码

      FormCollection fc=Application.OpenForms;
      foreach(Form f in fc)
      {
       // ur Form1 testing code goes here...
      }
      

      【讨论】:

      • 是的,我意识到它不会检查多个表单实例。但是使用上面的代码,我将如何公开 Form1 的序列属性?如您所知,我仍然是 C# 新手。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多