当前位置: 首页 > 编程语言 > C#

数字文本框分享

时间:2023-04-10 19:54:47 C#

数字文本框刚接触编程,不太了解,但是我在做计算器,想用一个只有数字和小数的文本框当用户从剪贴板粘贴文本时,文本框会删除任何文字字符,如MS所计算的那样。请花时间解释每个部分,以便我可以学习或编写它并告诉我要搜索的内容。谢谢编辑:我会更具体:HowdoIcreateanumbertextboxinC#?我使用了一个蒙面文本框,但它不带小数。我已经阅读了有关重载OnKeyPress方法的内容,以便它可以更正任何错误的字符,但我不知道该怎么做。最简单的方法:)文本框上的按键事件if((e.KeyChar=48)||e.KeyChar==13||e.KeyChar==8){}else{e.Handled=true;}为只需要数字的文本框添加事件处理程序,并添加以下代码:privatevoidtextBoxNumbersOnly_KeyPress(objectsender,KeyPressEventArgse){if(Char.IsDigit(e.KeyChar)||e.KeyChar=='b'){e.Handled=false;}else{e.Handled=true;这允许数字0到9,以及退格键(有用的恕我直言)。允许通过'。’字符,如果你想支持小数如果你仔细观察,在Windows计算器中,数字显示在标签中而不是文本框中(它没有获得焦点)。窗口接收键盘事件。所以查看窗体上的KeyPressed和KeyDown事件。框架中有一个专门用于数字输入的控件:NumericUpDown控件。它还管理十进制值。如果("1234567890".IndexOf(e.KeyChar.ToString())>0){e.Handled=false;}else{e.Handled=true;}研究MaskedTextBox。这个问题有点宽泛,可以解释一切。如果您想要具体细节,请尝试关注问题,因为您要求很多社区“解释每个部分”。如果您提出一些具体问题(并排除“请及时解释......”),您会得到更好的答复。据我所知,.NET框架中没有任何本机(至少2.0)可以执行此操作。您的选择是:创建一个自定义控件,它继承自文本框控件并且只允许数字输入。这样做的好处是可以重复使用控件。处理KeyPress事件并检查charCode以仅允许数字击键。这更容易,但可重用性较差。我可能会使用正则表达式来过滤非数字。伪代码:for(输入字符串中的每个项目){if(!match(someregularexpression,item)){tossitout}else{additemtotextboxorwhateveryougoingtodowithit}}HerehowDo这在vb.netPrivateSubTextBox1_TextChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTextBox1.TextChangedDimregAsNewSystem.Text.RegularExpressions.Regex("[^0-9_]")TextBox1。Text=reg.Replace(TextBox1.Text,"")EndSub根据您的具体需要修改正则表达式您可以使用纯文本框或标签作为计算器显示,只需确保值(字符串?)始终为数字。例如,你可以保留一个double,当你想显示它的时候把它转换成一个字符串。适用于十进制数字输入,但如果(右键单击并粘贴)其他文本则有一些错误。:dprivatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse){stringoriginal=(senderasTextBox).Text;如果(!char.IsDigit(e.KeyChar)){e.Handled=true;}if(e.KeyChar=='.'){if(original.Contains('.'))e.Handled=true;elseif(!(original.Contains('.')))e.Handled=false;}elseif(char.IsDigit(e.KeyChar)||e.KeyChar=='b'){e.Handled=false;这是我根据Mahasen的回答制作的自定义控件。把它放在它自己的类文件中,并将命名空间固定为任何你想要的。重建解决方案后,它应该作为可以拖放到窗体上的新控件出现在工具箱菜单选项卡中。使用系统;使用System.Linq;使用System.Windows.Forms;namespaceMyApp.GUI{publicclassFilteredTextBox:TextBox{//字段privatechar[]m_validCharacters;私有字符串m_filter;私有事件EventHandlerm_maxLength;//属性publicstringFilter{get{returnm_filter;}设置{m_filter=值;m_validCharacters=value.ToCharArray();}}//构造函数publicFilteredTextBox(){m_filter="";this.KeyPress+=Validate_Char_OnKeyPress;this.TextChanged+=Check_Text_Length_OnTextChanged;}//事件挂钩publiceventEventHandlerTextBoxFull{add{m_maxLength+=value;}移除{m_maxLength-=值;}}//方法voidValidate_Char_OnKeyPress(objectsender,KeyPressEventArgse){if(m_validCharacters.Contains(e.KeyChar)||e.KeyChar=='b')e.Handled=false;elsee.Handled=true;}voidCheck_Text_Length_OnTextChanged(objectsender,EventArgse){if(this.TextLength==this.MaxLength){varHandle=m_maxLength;如果(句柄!=null)句柄(这个,EventArgs.Empty);在我输入3个字符后,我希望它自动标记到另一个框,所以我将框的最大长度设置为3,在表单代码中我挂接了TextBoxFull事件并关注下一个框对它这是将4个过滤框连接在一起以输入IP地址。前两个框的表单代码如下...privateboolValidateAddressChunk(stringp_text){byteAddressChunk=newbyte();返回byte.TryParse(p_text,outAddressChunk);}privatevoidfilteredTextBox1_TextBoxFull(objectsender,EventArgse){varFiltered_Text_Box=(FilteredTextBox)sender;如果(!ValidateAddressChunk(Filtered_Text_Box.Text))filteredTextBox1.Text="255";elsefilteredTextBox2.Focus();}privatevoidfilteredTextBox2_TextBoxFull(objectsender,EventArgse){varFiltered_Text_Box=sender;如果(!ValidateAddressChunk(Filtered_Text_Box.Text))filteredTextBox2.Text="255";//等等}作为一个新手,你最好投资一个好的第3方工具包。例如,Telerik的Radcontrols有一个数字文本框,可以满足您的需求。以上就是C#学习教程:数字文本框分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: