2014-05-09 34 views
1

這可能是一個簡單的問題。我是C#(和大多數編程)的新手,我試圖製作一個由兩個文本框組成的程序。這些文本框中的信息會經常被刪除,並且需要輸入新的信息,因此它需要很快。爲了方便起見,我試圖讓退格鍵重新集中在前一個文本框上,而不是使用Shift + Space或單擊。這是我的。該程序運行,但下面的代碼似乎並沒有做我打算做的事情。使用退格移回到上一個文本框(C#)

if (e.KeyCode == Keys.Back && textBox2.TextLength == 0) 
    textBox1.Focus(); 

所以,當textbox2有0個字符和退格鍵後來鍵入,我希望它回到textbox1。謝謝你的幫助。

+0

何時運行此代碼? – Yahya

+0

正如@Yahya所指出的那樣,在哪種情況下你會這樣做?此外,該代碼的*意圖是什麼,但沒有發生?我會用'TextChanged'來做,只會檢查'textBox2.Text.Length == 0'。當textBox2的內容被改變*和*變爲空*(Backspace,選擇全部和刪除等)時,這會將焦點移到'textBox1'。 – Sinatr

+0

我在KeyUp中這樣做,但已經嘗試了TextChanged。如果我只在TextChanged下使用textBox2.Text.Length == 0,一次點擊退格會導致文本長度達到零,並且光標立即進入textBox1。如果您需要刪除textBox2中的一個字符並重新輸入,這是一個痛苦。它需要你點擊tab再次移回到textBox2。如果textBox2中有1個字符,我基本上試圖在按退格鍵兩次時將它移回到textBox1。第一個清除該字段,第二個將光標移動到textBox1。 – Natchey

回答

0

我終於搞定了。我所做的和我之前嘗試的並沒有太大的不同,但這是我如何做到的。

  1. 我創建從的.cs [設計]視圖兩個文本框。
  2. 我選擇了每個方框並單擊屬性下的「事件」閃電圖標。這是我以前在這種情況下無法使用時所忽略的。
  3. 我將它們都設置爲KeyPress和TextChanged(即textBox1_KeyPress & textBox1_TextChanged(對textBox2做了同樣的事情)我不知道這是否是它工作原因的一部分,我只是記錄我的行爲。
  4. 我雙擊每個文本框中這創造了每一個EventArgs。這是我保存我的常規代碼。
  5. 除了EventArgs的我手動創建一個KeyEventArgs(見下文),我把功能退格。這是代碼:
// Here is the KeyEventArgs I created using KeyPress (Public). 

公共無效textBox2_KeyPress(對象發件人,發送KeyEventArgs E)

 { 

      if (e.KeyCode == Keys.Back && textBox2.Text.Length == 0) 
       textBox1.Focus(); 
     } 


// Here is where the rest of my code (Private). 

私人無效textBox2_TextChanged(對象發件人,EventArgs的)

  { 
      if (textBox2.Text == "A") 
       richTextBox3.Text = "January"; 

      if (textBox2.Text == "B") 
       richTextBox3.Text = "February"; 

      if (textBox2.Text == "C") 
       richTextBox3.Text = "March"; 

// Code Continues... 

很抱歉,如果這是不明確。我只是想記錄一下我以後如何幫助某人。感謝大家的幫助。

+0

您應該編輯原始問題以添加額外信息,或者使用註釋與人討論小問題。如果您不回答問題,請不要使用答案。 – julealgon

3

因此,要做到這一點,您需要確保您在KeyUp上運行此代碼,但是您也不需要多個KeyUp處理程序來執行此操作。考慮這個KeyUp處理程序:

private void textBox_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    var textBox = sender as TextBox; 
    if (textBox == null) { return; } 

    if (e.KeyCode == Keys.Back && textBox.Text.Length == 0) 
    { 
     // this here of course being the Form 
     // Select causes the form to select the previous control in the tab order 
     this.Select(true, false); 
    } 
} 

現在只是將這個附加處理程序要這樣的行爲都文本框和他們都會工作。

+0

這還不適合我。同時爲單個文本框同時分別使用EventArgs和KeyEventArgs是一個問題嗎? – Natchey

+1

@ user3620471:不要雙擊設計器的文本框。點擊控件,按F4,進入事件標籤,然後雙擊'KeyUp'事件。 –

相關問題