2015-05-19 2 views
0

У меня есть две формы. Один из них - MainForm, который является родителем MDI и имеет ToolStripFile, который установлен на enabled = false при загрузке MainForm, а другая форма - form2, которая является дочерним MDI и служит моей регистрационной формой. Если вход успешно завершен, ToolStripFile должен быть enabled = true. У меня есть этот код, но он не работает:Отключить элементы управления из другой формы

 private void btnLogin_Click(object sender, EventArgs e) 
    { 
     MainForm mf = new MainForm(); 
     try 
     { 
      connection.Open(); 
      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      command.CommandText = "SELECT * FROM Employees WHERE Username = @Username AND Passcode = @Passcode"; 
      command.Parameters.AddWithValue("@Username", txtUsername.Text); 
      command.Parameters.AddWithValue("@Passcode", txtPassword.Text); 

      OleDbDataReader reader = command.ExecuteReader(); 
      int count = 0; 
      while (reader.Read()) 
      { 
       count = count + 1; 
      } 

      if (count == 1) 
      { 
       Employees emp = new Employees(); 
       //emp.MdiParent = this.MdiParent; 
       //emp.Show(); 
       mf.ToolStripFile.enabled = true; 
       this.Dispose(); 
      } 
      if (count > 1) 
      { 
       MessageBox.Show("There is a duplicate in username and password."); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("ERROR: " + ex, "LOGIN"); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
+0

Что вы получаете именно от выполнения этого кода ? Что не работает? Отображается ли 'mf'? (Я не вижу 'mf.Show()') –

+0

Вы отключите вновь созданный MainForm, который не может работать. Вместо этого вы должны передать ссылку на ваш исходный MainForm на «form2». – Robert

ответ

0

Вы создаете новый экземпляр вашей основной формы. Фактически вам нужно использовать экземпляр текущей формы с использованием свойства MDIParent.

Вы можете использовать что-то подобное в родительской форме:

 public bool EnableButton 
     { 
      set 
      { 
       button1.Enabled = value; 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      button1.Enabled = false; 

      MDIChild child = new MDIChild(); 
      child.MdiParent = this; 
      child.Show(); 
     } 

В вашей форме ребенка, вы можете сделать что-то вроде этого:

 private void button1_Click(object sender, EventArgs e) 
     { 
      // if successful 
      (MdiParent as MDIParent).EnableButton = true; 
     } 
+1

MDIChild child = new MDIChild(); Является ли это новым классом или это встроенный класс? MDIChild не проявляется в раздувании VS только MdiChildren и MdiClient. Не могли бы вы угадать. – Ibanez1408

+0

Yessss! Спасибо, датский. Мне потребовалось некоторое время выяснить, что вы хотели сказать мне, но это того стоило! – Ibanez1408

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