2013-11-25 2 views
0

Как это сделать, если (count == 1), чтобы он делал то же самое, что и в данный момент, но вместо того, чтобы скрывать, закрыть и открыть другую форму (e.x form2)?if (count == 1) закрыть эту форму и открыть форму2, как?

Я пробовал this.Close(); но он закончил закрытие программы до того, как будет запущен код для открытия новой формы.

private void button1_Click(object sender, EventArgs e) 
    { 

     try 
     { 

      string myConnection = "datasource=localhost;port=3306;username=dolfin;password=quack"; 
      MySqlConnection myConn = new MySqlConnection(myConnection); 

      MySqlCommand SelectCommand = new MySqlCommand("select * from database1.logins where username='" + this.username_txt.Text + "' and password='" + this.password_txt.Text + "' ;", myConn); 

      MySqlDataReader myReader; 
      myConn.Open(); 
      myReader = SelectCommand.ExecuteReader(); 
      int count = 0; 
      while (myReader.Read()) 
      { 
        count = count + 1; 

      } 
      if (count == 1) 
      { 
       MessageBox.Show("Username and password is correct."); 
       this.Hide(); 
       Form2 f2= new Form2(); 
       f2.ShowDialog(); 
     } 
      else if (count > 1) 
      { 

       MessageBox.Show("Duplicate Username and Password... Access Denied!"); 
      } 
      else 
       MessageBox.Show("Username and password is not correct... please try again."); 
      myConn.Close(); 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.Message); 
     } 
    } 
+7

Ваш код уязвим для SQL-инъекции. – Dai

+4

Закрытие основной формы закончит цикл сообщения, код выйдет из 'Application.Run (yourMainForm);' Вам не нужно закрывать форму, скрывая ее достаточно, не думайте, что это пустая трата памяти , Я думаю, это не стоит упоминать здесь. –

+0

Мне нужно, чтобы закрыть tho, это нормально, если сообщение не появляется. – user3024598

ответ

2

Вы должны сделать изменения, как это в вашем файле program.cs, поскольку в настоящее время вашей первая форма ваших приложений основная форма; он не может быть закрыт без завершения приложения, но это достаточно легко изменить.

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

Form1 first = new Form1(); 
Application.Run(first); 
if (first.DialogResult == DialogResult.Yes) 
{ 
    Form2 second = new Form2(); 
    Application.Run(second); 
} 
+2

Могу ли я сделать более легкую вещь? Как сделать это, когда вы нажимаете кнопку x (кнопка закрытия) в form2, она должна убивать приложение Code.exe в taskmanager? (например) – user3024598

+0

@ user3024598 Это довольно прост; это всего лишь несколько строк кода, и он делает именно то, что вы хотите, и это совсем не сложно. Это также семантически подходящий способ решения проблемы. Скорее всего, альтернатива, которую вы попробуете, будет сложнее работать, а не проще. – Servy

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