2013-08-07 46 views
1

我有一個登錄屏幕,我想激活它,當我按下密碼輸入文本框。 問題是,即使它工作,當我關閉窗體時,應用程序的行爲仍然處於按下狀態,窗體以無限循環打開。激活屏幕時,輸入C#

這裏是我的代碼:

private void textBox2_TextChanged(object sender, EventArgs e) 
     { 
      textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); 

     } 

public void textBox2_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (user == Username[1] && pass == passwords[1]) 
       { 
        MessageBox.Show("Login successfull", "Welcome, HR"); 
        UpdateDBForm newEmployee = new UpdateDBForm(); 
        this.Hide(); 
        newEmployee.ShowDialog(); 
        return; 

       } 
} 

如何TDO我解決這個問題? 謝謝。

+0

'+ ='通常意味着加入......所以,只要你的文字改變另一個'KeyEventHandler'被添加到'KeyDown'這是不是真的想要什麼。註冊啓動 –

回答

1

您分配KeyDown -EventHandler每次你的文字變化:

private void textBox2_TextChanged(object sender, EventArgs e) 
{ 
    textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); // EVIL! 
} 

這意味着,更多的時候你輸入數據到文本越多,事件處理程序將被分配,當你最終按下回車鍵它會被多次調用。 分配事件處理程序一次,即在您的構造函數中,這應該工作。

+1

你能給我一個激動人心的代碼示例嗎? – user2023203

+1

現在還沒有出現,但將其視爲一個起點。 –

+0

謝謝,這工作完美! – user2023203

1

正如@ bash.d寫你的事件多次分配,(無論是由設計師或構造(後InitializeComponent調用)或事件)

private void Form_Load(object sender, EventArgs e) 
{ 
    textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); 
} 

也是你寫的是做一次你想要用戶登錄後,點擊進入,所以你必須添加此if

public void textBox2_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     if (user == Username[1] && pass == passwords[1]) 
     { 
      MessageBox.Show("Login successfull", "Welcome, HR"); 
      UpdateDBForm newEmployee = new UpdateDBForm(); 
      this.Hide(); 
      newEmployee.ShowDialog(); 
      return;   
     } 
    } 
}