本篇文章为大家展示了.neC# 中怎么利用textbox输入数字,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。当界面上要用户输入只有数字的字符时,默认的c# textbox数字是不能胜任的,网上有很
本篇文章为大家展示了.neC# 中怎么利用textbox输入数字,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
当界面上要用户输入只有数字的字符时,默认的c# textbox数字是不能胜任的,网上有很多网友们提供了很多的做法,我总结了一下写了一个在C#下的实现,做到了如下的几点:
只能输入类似这样的字符:-123456.789;1234.789;
在输入的字符串中不能存在两个点符:12456.78//正确;12.456.78//不正确;
如果表示负数可以在字符串的最前面加一个减号“-”,也只能加到弟一个字符的位置;
可以用复制粘帖功能和菜单功能,但是只对能正确格式的字符串有效,比如:12.34可以,Abc不可以;
只是得到一个字符串,还可以在这个基础上再改进自己所需的,经如添加对十六进制的支持等。
代码如下在.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输入数字,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。
--结束END--
本文标题: .nec# 中怎么利用textbox输入数字
本文链接: https://lsjlt.com/news/293748.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0