精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何實現C# TextBox數字的輸入

開發 后端
c# textbox數字控件中限制只允許輸入數字常常用事后模式處理,本文向大家介紹下控件錄入操作的事前處理模式。希望本文對大家有所幫助。

C#旨在設計成為一種「簡單、現代、通用」,以及面向對象的程序設計語言。其中c# textbox數字輸入需要注意的一些情況容易被忽略,針對這一情況,筆者將在這篇文章中分享自己的一些經驗。

最近看到一些關于c# textbox數字中限制只允許輸入數字的博文,這類問題常常用事后處理模式:錄入字符結束后在控件離開(如Exit事件)或確認時進行判斷。本文探討控件錄入操作的事前處理模式:做錄入操作時屏蔽非數字字符。下面,結合筆者前段時間修改完善的開源數值文框TNumEditBox控件,介紹一個基于定制c# textbox數字控件的解決方法。

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

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

通過鍵盤快捷鍵方式貼入的文本,即Ctrl+V操作

通過上下文關聯菜單的Mouse操作貼入的文本,即”粘貼“操作
在探討的同類文章中,多數只考慮了第1種情況,忽略得了第2、3種常見的操作。本文探討的處理方法核心思路是重寫事件OnKeyPress()和兩個方法 ProcessCmdKey()與WndProc(),并把Ctrl+V、關聯菜單的Paste操作統一到鍵盤錄入操作中,從而在 OnKeyPress()屏蔽掉非數字鍵。

1、重寫鍵盤事件OnKeyPress()

鍵盤輸入的字符可以通過重寫c# textbox數字控件的OnKeyPress()事件處理,見如下代碼:

  1. protected override void OnKeyPress(KeyPressEventArgs e)  // 屏蔽非數字鍵  
  2. {  
  3.     base.OnKeyPress(e);  
  4.     if (this.ReadOnly)  // 只讀, 不處理  
  5.     {  
  6.         return;  
  7.     }  
  8.             if ((int)e.KeyChar <= 32)  // 特殊鍵(含空格), 不處理  
  9.     {  
  10.         return;  
  11.     }  
  12.         if (!char.IsDigit(e.KeyChar))  // 非數字鍵, 放棄該輸入  
  13.     {  
  14.         e.Handled = true;  
  15.         return;  
  16.     }  

2、重寫命令鍵處理方法ProcessCmdKey()

可以在ProcessCmdKey()中捕獲快捷鍵Ctrl+V操作。首先要清除當前的選擇文本,然后讀取剪切板ClipBoard中的內容,最后通過模擬鍵盤輸入的方式”輸入“ClipBoard的內容。需要指出,在ProcessCmdKey()方法中不能使用靜態方法 SendKeys.Send(),但可以通過控件的WndProc()方法發送字符消息以達到模擬鍵盤錄入的目的。見如下代碼:

  1. protected override bool ProcessCmdKey(ref Message msg, Keys keyData)  
  2.   {  
  3.     if (keyData == (Keys)Shortcut.CtrlV)  // 快捷鍵 Ctrl+V 粘貼操作  
  4.     {  
  5.         this.ClearSelection();  
  6.         string text = Clipboard.GetText();  
  7.         for (int k = 0; k < text.Length; k++) // can not use SendKeys.  
  8.         {  
  9.             // 通過消息模擬鍵盤輸入, SendKeys.Send()靜態方法不行  
  10.             SendCharKey(text[k]);  
  11.         }  
  12.         return true;      
  13. }  
  14.     return base.ProcessCmdKey(ref msg, keyData);  
  1. private void SendCharKey(char c)  // 通過消息模擬鍵盤錄入  
  2. {  
  3.     Message msg = new Message();  
  4.     msg.HWnd = this.Handle;  
  5.     msg.Msg = WM_CHAR;  // 輸入鍵盤字符消息 0x0102  
  6.     msg.WParam = (IntPtr)c;  
  7.     msg.LParam = IntPtr.Zero;  
  8.     base.WndProc(ref msg);  


3、重寫消息處理方法WndProc()

可以在定制c# textbox數字控件中創建無內容的上下文菜單對象,從而屏蔽該菜單,方法是在定制控件的構造函數中增加如下代碼:

  1. public class CustomTextBox: TextBox  
  2. {  
  3.     // 創建無內容菜單對象, 等價屏蔽該控件的上下文菜單  
  4.     this.ContextMenu = new ConTextMenu();  
  5.   } 

由于上下文菜單的Paste操作對應Windows的WM_PASTE消息,于是可以在控件的WndProc()方法中捕獲該消息,然后獲得剪切板 ClipBoard中的內容,最后通過SendKeys.Send()方法模擬鍵盤錄入操作。需要注意,這里不能調用前面ProcessCmdKey() 中模擬鍵盤輸入函數SendCharKey()。見如下代碼:

  1. protected override void WndProc(ref Message m)  // 捕獲Mouse的Paste消息  
  2. {  
  3.     if (m.Msg == WM_PASTE)  // 選擇上下文菜單的"粘貼"操作    {  
  4.         this.ClearSelection();  
  5.         SendKeys.Send(Clipboard.GetText());  // 模擬鍵盤輸入  
  6.     }  
  7.     else 
  8.     {  
  9.         base.WndProc(ref m);  
  10.     }  

4、消除選擇ClearSelection()、刪除字符DeleteText()

還必須分析前面代碼中的兩個函數:
ClearSelection()用以清除當前的選擇文本,即清除this.SelectedText
DeleteText()則刪除當前字符
需要指出其中的技巧,就是轉換Delete鍵操作為BackSpace操作。此外,函數DeleteText()還需要確定當前的this.SelectionStart值。具體代碼如下:

  1. private void ClearSelection() // 清除當前TextBox的選擇  
  2. {  
  3.     if (this.SelectionLength == 0)  
  4.     {  
  5.         return;  
  6.     }  
  7.     int selLength = this.SelectedText.Length;    this.SelectionStart += this.SelectedText.Length;  // 光標在選擇之后  
  8.     this.SelectionLength = 0;  
  9.     for (int k = 1; k <= selLength; k++)  
  10.     {  
  11.         this.DeleteText(Keys.Back);  
  12.     }  
  1. private void DeleteText(Keys key) // 刪除字符并計算SelectionStart值  
  2. {  
  3.     int selStart = this.SelectionStart;  
  4.     if (key == Keys.Delete)  // 轉換Delete操作為BackSpace操作  
  5.     {   
  6.        selStart += 1;  
  7.         if (selStart > base.Text.Length)  
  8.         {   
  9.            return;  
  10.         }  
  11.     }  
  12.     if (selStart == 0 || selStart >base.Text.Length)  // 不需要刪除  
  13.     {  
  14.         return;  
  15.     }  
  16.     if (selStart == 1 && base.Text.Length == 1)   
  17.    {  
  18.         base.Text = "";  
  19.         base.SelectionStart = 0;  
  20.     }  
  21.     else  // selStart > 0  
  22.     {  
  23.         base.Text = base.Text.Substring(0, selStart - 1) +  
  24.             base.Text.Substring(selStart, base.Text.Length - selStart);  
  25.         base.SelectionStart = selStart - 1;  
  26.     }  

5、結語

本文探討的是c# textbox數字控件輸入的事前處理模式,即在輸入字符的同時屏蔽非數字鍵。在實際應用中一般采取事后處理模式,即在c# textbox數字控件的Exit、Validate等事件中進行輸入后處理——離開該控時進行驗證。但事后處理模式有如下不足:

與數據源綁定時輸入非數字字符可能拋出異常,需要考慮異常捕獲

需要判斷數據并給出錯誤提示等處理

上述內容是從筆者的開源數值型數據編輯控件TNumEditBox中修改刪減而來的,該控件考慮的情況比只允許數字輸入要復雜得多,感興趣者可以參考并指正。需要指出,TNumEditBox的核心思路來自免費的Delphi控件PBNumEdit和開源的C#控件BANumEdit。作為回報,筆者也將TNumEditBox開源并發布到CodeProject。

本文來自:CSDN博客   作者:huihui

【編輯推薦】

  1. 編程語言排行榜:C語言當選08年年度編程語言
  2. C++標準委員會確定將concepts特性從C++0x中移除
  3. C#interface定義及使用淺析
  4. C#3.0新特性的介紹(自動屬性)
  5. C#HTTP文件傳輸的實現淺析
責任編輯:林琳 來源: CSDN博客
相關推薦

2009-09-08 22:58:00

c# textbox數

2009-09-02 17:29:10

C# TextBox換

2009-09-09 13:18:10

C# TextBox滾C# TextBox

2009-09-09 11:29:32

C# TextBox事

2009-09-09 12:55:59

C# TextBox事

2009-09-10 09:42:53

C# TextBox

2009-09-09 13:31:15

C# TextBox

2009-09-10 09:10:17

C# TextBox換

2009-09-10 10:22:05

C# TextBox

2009-09-09 21:56:29

2009-09-09 22:31:21

c# textbox失

2024-06-14 08:54:54

2009-08-19 14:29:33

C#代理

2009-08-26 15:09:57

C# Hook

2009-09-08 23:35:12

c# textbox失

2009-09-01 18:06:06

c#保存窗體狀態

2009-03-12 13:49:30

DataTemplatWPFC#

2009-06-16 10:20:05

多繼承C#

2009-09-10 17:48:05

C# button

2009-08-20 13:47:57

C#驗證輸入方法
點贊
收藏

51CTO技術棧公眾號

超碰在线免费观看97| 国产一区二区中文| 国内精品伊人久久久久影院对白| 日韩欧美不卡一区| 国产精品老牛影院在线观看 | 精品成人国产| 欧美日韩精品欧美日韩精品一 | 91国产高清在线| 性欧美在线视频| aaa日本高清在线播放免费观看| 日本免费一区二区视频| 国产精品色哟哟| 8x海外华人永久免费日韩内陆视频| 亚洲天堂久久新| 日韩深夜视频| 99精品视频一区二区三区| 欧美黑人性猛交| 亚洲精品在线不卡| 国产一区二区三区精品视频| 涩爱av色老久久精品偷偷鲁| 最新真实国产在线视频| 久久久午夜影院| 热99精品里视频精品| 国产一区二区按摩在线观看| 欧美日本视频在线| 波多野结衣综合网| 国产成人三级一区二区在线观看一| 日韩成人精品一区| 欧美在线观看18| 日韩免费av一区二区三区| 天堂网中文字幕| 国产中文字幕一区二区三区| 在线观看一区日韩| 欧美一区二区三区在线播放 | 亚洲精品成a人| 国产日韩精品视频| 国产成人av免费在线观看| 国产精品日本一区二区三区在线| 亚洲人成7777| 超碰97在线人人| 国产成人啪精品午夜在线观看| 国产精品jk白丝蜜臀av小说 | 亚州国产精品视频| 亚洲综合自拍| 日韩欧美一二三| www.超碰97.com| 在线免费观看污| 成人免费电影视频| 欧美在线中文字幕| 日本少妇裸体做爰| 亚洲性感美女99在线| 欧美另类在线播放| 亚洲一区二区三区综合| 欧洲av一区二区| 亚洲婷婷国产精品电影人久久| 欧美日韩国产综合在线| 国产精品久久久久久免费免熟| 亚洲欧美一级二级三级| 日韩激情在线视频| 婷婷免费在线观看| 电影k8一区二区三区久久| 久久伊人蜜桃av一区二区| 国产精品主播视频| 欧美不卡视频在线观看| 日韩午夜在线| 神马久久久久久| 亚洲熟女一区二区| 9999精品免费视频| 欧美午夜激情在线| 中文字幕中文字幕一区三区| 韩国av免费在线| 日本成人在线电影网| 欧美激情aaaa| 久久久久99精品| 日本午夜一区| 亚洲аv电影天堂网| 国产高潮免费视频| 国产福利电影在线播放| 国产精品进线69影院| 国产传媒欧美日韩| 在线免费观看日韩视频| 欧美三级不卡| 中文字幕日本精品| 成人h动漫精品一区| 久久av偷拍| 欧美视频精品在线观看| 春日野结衣av| 黄网av在线| 日韩欧美国产视频| 玖玖爱视频在线| 成人h动漫精品一区二区器材| 欧美精选一区二区| 国产视频手机在线播放| 成人av在线播放| 亚洲福利在线播放| 第一页在线视频| 日韩在线伦理| 欧美日韩1区2区| 国产一卡二卡三卡四卡| 欧美激情精品| 日韩av一卡二卡| 亚洲精品国产精品乱码在线观看| 国产一区二区三区网| 精品国产一区久久久| 无码 人妻 在线 视频| 日韩精品欧美大片| 亚洲成人亚洲激情| 成人在线观看免费高清| 九九在线高清精品视频| 亚洲精品理论电影| 国产wwwwxxxx| 先锋a资源在线看亚洲| 午夜精品一区二区三区在线视频| 久操视频免费在线观看| 欧美日韩精品免费观看视频完整| 欧洲成人免费视频| 成人h动漫精品一区二区无码| 国产一区不卡在线| 欧美日本国产精品| 国内老司机av在线| 欧美日韩一区在线| 中文字幕在线免费看线人| 自拍日韩欧美| 国产精品偷伦一区二区| 嫩草研究院在线观看| 国产性天天综合网| 日本高清久久一区二区三区| 污视频在线免费观看网站| 一区二区激情视频| 日本免费成人网| a√中文在线观看| 日韩欧美国产成人| 亚洲精品第二页| 午夜精品剧场| 91免费精品视频| 黄色美女一级片| 亚洲欧美日韩电影| 久艹在线免费观看| 天堂资源在线| 欧美视频在线观看一区| 全黄一级裸体片| 亚洲在线观看| 精品亚洲欧美日韩| av电影在线观看一区二区三区| 欧美日韩亚洲天堂| 午夜免费福利视频在线观看| 国产亚洲一卡2卡3卡4卡新区 | 97久久超碰国产精品| 日韩亚洲欧美一区二区| 香港久久久电影| 欧美精品亚州精品| 全部毛片永久免费看| 免费高清成人在线| 粉嫩精品一区二区三区在线观看 | 国产精品久久视频| 电影在线高清| 亚洲精品午夜久久久| 久久精品久久99| 天天躁日日躁狠狠躁欧美| 久久久久久久久久久免费精品| 懂色av中文字幕| 国产成人8x视频一区二区| 免费一区二区三区在在线视频| 老司机在线视频二区| 天天色综合天天| 99中文字幕在线| 欧美激情成人| 热久久这里只有| 国产女主播在线写真| 欧美在线视频不卡| 日本爱爱小视频| 国产精品美女| 99re视频| 国产极品在线观看| 亚洲视频999| 日本熟妇毛茸茸丰满| 99久久精品99国产精品| 国产精品乱码久久久久| 国产91精品入| 欧美在线xxx| 亚洲精品久久久久久动漫器材一区| 久久久久久久精| 国产高清www| 亚洲成aⅴ人片久久青草影院| 欧美老女人xx| 污污网站免费在线观看| 亚洲一区在线观看免费观看电影高清 | 欧美午夜免费影院| 欧美精品一区三区在线观看| 免费成人高清在线视频| 精品视频偷偷看在线观看| 波多野结衣在线观看视频| 亚洲欧美日韩中文播放| 熟女丰满老熟女熟妇| 久久99精品国产.久久久久| 日韩欧美三级电影| 在线免费成人| 欧美一级淫片videoshd| 成人免费看片| 717成人午夜免费福利电影| 美国黄色特级片| 成人动漫一区二区三区| 国产天堂视频在线观看| 国产一区网站| 国产精品初高中精品久久| 国产精品.xx视频.xxtv| 在线中文字幕日韩| 丰满人妻一区二区三区无码av| 欧洲日韩一区二区三区| 日韩成人高清视频| 亚洲欧美一区二区视频| 又色又爽又黄视频| 久久久久国产精品午夜一区| 欧美激情论坛| 9l视频自拍蝌蚪9l视频成人| 国产专区精品视频| 成人自拍av| 在线看国产精品| 中文字幕人妻互换av久久| 中文字幕巨乱亚洲| 国产精品区在线| 亚洲欧美视频| 成人免费观看cn| 欧美日韩福利| 日本a级片在线观看| 2020最新国产精品| 久久免费观看视频| 免费观看的毛片| 激情成人在线视频| 黄色一级视频免费观看| 国产精品久久久久久妇女6080| 蜜桃精品一区二区| 蜜臀av一区二区| 国产又大又硬又粗| 日韩欧美精品一区| 欧美一区观看| 免费看日本一区二区| 精品免费日产一区一区三区免费| 欧美激情精品| 91传媒在线免费观看| mm视频在线视频| 欧美激情二区三区| 亚洲综合图区| 美女精品视频一区| av香蕉成人| 久久国产精品99国产精| 国产日产一区二区三区| 久久亚洲精品一区二区| 五月婷婷在线观看视频| 精品国产乱码久久久久久1区2区| 精品人妻一区二区三区麻豆91 | 狠狠色丁香婷婷综合影院| 久久久久久一区| 日韩有码欧美| 97人人模人人爽人人喊中文字| 国产乱码在线| 97视频在线观看视频免费视频| 久久青草伊人| 国产99久久精品一区二区 夜夜躁日日躁 | 一区二区精品免费视频| 中文字幕区一区二区三| http;//www.99re视频| 成人午夜三级| 美国av一区二区三区| 精品国产一区二区三区四区| 不卡视频一区二区三区| 国产福利资源一区| 久久久99爱| 欧美丝袜一区| 国产麻豆电影在线观看| 好看不卡的中文字幕| 女人和拘做爰正片视频| 日韩高清不卡一区二区三区| 欧美成人精品免费| 亚洲综合激情| 蜜臀av免费观看| 国产精品中文字幕日韩精品 | 精品国产免费一区二区三区香蕉| 少妇一级淫片免费看| 欧美精品在线观看播放| 国产v片在线观看| 日韩成人中文字幕| 在线视频1区2区| 欧美激情一级欧美精品| 欧美激情喷水| 亚洲自拍偷拍视频| 亚洲一区二区av| 国产精品免费一区二区三区在线观看| 91麻豆精品| 国产在线精品一区二区三区| 日韩最新av| 免费久久久一本精品久久区| 亚洲国产精品久久久天堂| 亚洲精品第一区二区三区| 欧美女王vk| 天堂av免费看| 免费一区视频| 成人免费黄色av| 久久国产麻豆精品| 国产一二三四在线视频| 日韩精品视频网| 性生交大片免费看l| 久久精品日产第一区二区三区高清版| 内射一区二区三区| 色婷婷精品大在线视频| 免费观看成人毛片| 91精品国产高清一区二区三区蜜臀 | 人妻换人妻a片爽麻豆| 国产精品另类一区| 超碰超碰超碰超碰| 日韩欧美成人精品| 亚洲成人av综合| 日韩在线观看免费网站 | 超碰caoprom| 国产精品久久久久久久久图文区| 久久国产黄色片| 精品少妇一区二区三区在线播放 | 日本黄色一区| 国产精品久久久久久久久免费| 国产成人高清精品免费5388| 在线观看免费黄色片| 女同性一区二区三区人了人一 | 奇米777日韩| 狠狠色噜噜狠狠色综合久| 欧美激情精品久久久六区热门| 天天干天天爽天天射| 久久久久久麻豆| 日本三级小视频| 亚洲成人教育av| 色呦呦视频在线观看| 亚洲va电影大全| 欧美a级片视频| 国产免费又粗又猛又爽| 国产日产亚洲精品系列| 免费看污视频的网站| 欧美日韩精品一区二区三区四区 | 日本一区二区免费高清| 精品久久久久久无码国产| 美日韩一区二区三区| 欧美多人猛交狂配| 色婷婷精品久久二区二区蜜臂av| 视频一区二区三区在线看免费看| 精品丝袜一区二区三区| 蜜桃av.网站在线观看| 好吊色欧美一区二区三区四区| 亚洲毛片网站| 黄色小视频免费网站| 国产精品午夜久久| 亚洲手机在线观看| 中文字幕亚洲欧美日韩2019| 在线一区视频观看| 亚洲欧美日本国产有色 | 美女网站视频在线观看| 夜夜夜精品看看| 欧美在线 | 亚洲| 欧美一级免费看| 欧美精品久久久久久| 三上悠亚av一区二区三区| 成人欧美一区二区三区视频网页| 国产精品一区二区免费视频| 欧美大片va欧美在线播放| 国产精品乱战久久久| av天堂永久资源网| 国产日韩欧美精品一区| 91精品国产色综合久久不8| 日韩av在线精品| 欧美性xxx| 国产精品无码乱伦| www.激情成人| 成人观看免费视频| 精品视频色一区| 国产三级在线播放| 精品国产乱码久久久久久郑州公司| 西西裸体人体做爰大胆久久久| xxxxx99| 色视频一区二区| 蜜桃久久一区二区三区| 欧亚精品中文字幕| 婷婷亚洲最大| 黄色手机在线视频| 亚洲欧美日韩人成在线播放| 免费国产精品视频| 国产精品九九九| 色婷婷狠狠五月综合天色拍| 日本美女高潮视频| 一区二区三区日本| 国产中文在线| 欧美一区二区色| 9999国产精品| 欧美精品欧美极品欧美激情| 欧美性xxxxxxxx| 成人爽a毛片免费啪啪动漫| 日韩一区二区电影在线观看| 国产凹凸在线观看一区二区| 国产情侣小视频| 久久久久久18| 日韩一区三区| 国产男女猛烈无遮挡a片漫画 | 视频一区二区在线播放| 成人午夜在线观看|