我有一个WPF应用程序(MVVM)。我想限制用户在TextBox中输入超过特定值的值。 假设该值为“100”,则用户不应该输入101等。我尝试过以下代码。
XAML:
<TextBox Text="{Binding SearchText}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" Name="SearchTextBox" TextChanged="TextBox_TextChanged"/>
CODE:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null && !string.IsNullOrEmpty(textBox.Text))
{
int searchIndex = 0;
int count = 100;
int.TryParse(textBox.Text, out searchIndex);
if (textBox != null && !string.IsNullOrEmpty(textBox.Text))
{
if (searchIndex > Count)
{
textBox.Text = textBox.Text.Substring(0, textBox.Text.Length - 1);
}
}
}
}
使用此代码,我可以限制用户输入超过特定值。但问题是,当我设置TextBox的文本时,光标移动到第一个数字。对此有什么解决方案吗?
答案 0 :(得分:2)
您可以处理PreviewTextInput
事件,并在验证失败时将Handled
的{{1}}属性设置为TextCompositionEventArgs
:
true
感谢。你的回答解决了我的大部分问题。但是,如果我删除第一个数字并输入另一个数字,则验证失败。假设计数为150.我输入150&amp;然后删除1&amp;再次输入1然后文本框将获得501&amp;验证将失败
嗯,毕竟你应该坚持处理private void SearchTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
string text = textBox.Text + e.Text;
if (!string.IsNullOrEmpty(text))
{
int searchIndex = 0;
int count = 100;
int.TryParse(text, out searchIndex);
e.Handled = (searchIndex > count);
}
}
}
事件。试试这个:
TextChanged
答案 1 :(得分:1)
试试这个:
<强>代码强>
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null && !string.IsNullOrEmpty(textBox.Text))
{
int searchIndex = 0;
int count = 100;
int.TryParse(textBox.Text, out searchIndex);
if (textBox != null && !string.IsNullOrEmpty(textBox.Text))
{
if (searchIndex > count)
{
textBox.Text = textBox.Text.Substring(0, textBox.Text.Length - 1);
textBox.SelectionStart = textBox.Text.Length;
textBox.SelectionLength = 0;
}
}
}
}
答案 2 :(得分:1)
One&amp; two。在这两个答案的帮助下,我解决了我的问题。我正在处理两个事件PreviewKeyDown&amp;框TextChanged。
代码:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
int searchIndex = 0;
int Count = 100;
int.TryParse(textBox.Text, out searchIndex);
if (textBox != null && !string.IsNullOrEmpty(textBox.Text))
{
if (searchIndex > Count)
{
textBox.Text = OldValue.ToString();
textBox.SelectionStart = start;
}
}
}
public int OldValue = 0;
public int start = 0;
private void SearchTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
TextBox textBox = sender as TextBox;
int.TryParse(textBox.Text, out OldValue);
start = textBox.SelectionStart;
}
我在PreviewKeyDown事件上保存oldvalue并在TextChanged事件中使用它。
答案 3 :(得分:0)
您可以像这样使用SelectionStart
和SelectionLength
:
if (searchIndex > Count)
{
textBox.Text = textBox.Text.Substring(0, textBox.Text.Length - 1);
textBox.SelectionStart = textBox.Text.Length -1;
textBox.SelectionLength = 0;
}