如果输入的值不正确,如何限制用户使用文本框
本文关键字:用户 文本 何限制 输入 不正确 如果 | 更新日期: 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
,但无论如何,我仍然想弄清楚如何实现这样的事情。谢谢你。
看了大家的建议后,我更新了我的代码:
//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。