如何创建继承自TextBox的类

时间:2016-11-26 11:42:05

标签: c# winforms user-controls

我想创建一个继承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的经验很少,而且很久以前我就忘记了关键的事情

1 个答案:

答案 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;
            }
        }
    }
}