C TextBox中只允許輸入數字的解決方法

2021-06-16 02:53:05 字數 2400 閱讀 3869

在定製的textbox控制項中,如果只允許輸入數字,需要考慮如下三種情況:

正常按鍵輸入的字元,包括西文、中文字元等

通過鍵盤快捷鍵方式貼入的文字,即ctrl+v操作

通過上下文關聯選單的mouse操作貼入的文字,即」貼上「操作

在**的同類文章中,多數只考慮了第1種情況,忽略得了第2、3種常見的操作。本文**的處理方法核心思路是過載事件onkeypress()和兩個法processcmdkey()與wndproc(),並把ctrl+v、關聯選單的paste操作統一到鍵盤錄入操作中,從而在onkeypress()遮蔽掉非數字鍵。

1、過載鍵盤事件onkeypress()

鍵盤輸入的字元可以通過過載textbox控制項的onkeypress()事件處理,見如下**:

///

/// 遮蔽非數字鍵

///

protected override void onkeypress(keypresseventargs e)

// 特殊鍵, 不處理

if ((int)e.keychar <= 31)

// 非數字鍵, 放棄該輸入

if (!char.isdigit(e.keychar))

} 2、過載命令鍵處理方法processcmdkey()

可以在processcmdkey()中捕獲快捷鍵ctrl+v操作。首先要清除當前的選擇文字,然後讀取剪下板clipboard中的內容,最後通過模擬鍵盤輸入的方式」輸入「clipboard的內容。需要指出,在processcmdkey()方法中不能使用靜態方法sendkeys.send(),但可以通過控制項的wndproc()方法傳送字元訊息以達到模擬鍵盤錄入的目的。見如下**:

///

/// 捕獲ctrl+v快捷鍵操作

///

protected override bool processcmdkey(ref message msg, keys keydata)

return true; }

return base.processcmdkey(ref msg, keydata); }

///

/// 通過訊息模擬鍵盤錄入

///

private void sendcharkey(char c)

3、過載訊息處理方法wndproc()

可以在定製textbox控制項中建立無內容的上下文選單物件,從而遮蔽該選單,方法是在定製控制項的建構函式中增加如下**:

public class customtextbox: textbox

由於上下文選單的paste操作對應windows的wm_paste訊息,於是可以在控制項的wndproc()方法中捕獲該訊息,然後獲得剪下板clipboard中的內容,最後通過sendkeys.send()方法模擬鍵盤錄入操作。需要注意,這裡不能呼叫前面processcmdkey()中模擬鍵盤輸入函式sendcharkey()。見如下**:

///

/// 捕獲mouse的paste訊息

///

protected override void wndproc(ref message m)

else

} 4、消除選擇clearselection()、刪除字元deletetext()

還必須分析前面**中的函式。其中,函式clearselection()用以清除當前的選擇文字,即清除this.selectedtext;函式deletetext()則刪除當前字元。注意其中的技巧,就是轉換delete鍵操作為backspace操作。此外,deletetext()函式還需要確定當前的this.selectionstart值。具體**如下:

///

/// 清除當前textbox的選擇

///

private void clearselection()

int sellength = this.selectedtext.length;

this.selectionstart += this.selectedtext.length;  // 游標在選擇之後

this.selectionlength = 0;

for (int k = 1; k <= sellength; k++)

} ///

/// 刪除當前字元, 並計算selectionstart值

///

private void deletetext(keys key)

} if (selstart == 0 || selstart > base.text.length)  // 不需要刪除

if (selstart == 1 && base.text.length == 1)

else  // selstart > 0

}

html限制輸入(只允許輸入數字字母等)

title 無標題文件 body p 只允許輸入數字 inputtype text onkeyup value value.replace d g,onbeforepaste clipboarddata.setdata text clipboarddata.getdata text replace ...

js 只准輸入數字 JS驗證只允許輸入數字

1.文字框只能輸入數字 小數點也不能輸入 document ready function txt rowscount blur function else txt rowscount keyup function 2.只能輸入數字,能輸小數點.3.數字和小數點方法二 4.只能輸入字母和漢字 5.只能...

WPF 只允許輸入數字的文字框

在網上有不少關入這方面的資料,下面是我選用的乙個方案 public numbertextbox void numbertextbox keydown object sender,keyeventargs e else void numbertextbox textchanged object sen...