2015-09-24 58 views
0

我有一个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(); 
} 

这将成功地检查是否Form1的串行100是开放的,并且最大化如果用户试图重新打开相同的表单,但只要我有两个打开不同序列的Form1,它就不再起作用,并且将打开Form1而不检查表格序列。

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

回答

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

看来,这完美的作品!谢谢! – nerdalert

0

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

Form1 s =(Form1)Application.OpenForms [“Form1”];

欧洲工商管理学院的这一点,采取开放形式的集合,并执行上面的代码

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

是的,我意识到,它不检查一个以上的实例的形式。但是使用上面的代码,我将如何公开Form1的序列属性?正如你所理解的,我仍然是一名C#新人。 – nerdalert

相关问题