[英]How to distinguish between user input, but allow the application itself to change text
我有一个文本框,不允许用户输入“ [”和“]”字符。 但是,我想将文本默认设置为同时包含“ [”和“]”的值。 我该怎么办? 这是我的代码:
TextBox txtEdit = new TextBox();
txtEdit.TextChanged += txtEdit_TextChanged;
txtEdit.Text = "[Test]";
private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
if ((sender as TextBox).Text.Contains("[") || (sender as TextBox).Text.Contains("]"))
{
MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
(sender as TextBox).Text = "";
}
}
更改Text
属性后放置TextChanged
事件
TextBox txtEdit = new TextBox();
txtEdit.TextChanged += txtEdit_TextChanged;
private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
if (comboBoxYou.Text == txtEdit.Text)
{
return;
}
else if ((sender as TextBox).Text.Contains("[") || (sender as TextBox).Text.Contains("]"))
{
MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
(sender as TextBox).Text = "";
}
}
我将为文本框设置一个keydown
事件。
如果您不希望用户输入'['和']'字符,请读入关键字符并设置e.Handled = true
如果它与您不需要的字符匹配)。
Toon Casteele的答案是一个很好的解决方案。 否则,请尝试向表单中添加一个布尔值,当用户选择一个值时,将其设置为true,然后检查TextChanged事件中的值是否为true。
private bool IsSelectedItemText; //set it to true when an item is selected
然后执行以下检查:
if(!IsSelectedItemText)
//Check for square brackets
else
//Add text from item
另外,这与问题没有直接关系,但我强烈建议您仅将“ sender”对象强制转换一次。 完成后,代码如下所示:
private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = sender as TextBox;
if(!IsSelectedItemText)
{
if (tb.Text.Contains("[") || tb.Text.Contains("]"))
{
MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
tb.Text = "";
}
}
else
{
//Set text from selected item
}
IsSelectedItemText = false;
}
请记住,选择一个项目时,将布尔变量设置为“ true”。
如果那是您想要的。
private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
string a = (sender as TextBox).Text.substing(0,1).subsctring;
a = a.Remove(0, 1);
a = a.Remove(a.Length - 1, 1);
if (a.Contains('[') || a.Contains(']') )
{
MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
}
(sender as TextBox).Text = "[" + a.Replace("[", "").Replace("]", "") + "]";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.