创建一个只接受数字的WPFTextBox我想创建一个只接受一定范围内的值的TextBox。实现此类TextBox的最佳方式是什么?我想到派生TextBox并覆盖TextProperty的验证和强制转换。但是,我不知道该怎么做,而且我知道通常不推荐导出WPF控件。编辑:我需要的是一个非常基本的文本框,可以过滤掉所有不是数字的击键。实现它的最简单方法是处理TextBox.PreviewTextInput事件:privatevoidtextBox_PreviewTextInput(objectsender,TextCompositionEventArgse){intresult;如果(!validateStringAsNumber(e.Text,outresult,false)){e.Handled=true;(validateStringAsNumber是我最常使用的函数Int.TryParse)一些建议的解决方案可能更好,但对于我需要的简单功能,这个解决方案是最简单和最快的,同时满足我的需求。到目前为止,我见过的大多数实现都使用PreviewTextInput事件来实现正确的屏蔽行为。这继承自TextBox,这一个使用附加属性。两者都使用.Net的MaskedTextProvider来提供正确的屏蔽行为,但如果您只想要一个简单的“仅限数字”文本框,则不需要此类。privatevoidtxt_TextChanged(objectsender,TextChangedEventArgse){TextBoxtextBox=senderasTextBox;intiValue=-1;如果(Int32.TryParse(textBox.Text,outiValue)==false){TextChangetextChange=e.Changes.ElementAt(0);intiAddedLength=textChange.AddedLength;intiOffset=textChange.Offset;textBox.Text=textBox.Text.Remove(iOffset,iAddedLength);在我看来,满足这个要求的最好方法是只使用OnTextChanged事件,因为它处理按下的键数,还处理从剪贴板复制+粘贴。我希望下面显示的VB代码能对此有所启发。PrivateSubNumericBox_TextChanged(senderAsObject,eAsTextChangedEventArgs)HandlesMe.TextChangedDimBufferAsNewStringBuilderDimIndexAsInteger=Me.SelectionStart对于Me.Text中的每个CIfChar.IsDigit(C)ThenBuffer.Append(C)ElseIfMe.SelectionStart>Buffer.LengthThenIndex-=1EndIfNextMe.Text=Buffer.ToStringMe.SelectionStart=IndexEndSub总体而言,最好的理由是对文本框使用覆盖方法OnKeyPressed。下面是使用静态Char方法IsDigit的覆盖代码。如果(!Char.IsDigit(e.KeyChar)&&!Char.IsControl(e.KeyChar))e.Handled=true;这就是您真正需要做的。这将是我的首选方法:以上是C#学习教程:创建一个只接受数字的WPFTextBox。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—.D1:caseKey.D2:caseKey.D3:caseKey.D4:caseKey.D5:caseKey.D6:caseKey.D7:caseKey.D8:caseKey.D9:caseKey.NumLock:caseKey.NumPad0:caseKey.NumPad1:caseKey.NumPad2:caseKey.NumPad3:caseKey.NumPad4:caseKey.NumPad5:caseKey.NumPad6:caseKey.NumPad7:caseKey.NumPad8:caseKey.NumPad9:caseKey.背:断;默认值:e.Handled=true;休息;}}本文收集自网络,不代表立场。侵权请点击右侧联系管理员删除。如需转载请注明出处:
