【问题标题】:Event to take control's text via event args通过事件参数获取控制文本的事件
【发布时间】:2013-05-29 15:24:05
【问题描述】:

为了在事件 args 中获得 TextBoxText,我应该订阅什么事件?

我试过PreviewTextInput,但如果输入字符串是,例如,“122”。框的(见代码)文本没有点,但 eventArgs.Text 是“。”输入字符串验证成功,TextBox.Text 为“122..”。我想要做的是通过调用decimal.TryParse 来验证输入字符串是否为十进制。

private void OnPreviewTextInput(object sender, TextCompositionEventArgs eventArgs)
{
    var box = sender as TextBox;
    if (box == null) return;

    eventArgs.Handled = !ValidationUtils.IsValid(box.Text + eventArgs.Text);
}

【问题讨论】:

    标签: c# wpf validation textbox decimal


    【解决方案1】:

    你可以试试这样的:

    private void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        var textBox = (TextBox)sender;
        var text = textBox.Text.Insert(textBox.CaretIndex, e.Text);
        decimal number;
        if (!decimal.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out number))
        {
            e.Handled = true;
        }
    }
    

    【讨论】:

    • 只需要确保禁用复制粘贴或明确处理,因为粘贴事件将绕过此验证
    • 你试过这个代码吗?我在这一行收到 ArgumentOutOfRangeException var text = textBox.Text.Insert(textBox.CaretIndex, e.Text);
    • @sega 当然。这对我来说可以。当然,处理程序附加到PreviewTextInput 事件。
    • @Clemens,一点补充......绑定到文本框文本属性的值是十进制类型?,不是十进制。会不会有什么问题?
    • "是十进制类型?,不是十进制"这是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2013-08-10
    • 2010-10-13
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多