2016-06-15 2 views
1

после ввода имени пользователя и пароля, соответствующие формы не загружаются. только экран входа в систему, который будет скрываться/закрыт. пользовательские роли/пароли/каждый на 100% правильный. Результат «роли» также верен. Просьба сообщить.C# формы не загружаются через оператор switch

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     DataTable result = uc.Login(tbxUserName.Text, tbxPassword.Text); 
     if (result.Rows.Count == 1) 
     { 
      this.Hide(); 
      string role = result.Rows[0]["Role"].ToString(); 

      switch (role) 
      { 
       case "User": 
        FrmUser fuser = new FrmUser(); 
        fuser.ShowDialog(); 
        this.Close(); 
        break; 

       case "Admin": 
        FrmMain fmain = new FrmMain(); 
        fmain.ShowDialog(); 
        this.Close(); 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
+0

Вы проверили, поставив точку останова возле корпуса выключателя и протестировав его? –

+0

Вы пробовали 'fuser.Show()' вместо 'fuser.ShowDialog()'? ShowDialog вернет модальную форму, которая ограничивает доступ к родительской форме до тех пор, пока не вернется результат: http://msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx –

+0

Я попробовал. такие же результаты. Как только я вставляю пароль, все исчезает, но визуальная студия показывает, что приложение все еще работает. – ceranda

ответ

0

я заметил, что вместо того, чтобы выполнять this.Close(), чтобы закрыть форму входа на каждой роли, сохранить эту регистрационную форму, скрытый позади после успешного входа в систему:

if (result.Rows.Count == 1) 
    { 
     this.Hide(); 
     string role = result.Rows[0]["Role"].ToString(); 

     switch (role) 
     { 
      case "User": 
       FrmUser fuser = new FrmUser(); 
       fuser.ShowDialog(); 
       // note that this.Close() removed 
       break; 

      case "Admin": 
       FrmMain fmain = new FrmMain(); 
       fmain.ShowDialog(); 
       // note that this.Close() removed 
       break; 
     } 
    } 
    else 
    { 
     MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error); 
     Application.Exit(); // optional, use if you want to exit all app window when wrong credentials supplied 
    } 

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

private void FrmUser_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); 
} 

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); 
} 

Ссылка: When this.Close() executed all forms close?

Надеюсь, что ваши проблемы решены, CMIIW.

+0

Спасибо за внимание. результат такой же. оцените свое время. – ceranda

+0

С этого момента я до сих пор не могу определить, какую форму вы задали в качестве основной формы на Application.Run внутри основного метода. Предположим, что эта форма входа станет основной формой, закрытие означает прекращение всего приложения. Если это условие подходит вам, выберите другую форму, а не форму входа, чтобы указать основную форму на первом месте. –

0

На самом деле это странно. Могли бы вы проверить, открыта ли форма и почему-то потерял Фокус? Вы можете сделать это положить следующий фрагмент код после этого заявления:

fuser.ShowDialog(); 

кода, чтобы проверить, если форма остается открытая:

if (Application.OpenForms[fuser.Name] == null) 
{ 
    MessageBox.Show("Form is not open"); 
} 

Надеется, что это может помочь.

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