C 乙個只能接收某些字元的textbox

2021-09-05 17:45:49 字數 957 閱讀 9868

經常某些輸入的文字要求只能是數字等,比如qq登陸框上的qq帳號,如果按鍵不是數字,則沒有反應。原理當然是很簡單的,只需要在相應訊息到來時阻止控制項去處理訊息即可。

這種例子很多,當然可以override keypress事件。也可以從textbox繼承乙個類,然後重寫wndpro,從而無視某些訊息。

最重要的訊息是wm_char。此外,還有幾個特殊按鍵是永遠不能遮蔽的,分別是backspace, delete,此外還有快捷鍵,ctrl-a,

ctrl-c,ctrl-x,ctrl-v.再此外,我們還要在執行貼上時對文字做一次判斷,不合法文字則被忽略。

可以用乙個filterstring的string來記錄合法字元,不在此字串中認為是不接受的字元,

//////覆蓋視窗過程!處理wm_char訊息!

///

///

protected

override

void

wndproc(

refmessage m)

break

;case

wm_paste:

//貼上訊息

idataobject obj 

=clipboard.getdataobject();

if(obj 

==null

)return;if

(obj.getdatapresent(dataformats.text))

}break

;}            

//處理訊息

base

.wndproc(

refm);}

今天有些迷糊,主要是發現只處理wm_char時,ctrl-a快捷鍵失效了,於是在keydown裡面手工實現了全選。具體原因也沒認真去研究,另外乙個問題是發現對小數點的遮蔽『.』無效,原因也不詳,好像按'.'的時候沒產生wm_char訊息就直接被處理掉了。鬱悶。先就這樣吧,不是很優美。

關於STM32串列埠接收中斷中只能接收乙個位元組

最近除錯stm32的串列埠接收時發現例程中只能接收乙個位元組 例程如下 1 初始化串列埠1 2 void uart init u32 bound 43 void usart1 irqhandler void 串列埠1中斷服務程式 44 53 54 55 56 57這是較為普遍的原始碼例程的寫法,用原...

關於STM32串列埠接收中斷中只能接收乙個位元組

最近除錯stm32的串列埠接收時發現例程中只能接收乙個位元組 例程如下 1 初始化串列埠1 2void uart init u32 bound 43void usart1 irqhandler void 串列埠1中斷服務程式44 5354 55 5657 這是較為普遍的原始碼例程的寫法,用原子的版本...

C 乙個串列埠接收思路

void uart rx isr void 接收中斷函式 else recv state 0 回到初始狀態 break case1 if c 0xff 是陣列第二位元組 攏共 3位資料 中間這位 為資料位 就不進行校驗判斷了 else break case2 if c 0x03 是陣列第三位元組 e...