在花了90分钟寻找这个简单问题的解决方案后,我不得不羞愧地提出一个问题。
我正在进行一个WPF项目,用户在该项目中输入文本。我希望在用户输入时检查输入,显示工具提示,并在理想情况下阻止不允许的字符。基本上是这条线:
private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
{
e.???
}我在设计器中的KeyDown-Property字段中双击创建了这段代码(如果我在那里搞砸了,只需提到这一点)。
我无法访问e.SupressKeyPress属性。为什么?关于VS提供的属性,我认为e是错误的类型,或者是在错误的上下文中。
Edit1
private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
{
var strKey = new KeyConverter().ConvertToString(e.Key);
if (!strKey.All(Char.IsLetter))
{
MessageBox.Show("Wrong input");
e.Handled = true;
}
}多亏了@rokkerboci,我才能建造出这样的作品。然而,我认为它过于复杂。因此,我们仍然欢迎改进:)
创建消息框时,应用程序将挂起,而不会引发异常。
发布于 2017-12-24 10:41:02
您使用的是WPF,没有包含WindowsForms特定的SupressKeyPress属性。
您可以在WPF中使用KeyDown事件并将KeyEventArgs.Handled属性设置为true (它告诉处理程序它不必对此事件做任何事情)。
private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
MessageBox.Show("delete pressed");
e.Handled = true;
}
}编辑:
对于你的问题,我找到了一个完美的答案:
C#:
char[] invalid = new char[] { 'a', 'b' };
private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
foreach (var item in invalid)
{
if (e.Text.Contains(item))
{
e.Handled = true;
return;
}
}
}
private void TextBox_Pasting(object sender, DataObjectPastingEventArgs e)
{
var text = e.DataObject.GetData(typeof(string)).ToString();
foreach (var item in invalid)
{
if (text.Contains(item))
{
e.CancelCommand();
return;
}
}
}XAML:
<TextBox PreviewTextInput="TextBox_PreviewTextInput" DataObject.Pasting="TextBox_Pasting" />https://stackoverflow.com/questions/47959853
复制相似问题