文本框只允许数字和句号
本文关键字:数字 许数字 文本 | 更新日期: 2023-09-27 18:02:16
我是c#和WPF的新手,但我正在尝试创建一个只允许最多14个数字和3个句号的文本框,以及另一个只允许5个数字的文本框。我该怎么做呢?我在stackoverflow上做过研究,但由于某种原因没有运气。我尝试过很多"解决方案",但都不适合我。
我正在看nakiya的解决方案,我可以看出你不明白该怎么做。我会举一个完整的例子,这样你们可以从中学到一些东西。看一下:
MainWindow.xaml
<TextBox TextChanged="TextBoxBase_OnTextChanged" />
MainWindow.cs
private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e) {
var textBox = sender as TextBox;
if (textBox != null) {
string newValue = textBox.Text;
int changed = ValidateText(ref newValue);
int selectionStart = textBox.SelectionStart;
textBox.Text = newValue;
textBox.SelectionStart = selectionStart - changed;
}
}
private int ValidateText(ref string input) {
// If no value, return empty string
if (input == null) return 0;
int changed = 0;
// Go through input string and create new string that only contains digits and period
StringBuilder builder = new StringBuilder();
for (int index = 0; index < input.Length; index++) {
if (Char.IsDigit(input[index]) || input[index] == '.')
builder.Append(input[index]);
else changed++;
}
input = builder.ToString();
return changed;
}
如果你愿意,你可以这样设置绑定:
<TextBox Text="{Binding Field, UpdateSourceTrigger=PropertyChanged}" />
然后在Field
属性的setter中执行您的要求:
public string Field
{
get { return _field; }
set
{
var val = MakeNumeric(value)
_field = value;
OnPropertyChanged("Field");
}
}