我需要RichTextEdit控件中Tab键的自定义行为。
我最好的就是这个:
editBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.field_PreviewKeyPress);
private void field_PreviewKeyPress(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Tab:
//Some code here
break;
}
}
Tab键注册正常,但在此之后控件仍然处理键并将焦点移动到下一个控件。似乎没有办法消耗这个关键事件。
答案 0 :(得分:1)
也许这篇CodeProject文章可以给你一些提示:
TabKeyIntercept - Intercept and process the Tab key in a Windows.Forms form
[...]幸运的是,在基础Form类中, 存在
protected override bool ProcessTabKey(bool forward)
方法。使用这种方法,我们可以 截取并“消耗”Tab键。而且,事实证明,如果
ProcessTabKey()
方法的返回值 是假的,Tab键确实成功 进入OnKeyDown()方法。但是, 当然,如果你的代码“消耗”了ProcessTabKey()
方法中的Tab键, 你可能不需要处理它 在OnKeyDown()
方法中。另外,Control-Tab组合 进入
OnKeyDown()
方法。所以,知道这些事情,我们就是 准备定义一个定制的用途 对于Tab键 - 我们可以编码 表单允许用户使用 Control-Tab组合切换 正常使用/意义之间 Tab键和我们的自定义用途。
答案 1 :(得分:1)
我自己找到一个解决方案 - 覆盖bool RichTextEdit.ProcessCmdKey(ref message m,Keys keyData)。
答案 2 :(得分:0)
你说你正在使用“RichTextEdit”控件,但我想你的意思是RichTextBox。如果是这样,您应该能够将AcceptsTab属性设置为True以允许它处理Tab键。