2015-06-06 8 views
-1
Form1 objForm1 = new Form1(); 
objForm1 .MdiParent = this; 
objForm1 .Show(); 

Это мой код для открытия формы MDI. ЕСЛИ я снова открою эту страницу, она появляется снова и снова, и открывается так много окон. Может ли кто-нибудь помочь?MDI Родительская форма

+0

Каждый раз, когда вы запустите этот код, вы увидите новая форма, что именно вы хотите? –

+0

Я хочу, чтобы он больше никогда не открывался, когда я нажимаю, чтобы открыть. и если я закрываю форму, он также достигнет в другом месте, как можно остановить – Ghost

ответ

1

Если вы хотите создать новую форму, только если он еще не открыт вы можете сделать это:

ShowFormIfNotOpen(this,typeof(Form1)); 

public static void ShowFormIfNotOpen(Form mainform,Type type) 
    { 
     foreach (Form item in mainform.MdiChildren) 
      if (item.GetType() == type) 
      { 
       item.Activate(); 
       return; 
      } 

     Form form = Activator.CreateInstance(type) as Form; 
     form.MdiParent = mainform; 
     form.Show(); 
    } 

Update

1) Добавить публичный статический BOOL поле/свойство в вашем форма (IsAlreadyShown)

public static bool IsAlreadyShown { get; set; } 

2) Установите его истинным в конструктор формы

public Form1() 
{ 
    InitializeComponent(); 
    IsAlreadyShown = true; 
} 

3) Вызов ShowForm1 (это);

public static void ShowForm1(Form parentForm) 
    { 
     if(Form1.IsAlreadyShown ==true) 
       return; 


     Form1 objForm1 = new Form1(); 
     objForm1 .MdiParent = parentForm; 
     objForm1 .Show(); 
    } 
+0

хорошо, но если я закрываю форму и снова открываю, тогда форма достигает в другом месте – Ghost

+0

@Brain I Обновлен ответ –

0

Что я понял до сих пор с вашего вопроса, вы хотите, чтобы форма1 была контейнером MDI. если вы хотите этого, то просто установить свойство ISMdiContainer быть true.Now, если вы хотите эту форму Form1, чтобы установить в качестве родителя любой формы вы можете использовать свой код

FormAny objFormAny = new FormAny(); 
    objFormAny .MdiParent = objForm1; // reference of MDI Container 
    objFormAny .Show();