TextBox仅允许数字和句点

时间:2013-03-04 23:12:37

标签: c# .net wpf regex visual-studio-2012

我对C#和WPF相当新,但我正在尝试创建一个只允许14个数字和3个句点的文本框,以及另一个只允许5个数字的文本框。我怎样才能做到这一点?由于某种原因,我研究了stackoverflow没有运气。我尝试了许多“解决方案”,但那些从未为我工作过。

2 个答案:

答案 0 :(得分:2)

我正在看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;
}

答案 1 :(得分:0)

如果您愿意,可以像这样设置绑定:

<TextBox Text="{Binding Field, UpdateSourceTrigger=PropertyChanged}" />

然后在Field属性的setter中强制执行您的要求:

public string Field
{
    get { return _field; }
    set
    {
        var val = MakeNumeric(value)
        _field = value;
        OnPropertyChanged("Field");
    }
}