如何检查具有特定序列的特定表单是否已打开,并关闭该特定表单

时间:2015-09-24 07:50:58

标签: c# .net forms winforms

我有一个可以多次打开的Form1,每个都有不同的连续剧。所以说:

Form1 - Serial 100
Form1 - Serial 110
Form1 - Serial 120

serial是Form1上的public 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();
}

这将成功检查Form1与Serial 100是否打开,并在用户尝试重新打开相同的表单时最大化,但是只要我有两个不同序列打开的Form1,它就不再有效并且将打开Form1而不会检查表格系列。

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

2 个答案:

答案 0 :(得分:0)

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

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

Insead of this,采取开放表格的集合并执行上面的代码

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

答案 1 :(得分:0)

为了更容易,首先编写一个函数,找到一个带有指定序列的打开表单,如下所示:

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;
}

然后你的代码就像这样:

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();
}