2008-12-17 33 views
2

我想要一個接受TAB鍵的文本框(並將TAB,ASCII 0x09,\ t相應地放入文本框中)而不是跳轉到下一個控件。該TextBox有一個屬性AcceptsTab,我已經設置爲true,但是這並不能提供所需的結果。事實證明,AcceptsTab屬性只有在Multiline設置爲true時才起作用。不過,我想要一個不接受換行符的單行文本框。允許用戶插入一個選項卡到文本框中但不是換行

回答

4

這就是你要做的。創建自己的繼承自TextBox的類。在構造函數中,將multiline設置爲true,並將AcceptsTab設置爲true。然後,覆蓋的WndProc,並使用此代碼:

 protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == (int)0x102 && m.WParam.ToInt32() == 13) 
      { 
       return; 
      } 

      base.WndProc(ref m); 
     } 

這將阻止被接受,因此新線將不會創建回車鍵。哈克?是的,但它會工作..

編輯:我會解釋這段代碼做了什麼。每一個窗體窗體和控件在發生什麼事情時都會得到一個windows消息,比如paint,key down等等......在這種情況下,我正在尋找一個WM_CHAR消息(它是0x102),它是告訴TextBox的消息鍵被按下。如果這是消息,並且WParam == 13,那麼這意味着Enter被按下,在這種情況下,返回,什麼都不做。否則,按預期恢復。說得通?

+0

你可以給他添加一些評論,解釋發生了什麼? – 2009-02-22 18:19:00

0

將多行設爲true,並將行大小設爲1.您將獲得所需的結果。

+0

我該如何去'將行大小設置爲1'? – pbean 2008-12-17 14:29:27

相關問題