2010-11-03 75 views

回答

5

你可以這樣做。

創建靜態方法:

public static Form IsFormAlreadyOpen(Type FormType) 
{ 
    foreach (Form OpenForm in System.Windows.Forms.Application.OpenForms) 
    { 
     if (OpenForm.GetType() == FormType) 
      return OpenForm; 
    } 

    return null; 
} 

然後當你創建你的孩子形式。

frmMyChildForm frmChild1; 

if ((frmChild1 = (frmMyChildForm)IsFormAlreadyOpen(typeof(frmMyChildForm))) == null) 
    { //Form isn't open so create one 
     frmChild1= new frmMyChildForm(); 

    } 
    else 
    { // Form is already open so bring it to the front 
     frmChild1.BringToFront(); 

    } 
-1

您可以使用單例模式方法,並讓表單有一個實例成員變量來跟蹤它是否已被初始化。

http://en.wikipedia.org/wiki/Singleton_pattern

+0

你將如何在c#/ winform代碼中應用這種模式來滿足作者的需求? – 2010-11-13 16:25:51

+0

如果要求只有一個實例在任何時候打開,並且如果沒有打開任何一個實例,則打開一個新實例,但這樣做會工作得很好 - 實際上我自己也是這樣做的。 – SilverSkin 2010-11-18 13:02:51

0

也許這樣的事情可以幫助你

Form frmToCreate; 
String strClassName=typeof(FormToCreate).Name 
frmToCreate = GetForm(strClass); 
if(frmToCreate == null) 
{ 
    //create the form here 
} 
frmToCreate.MdiParent = this; //supposing you are inside of the mainwindow (MDI window) 
frmToCreate.Visible = true; 
//other code goes here 

其中GetForm會是這樣的

public Form GetForm(String type) 
{ 
    int i; 
    Form[] children = this.MdiChildren; //or mdiwindow.MdiChildren 

    for (i = 0; i < children.Length; i++) 
    { 
     if (children[i].GetType().Name == type) 
     { 
      return children[i]; 
     } 
    } 
    return null; 
} 

如果只是在使用MdiChildren物業打的事情。

相關問題