我想创建一个继承TextBox的自定义TextBox类 并且当按下Enter键时覆盖onKeyDown事件以生成Tab功能。
这个问题有重复,但我找到的答案都没有意义,所以我想开一个新的讨论。
我不想从UserControl继承而是从TextBox继承...这真的很难吗?我似乎无法找到关于如何做到这一点的直接教程或示例。
这样的事情:
public partial class CustomTextBox : TextBox
{
public CustomTextBox()
{
this.KeyDown += customKeyDown;
}
void customKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{TAB}");
}
}
}
请记住,我对使用UserControls或CustomControls的经验很少,而且很久以前我就忘记了关键的事情
答案 0 :(得分:3)
您只需覆盖OnKeyDown
事件处理程序,此处不需要UserControl
。
当在单行或多行文本框中按下ENTER键时,下面的类移动到下一个控件。当多行时,按SHIFT + ENTER可以插入ENTER。
作为额外的奖励,令人讨厌的“叮”声被抑制(以最简单的方式,如果您不需要在控件之外处理键,则效果很好。)
namespace YourNameSpace
{
public class CustomTextBox : TextBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Enter && (!Multiline || Multiline && !e.Shift))
{
SendKeys.Send("{TAB}");
// Removes "ding" sound by NOT passing the key down to container
e.SuppressKeyPress = true;
}
}
}
}