C#学习教程:在C#中限制文本框十进制输入的最佳方法最快的方式。小数分隔符还必须是特定于区域性的:Application.CurrentCulture.NumberFormat.NumberDecimalSeparator这是一个相当简单的操作。您需要过滤掉不需要的密钥,然后执行一些额外的检查。将以下代码添加到文档的KeyDown事件:privatevoidTextBox1_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse){switch(e.KeyCode){caseKeys.D0:caseKeys.D1:caseKeys.D2:案例Keys.D3:案例Keys.D4:案例Keys.D5:案例Keys.D6:案例Keys.D7:案例Keys.D8:案例Keys.D9:案例Keys.NumPad0:案例Keys.NumPad1:案例Keys.NumPad2:caseKeys.NumPad3:caseKeys.NumPad4:caseKeys.NumPad5:caseKeys.NumPad6:caseKeys.NumPad7:caseKeys.NumPad8:caseKeys.NumPad9://仅当没有修饰符处于活动状态时才允许数字if(e.Control||e.Alt||e.Shift){//用修饰符抑制数字e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}休息;case(Keys)110:caseKeys.OemPeriod:if(!((TextBox)sender).Text.Contains(".")){//如果没有'.',则允许句点键//在文本中,没有修饰符处于活动状态if(e.Control||e.Alt||e.Shift){//使用修饰符抑制数字e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}}埃尔se{e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}休息;caseKeys.Subtract:caseKeys.OemMinus:if(((TextBox)sender).SelectionStart==0&&!((TextBox)sender).Text.Contains("-")){//仅当光标//位于文本框的开头//并且文本框中没有减号//并且没有修饰符处于活动状态if(e.Control||e.Alt||e.Shift){//抑制数字修饰符e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}}else{e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}休息;caseKeys.C:caseKeys.X:caseKeys.V:caseKeys.Z://通过检查//CTRL状态允许复制、剪切、粘贴和撤销。如果(e.Control==false){e.SuppressKeyPress=true;e.Handled=true;交互.Beep();}休息;caseKeys.Control:caseKeys.ControlKey:caseKeys.Alt:caseKeys.Shift:caseKeys.ShiftKey://allowcontrol,alt&shiftbreak;案例Keys.Left:案例Keys.Right:caseKeys.Up:caseKeys.Down:caseKeys.PageUp:caseKeys.PageDown:caseKeys.Home:caseKeys.End://允许导航键中断;caseKeys.Back:caseKeys.Delete://允许退格和删除break;默认值://抑制任何其他键e.SuppressKeyPress=true;e.Handled=true;交互.Beep();休息;然后,由于用户可以将值粘贴到文本框中,因此将以下内容添加到TextBox的Validate事件中//我们需要验证值if(!Information.IsNumeric(((TextBox)sender).Text)){e.Cancel=true;我写了一个类来处理各种过滤器[显然包括文化特定的小数符号]使用Microsoft.VisualBasic将这种添加到项目中;使用系统;使用系统集合;使用System.Collections.Generic;使用系统数据;使用系统诊断;publicclassTextBoxFilter{[Flags()]publicenumFilters{None=0,Text=1,Numbers=2,AlphaNumeric=Filters.Text|Filters.Numbers,货币=4,全部=Filters.Text|过滤器。数字|Filters.Currency}字典_keyFilter;字典_allowedKeys;字典_invalidKeys;字典键事件参数;私有静态字符串DecimalMark=Application.CurrentCulture.NumberFormat.NumberDecimalSeparator;私有静态字符串NegativeMark=Application.CurrentCulture.NumberFormat.NegativeSign;私有静态字符串CurrencySymb=Application.CurrentCulture.NumberFormat.CurrencySymbol;私有静态字符串CurrencyDecimal=Application.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;publicTextBoxFilter(){_keyFilter=newDictionary();_allowedKeys=newDictionary();_无效Keys=新字典();keyEventArgs=newDictionary();}//设置和移除过滤器publicvoidSetTextBoxFilter(TextBoxtextBox,Filtersfilter){}publicvoidSetTextBoxFilter(TextBoxtextBox,stringallowedKeys){SetTextBoxFilter(textBox,Strings.Filter(textBox),allowedKeys,InvalidKeys(textBox));}publicvoidSetTextBoxFilter(TextBoxtextBox,stringallowedKeys,stringinvalidKeys){SetTextBoxFilter(textBox,Strings.Filter(textBox),allowedKeys,invalidKeys);}publicvoidSetTextBoxFilter(TextBoxtextBox,Filtersfilter,stringallowedKeys,stringinvalidKeys){if(!_keyFilter.ContainsKey(textBox)){//如果文本框及其过滤器不存在于//已注册文本框的集合中,则添加它_keyFilter.Add(文本框,过滤器);_allowedKeys.Add(textBox,allowedKeys);_invalidKeys.Add(textBox,invalidKeys);keyEventArgs.Add(文本框,新的System.Windows.Forms.KeyEventArgs(Keys.None));//添加事件处理程序textBox.KeyDown+=KeyDownUp;textBox.KeyUp+=KeyDownUp;textBox.KeyPress+=按键;textBox.Validating+=验证;textBox.Disposed+=已处理;}else{//更改文本框的过滤器,如果它存在于//已注册文本框的集合中_keyFilter(textBox)=filter;_allowedKeys(文本框)=allowedKeys;_invalidKeys(textBox)=invalidKeys;}}publicvoidRemoveTextBoxFilter(TextBoxtextBox){if(_keyFilter.ContainsKey(textBox)){_keyFilter.Remove(textBox);_allowedKeys.Remove(文本框);_invalidKeys.Remove(textBox);keyEventArgs.Remove(textBox);textBox.KeyDown-=KeyDownUp;textBox.KeyUp-=KeyDownUp;textBox.KeyPress-=KeyPress;textBox.Validating-=正在验证;textBox.Disposed-=Disposed;}}publicboolContainsTextBox(TextBoxtextBox){return_keyFilter.ContainsKey(textBox);}//propertiespublicFiltersFilter{get{if(ContainsTextBox(textBox)){return_keyFilter.项目[文本框];}else{returnFilters.None;}}set{SetTextBoxFilter(textBox,value);}}publicstringAllowedKeys{get{if(ContainsTextBox(textBox)){return_allowedKeys(textBox);}else{返回“”;}}set{SetTextBoxFilter(textBox,this.Filter(textBox),value,this.InvalidKeys(textBox));}}publicstringInvalidKeys{get{if(ContainsTextBox(textBox)){return_invalidKeys(textBox);}else{返回“”;}}set{SetTextBoxFilter(textBox,this.Filter(textBox),this.AllowedKeys(textBox),value);}}//事件处理程序privatevoidDisposed(objectsender,System.EventArgse){RemoveTextBoxFilter((TextBox)sender);}privatevoidKeyDownUp(objectsender,System.Windows.Forms.KeyEventArgse){//分配修饰符keyEventArgs((TextBox)sender)=e;}privatevoidKeyPress(objectsender,System.Windows.Forms.KeyPressEventArgse){//确保按下的键在允许的键对象中txt=(TextBox)sender;对象c=e.KeyChar;布尔允许Key=IsValidChar(txt,c,txt.SelectionStart);//如果allowKey仍然为false,则检查退格键和Ctrl组合if(allowKey==false){if(keyEventArgs(txt).Control){//controlmodifiergoeswithA,X,C,VandZfor//分别选择全部、剪切、复制、粘贴和撤消objectkey=keyEventArgs(txt).KeyCode;allowKey=(key==Keys.A||key==Keys.X||key==Keys.C||key==Keys.V||key==Keys.Z);}elseif(keyEventArgs(txt).KeyCode==Keys.Back){//允许退格键allowKey=true;}}//如果密钥无效则禁用该密钥if(!allowKey){e.Handled=true;交互.Beep();}}privatevoidValidating(objectsender,System.ComponentModel.CancelEventArgse){objectbox=(TextBox)sender;对象boxFlags=_keyFilter(box);//如果文本框允许所有条目或没有文本,则跳过验证if(boxFlags==Filters.All|string.IsNullOrEmpty(box.Text))return;//否则检查输入的字符对象txtChars=box.Text.ToCharArray;boolisValidEntry=false;//检查每个字符是否存在无效条目(i=0;然后我在如下形式中使用它publicclassForm1{TextBoxFilterfilter=newTextBoxFilter();privatevoidForm1_Load(objectsender,System.EventArgse){filter.SetTextBoxFilter(TextBox1,TextBoxFilter.Filters.Numbers);}publicForm1(){Load+=Form1_Load;}}验证事件是这样做的事件还允许您以有意义的方式格式化文本框文本。像这样:privatevoidtextBox1_Validating(objectsender,CancelEventArgse){//空字符串好吗?由你决定。if(textBox1.Text.Length>0){decimalvalue;if(decimal.TryParse(textBox1.Text,outvalue)){textBox1.Text=value.ToString("N2");errorProvider1.SetError(textBox1,"");}else{e.Cancel=true;textBox1.SelectAll();errorProvider1.SetError(textBox1,"Pleaseenteranumber");}}}尝试使用MaskedTextBox控件。privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse){if(!Char.IsNumber(e.KeyChar)){e.Handled=!(((TextBox)sender).SelectionStart!=0&&(e.KeyChar.ToString()==Application.CurrentCulture.NumberFormat.NumberDecimalSeparator&&((TextBox)sender).Text.IndexOf(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator)==-1));}}你应该检查leaveforLength==0我觉得......以上就是C#学习教程的全部内容:c#限制文本框小数点输入的最佳方法。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文来自网络收藏,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处:
