2012-04-26 3 views
0

я создаю новый MDIChild из MainForm с помощью этого метода:как позвонить MDIChild из MdiParent формы

AdminLogInForm adminForm; 
private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null) 
     { 
      adminForm = new AdminLogInForm(); 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

Почему когда я закрываю ребенка, используя в виде CHLD «this.close()» с помощью этого метода я не могу открыть его больше?

there i call close();

 private void cancelLogInButton_Click(object sender, EventArgs e) 
    { 
     this.MdiParent.Activate();    
     if(this.MdiParent!=null) 
     ((MainForm)this.MdiParent).LogInAsAdminMenuItem.Enabled = true; 
     this.Close(); 
    } 

кстати, чтобы сделать работу, о которой я попросил, прежде чем я сделаю это. Close(); после всех утверждений.

+0

К тому времени, когда я ответил на ваш вопрос, вы изменили вопрос. Теперь, пожалуйста, покажите, где вы называете функцию Close() и где вы собираетесь ее открыть. – Marshal

+0

thnx, я отредактировал, plased функция вызова close() она находится на дочерней форме – Bublik

ответ

0

Закрыв форму вы не делаете adminForm экземпляр к нулю (что является то, что ваш, если условие будет проверять при попытке открыть его в следующий раз.)

На diposal вашей формы сделать adminForm = null, а затем ваше условие будет работать в следующий раз.

private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null) 
     { 
      adminForm = new AdminLogInForm(this); 
      adminForm.Disposed += new EventHandler(adminForm_Disposed); //Add Disposed EventHandler 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

    void adminForm_Disposed(object sender, EventArgs e) 
    { 
     adminForm = null; 
    } 
+0

как насчет добавления || adminForm.IsDisposed после adminForm == null ???? – kashif

+0

@kashif: Любой из них может использоваться, поскольку оба будут работать одинаково в текущем контексте. – Marshal

0

Как Описано Маршалом, что закрытие формы делает его утилизировать следует добавить условие для утилизации, а также как этот

AdminLogInForm adminForm; 

private void LogInAsAdminMenuItem_Click(object sender, EventArgs e) 
    { 
     if (adminForm == null || adminForm.IsDisposed) 
     { 
      adminForm = new AdminLogInForm(); 
      adminForm.MdiParent = this; 
      adminForm.Show(); 
      adminForm.Dock = DockStyle.Fill; 
      adminForm.BringToFront(); 
      LogInAsAdminMenuItem.Enabled = false;    
     } 
     else 
     { 
      adminForm.Activate(); 
      adminForm.BringToFront(); 
     } 
    } 

Или вы также можете создать функцию, чтобы использовать форму, mdi like this

 Смежные вопросы

  • Нет связанных вопросов^_^