我可以禁用特定控件的键盘输入吗?

问题描述 投票:4回答:5

是否可以禁用控件的键盘输入?例如ListView?我怎么做?我已经尝试重写KeyUp KeyDown事件,但显然那不是这样的?

IsEnabled是一个很好的解决方案,但我只希望禁用键盘交互并保持鼠标交互不变。

c# wpf keyboard-events
5个回答
13
投票

处理KeyDown事件为时已晚,但你可以处理PreviewKeyDown事件,这应该会给你你正在寻找的行为:

private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
   e.Handled = true;
}

4
投票

亲爱的maciek,你唯一需要做的就是使用OnKeyDown事件

private void txtInput_KeyDown(object sender, KeyEventArgs e)
    {
            e.Handled = true; // user can input
            e.Handled = false; // user cannot input
    }

3
投票

如果你在其中执行以下操作,KeyDown通常适用于我:

e.Handled = true;
e.SuppressKeyPress = true;

一个更完整的示例,包含实际应用程序(禁用非数字字符的输入):http://cccontrols.codeplex.com/SourceControl/changeset/view/34146#611536

约翰提出了一个很好的观点。你有什么理由想要禁用与Control的交互但不设置Enabled = false

编辑:我刚注意到WPF标签。因为我是WPF仇恨者,所以不再确定我的答案了;-)


1
投票

这就是WebControl.Enabled = false;阻止它响应用户输入的目的。

编辑:现在问题已经改变,禁用控件不再是一个解决方案。但是我认为通过非键盘响应鼠标点击的控件是错误的,并不是每个人都喜欢使用鼠标。


0
投票

KeyPressEventArgs.Handled:获取或设置一个值,指示是否处理了KeyPress事件。

物业价值Boolean true如果事件被处理;否则,false

如果你设置e.Handled = true,键盘事件不再发送。

© www.soinside.com 2019 - 2024. All rights reserved.