我可以翻译成中文。问题是:我能否禁用特定控件的键盘输入?

6

有没有可能禁用控件的键盘输入?例如 ListView?我该怎么做?我尝试重写 KeyUpKeyDown 事件,但显然那不是正确的方法。

IsEnabled 是一个好的解决方案,但我只想禁用键盘交互,而保留鼠标交互。


所以你只是想惩罚键盘用户吗? - John Knoeller
确实 - 我是。我正在寻找只能用鼠标的操作。 - Maciek
5个回答

16

处理 KeyDown 事件太晚了,但是你可以处理 PreviewKeyDown 事件,这应该可以给你想要的行为:

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

5
亲爱的maciek,你需要做的唯一事情就是使用OnKeyDown事件,只需这样做:
private void txtInput_KeyDown(object sender, KeyEventArgs e)
    {
            e.Handled = true; // user can input
            e.Handled = false; // user cannot input
    }

嘿,Maciek,你不应该同时使用上面的两个Handled代码,正如我在评论中提到的那样,你必须使用其中一个。 - Nasser Hadjloo

2

如果你按照以下方式使用KeyDown,它通常会对我有用:

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

一个更完整的实际应用示例(禁用非数字字符输入):http://cccontrols.codeplex.com/SourceControl/changeset/view/34146#611536 然而,约翰指出了一个很好的观点。您要禁用Control与否没有设置Enabled = false的原因吗? 编辑: 我刚刚注意到WPF标签。由于我是WPF haters,所以对我的答案不太确定了;-)

1
无法访问 e.SuppressKeyPress :/ - Maciek

1

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

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


我打负分,因为这种方法会禁用控件,而这不是解决方案。 - Nasser Hadjloo

0

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

属性值 Boolean 如果事件已处理,则为true;否则为false

如果您设置e.Handled = true,键盘事件将不再分派。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接