您好,登錄后才能下訂單哦!
本篇文章為大家展示了.nec# 中怎么利用textbox輸入數字,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
當界面上要用戶輸入只有數字的字符時,默認的c# textbox數字是不能勝任的,網上有很多網友們提供了很多的做法,我總結了一下寫了一個在C#下的實現,做到了如下的幾點:
1:只能輸入類似這樣的字符:-123456.789;1234.789;
2:在輸入的字符串中不能存在兩個點符:12456.78//正確;12.456.78//不正確;
3:如果表示負數可以在字符串的最前面加一個減號“-”,也只能加到弟一個字符的位置;
4:可以用復制粘帖功能和菜單功能,但是只對能正確格式的字符串有效,比如:12.34可以,Abc不可以;
5:只是得到一個字符串,還可以在這個基礎上再改進自己所需的,經如添加對十六進制的支持等。
代碼如下在.NET下用C#寫的:
using System; using System.Windows.Forms; namespace NumTextBox { /// /// NumTextBox 的摘要說明。 /// public class TextBoxNumEx:System.Windows.Forms.TextBox { public const int WM_CONTEXTMENU = 0x007b;//右鍵菜單消息 public const int WM_CHAR = 0x0102; //輸入字符消息(鍵盤輸入的,輸入法輸入的好像不是這個消息) public const int WM_CUT = 0x0300; //程序發送此消息給一個編輯框或combobox來刪除當前選擇的文本 public const int WM_COPY = 0x0301; //程序發送此消息給一個編輯框或combobox來復制當前選擇的文本到剪貼板 public const int WM_PASTE = 0x0302; //程序發送此消息給editcontrol或combobox從剪貼板中得到數據 public const int WM_CLEAR = 0x0303; //程序發送此消息給editcontrol或combobox清除當前選擇的內容; public const int WM_UNDO = 0x0304; //程序發送此消息給editcontrol或combobox撤消***一次操作 public TextBoxNumEx() { // // TODO: 在此處添加構造函數邏輯 // } protected override void WndProc(ref Message m) { switch(m.Msg) { case WM_CHAR: System.Console.WriteLine(m.WParam); bool isSign = ((int)m.WParam == 45); bool isNum = ((int)m.WParam >= 48) && ((int)m.WParam <= 57); bool isBack = (int)m.WParam == (int)Keys.Back; bool isDelete = (int)m.WParam == (int)Keys.Delete;//實際上這是一個"."鍵 bool isCtr = ((int)m.WParam == 24) || ((int)m.WParam == 22) || ((int)m.WParam == 26) ||((int)m.WParam == 3); if( isNum || isBack || isCtr) { base.WndProc (ref m); } if (isSign) { if (this.SelectionStart!=0) { break; } base.WndProc (ref m); break; } if (isDelete) { if (this.Text.IndexOf(".")<0) { base.WndProc (ref m); } } if ((int)m.WParam == 1) { this.SelectAll(); } break; case WM_PASTE: IDataObject iData = Clipboard.GetDataObject();//取剪貼板對象 if(iData.GetDataPresent(DataFormats.Text)) //判斷是否是Text { string str = (string)iData.GetData(DataFormats.Text);//取數據 if (MatchNumber(str)) { base.WndProc (ref m); break; } } m.Result = (IntPtr)0;//不可以粘貼 break; default: base.WndProc (ref m); break; } } private bool MatchNumber(string ClipboardText) { int index=0; string strNum = "-0.123456789"; index = ClipboardText.IndexOf(strNum[0]); if (index>=0) { if (index>0) { return false; } index = this.SelectionStart; if (index>0) { return false; } } index = ClipboardText.IndexOf(strNum[2]); if (index!=-1) { index = this.Text.IndexOf(strNum[2]); if (index!=-1) { return false; } } for(int i=0; i<ClipboardText.Length; i++) { index = strNum.IndexOf(ClipboardText[i]); if (index <0) { return false; } } return true; } } }
上述內容就是.nec# 中怎么利用textbox輸入數字,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。