2011-03-14 47 views
0

我的文本框清除後。起始位置從第二行開始,而不是第一行。 (我不知道什麼是閃爍|被稱爲)按Enter後C#文本框在第二行開始

我正在做一個聊天服務器,所以有一個按鈕來發送當前文本。然後在按鍵輸入它將激活button1以發送當前文本。

TextChanged事件純粹是爲了調試目的。

textChanged被調用兩次。一旦onBox.Text = string.Empty;這部分仍然很好。 inBox.Text爲null。

退出button1_Click後,第二次調用TextChanged。但這一次。起始位置在第二行而不是第一行。 inBox.Text的長度爲2.

任何想法是什麼問題?謝謝。

private void button1_Click(object sender, EventArgs e) 
     { 
      Global.Send("{Chat}{" + Global.userName + "}" + inBox.Text); 
      inBox.Text = string.Empty; 
     } 

     private void inBox_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar == 13) 
       button1.PerformClick(); 
     } 

     void InBoxTextChanged(object sender, EventArgs e) 
     { 
      TextBox tb = (TextBox)sender; 
      char[] c = tb.Text.ToCharArray(); 
      int len = c.Length; 
     } 
+0

順便說一句,那閃爍的我叫插入點「,」插入「或」I-Beam「等名稱。 http://en.wikipedia.org/wiki/Cursor_%28computers%29 – Infotekka 2011-03-14 04:01:48

+0

我最初認爲它也被稱爲Caret。從「TextBox.ScrollToCaret」的方法,但Caret維基給出了另一個定義。 http://en.wikipedia.org/wiki/Caret謝謝你的澄清。 – user607455 2011-03-14 06:51:31

+0

它被稱爲插入符號。有關更多信息,請參閱[在MSDN上的此處](http://msdn.microsoft.com/zh-cn/library/ms648398%28VS.85%29.aspx)。 – 2011-03-14 12:14:28

回答

1

在Inbox_Keypressed()方法中,KeyPressEventArgs.Handled屬性設置爲true (也,你不應該使用 13 - Keys.Return更具有可讀性)

private void inBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) 
    { 
    button1.PerformClick(); 
    e.Handled = true; 
    } 
} 
+0

+1爲處理。但Keys.Return不是猶太教,它是一個虛擬鍵。演員陣容提醒你有一個不匹配的地方。改用'\ r'。 – 2011-03-14 03:24:05

+0

@Hans:感謝Keys.Return的信息。其實我更像是一個Delphi人,而不是C#。 :)更正。 – 2011-03-14 03:28:29

+0

KeyUp的作品。 e.Handled究竟做了什麼? – user607455 2011-03-14 03:31:47

1

將多行屬性設置爲false?

+0

嘗試在單行上使用WLM? – user607455 2011-03-14 03:15:06

1

發生這種情況是因爲按鍵事件在將密鑰發送到文本框之前觸發。也就是說,你的代碼執行,然後KeyChar 13被髮送到文本框。

嘗試使用KeyUp代替。

相關問題