限制MDI应用程序中窗口的实例数

时间:2010-11-03 17:14:08

标签: c# winforms forms mdi

我想限制用户在MDI应用程序中创建表单的多个实例。

如果打开该表单的一个实例,则必须获得焦点。如果它不是新实例,则必须创建它。

我该怎么做?

3 个答案:

答案 0 :(得分: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 :(得分: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财产。

答案 2 :(得分:-1)

你可以使用单例模式方法,让表单有一个Instance-member-variable来跟踪它是否已被初始化。

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