在我的程序中,我有一个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();
}
}
请注意,这个问题是我former question的再次访问。我知道它可能会不满意#34;把这种方法用于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;
}
}
表示integer
中文字的textBox
现在已在textChanged
事件中处理。 LostFocus
事件处理警告并重新选择不正确的文本值。但是,突出显示文本方法在textChanged
事件中有效,但在其当前位置时无效。为什么会这样,我该如何解决?
答案 0 :(得分:1)
您可以使用文本框的PreviewTextInput处理程序阻止用户输入文本或超出范围,请像这样调用它。
private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
if (!char.IsDigit(e.Text, e.Text.Length - 1))
{
e.Handled = true;
}
}
上面的代码仅用于输入数字,您可以根据自己的要求进行更改,希望有所帮助:)
答案 1 :(得分:1)
如果您只想停止关注TextBox
,您只需将Handled
对象的KeyboardFocusChangedEventArgs
属性设置为true
即可当您的无效条件为真时,PreviewLostKeyboardFocus
处理程序:
private void PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
e.Handled = IsInvalidValue;
}
这当然假设您输入的数据无效时设置为IsInvalidValue
的{{1}}属性,否则设置为true
。
答案 2 :(得分:0)
您好我想您正在使用C#,在这里您可以找到相关的帖子:C# auto highlight text in a textbox control
正如他们所说,以下代码应该选择texbox中的文本
在Windows窗体和WPF中:
maxRevSpeed_textBox.SelectionStart = 0; maxRevSpeed_textBox.SelectionLength = textbox.Text.Length;