Ограничение количества экземпляров окон в приложении MDI - PullRequest
4 голосов
/ 03 ноября 2010

Я хочу запретить пользователю создавать несколько экземпляров формы в приложении MDI.

Если открыт один экземпляр этой формы, он должен получить фокус. Если это не новый экземпляр, он должен быть создан.

Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2010

Вы можете сделать это так.

Создание статического метода:

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

     }
0 голосов
/ 03 ноября 2010

Может быть, что-то подобное может помочь вам

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.

0 голосов
/ 03 ноября 2010

Вы можете использовать одноэлементный подход и позволить форме иметь переменную-член-экземпляр, которая отслеживает, инициализирована она или нет.

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

...