2015-09-24 57 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

相關問題