文本框只允许数字和句号

本文关键字:数字 许数字 文本 | 更新日期: 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");
    }
}