如果输入的值不正确,如何限制用户使用文本框

本文关键字:用户 文本 何限制 输入 不正确 如果 | 更新日期: 2023-09-27 18:04:34

在我的程序中,我有一个TextBox,其值必须设置在特定的整数范围内。如果不在这个范围内,它应该警告用户,然后突出显示TextBox中不正确的文本以便重新编辑(这意味着用户必须输入一个在正确范围内的值才能允许他们离开TextBox)。我如何改变我的代码,使它执行这些操作?

这是我目前所知道的。我使用的是TextChanged事件。这段代码警告用户违反限制并重新聚焦(我想突出显示值)在TextBox上,但不阻止用户随后单击它:

int maxRevSpeed;
//Max Rev Speed -- Text Changed
private void maxRevSpeed_textChanged(object sender, RoutedEventArgs e)
{
    if (maxRevSpeed_textBox.Text == "" || maxRevSpeed_textBox.Text == " ")
        maxRevSpeed = 0;
    else
    {
        maxRevSpeed = Convert.ToInt32(maxRevSpeed_textBox.Text);
        if (maxRevSpeed <= 0 || maxRevSpeed > 45)
        {
            MessageBox.Show("Reverse Sensor speed must be between 0 and 45 FPM", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
        }
        maxRevSpeed_textBox.Focus();
    }
}

请注意,这个问题是对我以前的一个问题的重提。我知道这可能是"皱眉"采取这种方法的TextBox,但无论如何,我仍然想弄清楚如何实现这样的事情。谢谢你。

更新1:

看了大家的建议后,我更新了我的代码:

//Max Rev Speed -- Text Changed
private void maxRevSpeed_textChanged(object sender, RoutedEventArgs e)
{
    if (maxRevSpeed_textBox.Text == "" || maxRevSpeed_textBox.Text == " ") //Is Empty or contains spaces
        maxRevSpeed = 0;
    else if (!Regex.IsMatch(maxRevSpeed_textBox.Text, @"^['p{N}]+$")) //Contains characters
        maxRevSpeed = 0;
    else
        maxRevSpeed = Convert.ToInt32(maxRevSpeed_textBox.Text);
}
//Max Rev Speed -- Lost Focus
private void maxRevSpeed_LostFocus(object sender, RoutedEventArgs e)
{
    if (maxRevSpeed <= 0 || maxRevSpeed > 45)
    {
        MessageBox.Show("Reverse Sensor speed must be between 0 and 45 FPM", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
        //Supposed to highlight incorrect text -- DOES NOT WORK
        maxRevSpeed_textBox.SelectionStart = 0;
        maxRevSpeed_textBox.SelectionLength = maxRevSpeed_textBox.Text.Length;
    }
}

表示textBox中的文本的integer现在在textChanged事件中处理。LostFocus事件处理警告和重新选择不正确的文本值。然而,高亮文本方法在textChanged事件中工作,而不是在它的当前位置。为什么会这样,我该如何解决?

如果输入的值不正确,如何限制用户使用文本框

如果您只是想阻止焦点离开TextBox,那么当您的无效条件为真时,您需要做的就是在PreviewLostKeyboardFocus处理程序中将KeyboardFocusChangedEventArgs对象的Handled属性设置为true:

private void PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    e.Handled = IsInvalidValue;
}

当然,这假设您有一个名为IsInvalidValue的属性,当输入的数据无效时,您将其设置为true,否则设置为false

你可以通过使用文本框的previewtexttinput处理程序来防止用户输入文本或超出范围,像这样调用它

private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!char.IsDigit(e.Text, e.Text.Length - 1))
            {
                e.Handled = true;
            }
        }

以上代码仅用于输入数字,您可以根据自己的需要进行修改,希望对您有所帮助:)

你好,我想你正在使用c#,在这里你可以找到一个相关的帖子:c#在文本框控件中自动高亮显示文本

下面的代码应该选择textbox 中的文本

在Windows窗体和WPF中:

maxRevSpeed_textBox。SelectionStart = 0;maxRevSpeed_textBox。