首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuppressKeyPress属性KeyEventArgs的不可访问性

SuppressKeyPress属性KeyEventArgs的不可访问性
EN

Stack Overflow用户
提问于 2017-12-24 10:37:40
回答 1查看 531关注 0票数 1

在花了90分钟寻找这个简单问题的解决方案后,我不得不羞愧地提出一个问题。

我正在进行一个WPF项目,用户在该项目中输入文本。我希望在用户输入时检查输入,显示工具提示,并在理想情况下阻止不允许的字符。基本上是这条线:

如何在WinForms文本框中验证用户类型的字符?还是这个

是否有最佳实践方法来验证用户输入?

代码语言:javascript
复制
private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
    {
        e.???
    }

我在设计器中的KeyDown-Property字段中双击创建了这段代码(如果我在那里搞砸了,只需提到这一点)。

属性窗口的屏幕截图

我无法访问e.SupressKeyPress属性。为什么?关于VS提供的属性,我认为e是错误的类型,或者是在错误的上下文中。

智能感知截图

Edit1

代码语言:javascript
复制
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,我才能建造出这样的作品。然而,我认为它过于复杂。因此,我们仍然欢迎改进:)

创建消息框时,应用程序将挂起,而不会引发异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-24 10:41:02

您使用的是WPF没有包含WindowsForms特定的SupressKeyPress属性。

您可以在WPF中使用KeyDown事件并将KeyEventArgs.Handled属性设置为true (它告诉处理程序它不必对此事件做任何事情)。

代码语言:javascript
复制
private void NameTextbox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

编辑:

对于你的问题,我找到了一个完美的答案:

C#:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<TextBox PreviewTextInput="TextBox_PreviewTextInput" DataObject.Pasting="TextBox_Pasting" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47959853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档