如何在文本框中仅接受数字和单个句点

时间:2012-08-31 04:05:22

标签: c# .net wpf string textbox

我有一个数据绑定的WPF文本框。我需要限制文本框上的用户输入,以便它只接受数字和一个句点(用于显示小数)。

我知道我可以用“Winforms”方式处理这个并验证KeyPress事件上的每个输入,但我想知道是否有一个更清晰,甚至可能正确的方法在WPF中执行此操作(特别是因为我正在数据绑定文本框)

3 个答案:

答案 0 :(得分:4)

使用WPF提供的ValidationRules。

xaml将是:

<TextBox>
    <TextBox.Text>
        <Binding Path="Name">
            <Binding.ValidationRules>
                <ExceptionValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

textbox属性的代码将是(使用正则表达式进行验证):

public string Name
{
    get { return _name; }
    set
    {
        _name = value;
        if (!Regex.IsMatch(value, @"^((?:[1-9]\d*)|(?:(?=[\d.]+)(?:[1-9]\d*|0)\.\d+))$"))
        {
            throw new ApplicationException("Please enter only numbers/decimals.");
        }
    }
}

来源:Validation in WPF


上面给出的正则表达式:^((?:[1-9]\d*)|(?:(?=[\d.]+)(?:[1-9]\d*|0)\.\d+))$可以在此Rubular link

进行测试

正则表达式会匹配这些:

1.2
22522
0.33
3.90000

但不是这些:(你可以调整正则表达式以允许其中一些)

.999
23.35.1343
03423.23423

答案 1 :(得分:2)

数据绑定将影响传入/传出您要数据绑定的对象的值。要阻止用户按键,您需要使用蒙版文本框(在winforms中,不确定WPF),或者您需要在文本框中处理KeyPressedEvent并停止不希望按下的键。

我使用下面的代码只允许数字和一位小数

private void textBoxPrice_KeyPress( object sender, KeyPressEventArgs e )
        {
            if( !char.IsControl( e.KeyChar )
                && !char.IsDigit( e.KeyChar )
                && e.KeyChar != '.' )
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if( e.KeyChar == '.'
                && ( sender as TextBox ).Text.IndexOf( '.' ) > -1 )
            {
                e.Handled = true;
            }
        }

答案 2 :(得分:0)

只需使用按键事件, 并使用ascii字符验证按键事件。

e.KeyCode&gt; 47&amp;&amp; e.KeyCode&lt; 58将限制用户不要按数字之外的任何字母。

如果您需要精确的代码示例,请等待一段时间:)