2016-10-04 2 views
0

В моем проекте первая форма: Форма входа и появляется только один раз для пользователя, когда он пытается войти в систему. Если вход в систему успешно, тогда Основная форма системы появляется и скрывается в форме входа в систему, если попытка входа в систему не удалась, тогда пользователь может попробовать другое время и т. д.
Проблема в том, что пользователь в Основная форма хочу закройте программу, используя кнопку X, сообщение . Форма входа из Событие FormClosing появляется при выходе пользователя из системы в случае нажатия пользователем. Да, но когда пресс пользователь NO программы не закрываются, но он возвращается в форму входа, которая скрыта Коды для FormClosing события в Логиниться являются:Как закрыть конкретную форму в моем проекте, если это когда-то появилось

private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 
      if (logoutResult == DialogResult.No) 
      { 
       e.Cancel = true; 
      } 
      else 
      { 

       e.Cancel = false; 
      } 
     } 

Теперь же FormClosing событие является происходит как для Форма входа и основная форма как сделать программу ничего не делать в случае нажатия пользователем NO в logout messageBox и оставаться в его текущей ситуации и после входа пользователя в систему Форма входа закрывается не скрыть .. приветствует

+0

try: 'e.Cancel = true; base.LoginFrm_FormClosing (е); ' – Vicky

+0

@Vicky компилятор говорит об ошибке \t \t 1 'System.Windows.Forms.Form' не содержит определение для 'LoginFrm_FormClosing' \t C: \ Users \ Coder \ Desktop \ 9 \ Phamacy Система управления \ Система управления Phamacy \ Form1.cs Система управления Phamacy –

+0

Почему у вас есть * LoginFrm_FormClosing * event? Это не нужно! Когда пользователь вводит правильный пароль (т.е.e в текстовом поле), вы просто скрываете форму входа. В * logout messageBox * вы закрываете все или нет. –

ответ

1

Если вы не хотите, чтобы показать MessageBox на LoginFrm_FormClosing когда все закрывается:

private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     //Add this lines, your login form is hidden 
     if (this.Visible == false) 
     { 
      return; 
     }    

     DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 
     if (logoutResult == DialogResult.No) 
     { 
      e.Cancel = true; 
     } 
     else 
     { 

      e.Cancel = false; //<- you dont need this 
     } 
    } 

И MainForm:

//Add this line 
Boolean isClosed = false; //<-- 

private void MainFrm_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     //Add this 
     if(isClosed == true){ 
      return; 
     } 

     DialogResult res = MessageBox.Show("Do you want to exit?"); 

     if (res == DialogResult.OK) { 
      try { 
       SqlCommand cmd = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn); 
       cmd.ExecuteNonQuery(); 

       //Add this line 
       isClosed = true; //<-- 

       Application.Exit(); 
      } 
      catch (SqlException ex) { 
       MessageBox.Show(ex.Message); 
      } 
      finally { cn.Close(); } 
     } 

    } 
+0

да, сэр, ваш ответ сделал то, что мне нужно, но есть одна проблема и это окно сообщения появляется дважды .. это коды для события FormClosing MainFrm: private void MainFrm_FormClosing (отправитель объекта, FormClosingEventArgs e) { DialogResult res = MessageBox.Show («Вы хотите выйти?»); if (res == DialogResult.OK) { try { SqlCommand cmd = new SqlCommand ("удалить из empLogin, где empId =" + deleteById + "", cn); cmd.ExecuteNonQuery(); Application.Exit(); } catch (SqlException ex) { MessageBox.Show (ex.Message); } , наконец { cn.Close(); }}} –

+0

@ Tima'aTamim Я вижу проблему! Я забыл написать код для * MainFrm *. См. Отредактированный ответ. –

+0

Спасибо, сэр. Вы сделали мой день, этот код работал со мной успешно, и, наконец, я получил то, что хотел. Я также внес небольшое изменение в свой код с помощью кнопок диалогового окна, в которых я использовал кнопки YesNo, а не OK. это коды для else block (когда пользователь нажимает no, чтобы не выйти из системы) else { isClosed = false; e.Cancel = true; } –

0

Попробуйте этот код, добавив base.OnFormClosing (e); в верхней части вашего метода

private void LoginFrm_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     base.OnFormClosing(e); 

     DialogResult logoutResult = MessageBox.Show("Do you want to logout?","Logout",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 
     if (logoutResult == DialogResult.No) 
     { 
      e.Cancel = true; 
     } 
     else 
     { 

      e.Cancel = false; 
     } 
    } 
0

У меня есть лучшее решение для показа формы входа.

В главной функции вашего проекта отобразится ваша форма входа в систему, а затем в форме входа в систему проверьте пользователя, затем установите DialogResult в положение ОК и закройте форму для входа. Если форма входа в систему вернется, и в диалоговом окне «Диалоговое окно» ОК отображается основная форма.

static void Main() 
{ 
    var frm = new frmLogin().ShowDialog(); 

    if (frm == DialogResult.OK) 
     Application.Run(new frmMain()); 
} 

Таким образом, форма входа в систему закрыта перед основной формой.

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

private void Logout() 
{ 
    var frm = new frmLogin().ShowDialog(); 

    // if new user is not identified. 
    if (frm == System.Windows.Forms.DialogResult.Cancel) 
    { 
     // Close the main form 
     this.Close(); 
    } 
} 
+0

не могли бы вы объяснить больше, если я использую этот метод в своей программе, он должен быть написан в какой части. –

+0

напишите его в program.cs в главной функции – MSL