我已经阅读了很多与按键事件相关的文章,但是我无法弄清楚如何获取它们。我知道只有具有键盘焦点的当前控件才会接收到按键事件。但是我该如何确保我的用户控件拥有它呢?
尝试过以下方法但没有成功:
public partial class Editor : UserControl
this.SetStyle(ControlStyles.Selectable, true);
this.TabStop = true;
...
//take focus on click
protected override void OnMouseDown(MouseEventArgs e)
{
this.Focus();
base.OnMouseDown(e);
}
...
protected override bool IsInputKey(Keys keyData)
{
return true;
}
并且还有这个:
//register global keyboard event handlers
private void Editor_ParentChanged(object sender, EventArgs e)
{
if (TopLevelControl is Form)
{
(TopLevelControl as Form).KeyPreview = true;
TopLevelControl.KeyDown += FCanvas_KeyDown;
TopLevelControl.KeyUp += FCanvas_KeyUp;
TopLevelControl.KeyPress += FCanvas_KeyPress;
}
}
后者给我按键按下和松开事件,但仍然没有按键事件。如果我的控件继承自UserControl,是否有其他方法可以使用来获取每个按下/松开/按下事件?
编辑: 由于有一条评论链接到了另一个SO问题:重要的是,我还需要得到KeyPress事件,因为它可以在任何语言的键盘上发送正确的字符。这对于文本写作非常重要。如果您只获取单个按键,则必须自己将其转换为正确的字符。但也许有一种方便的方法可以将按下的键转换为本地化字符?