XAML 无法通过键入下一个数字来替换选定的正则表达式数字[已关闭]

gopyfrb3  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(97)

已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。

4天前关闭。
这篇文章是4天前编辑并提交审查的。
Improve this question
我使用xaml <TextBox/>,其背后的代码包含名为 NumberValidationTextBox 的事件PreviewTextchanged和名为 OnTextChanged 的事件TextChanged

public void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
        var futureText = $"{(sender as TextBox).Text}{e.Text}";
        e.Handled = !regex.IsMatch(futureText);

    }
    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        var myInput = sender as TextBox;
        myInput.Text = myInput.Text.Replace(",", ".").Trim();
        myInput.CaretIndex = myInput.Text.Length;
    }

问题是当键入的数字是例如:123.23,我通过单击和鼠标拖动选择数字,并尝试通过键入下一个数字来替换它-它不会改变,因为regex阻止了它。在这种情况下,只有Backspace是解决方案。所以我想改变TextBox填充时选择的testx。
以上所有细节和这里与ss链接:https://i.ibb.co/z7rPfpj/123.png
怎么修?谢谢。

jjhzyzn0

jjhzyzn01#

将您的方法NumberValidationTextBox替换为:

public void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
        var tb = sender as TextBox;
        var futureText = "";
        if (tb.SelectedText != "")
        {
            futureText = tb.Text.Replace(tb.SelectedText, e.Text);
            e.Handled = !regex.IsMatch(futureText);
            return;
        }

        futureText = tb.Text + e.Text;
        e.Handled = !regex.IsMatch(futureText);
    }

测试SelectedText以检查是否选择了某些字符

相关问题