【问题标题】:How to create class that inherits from TextBox如何创建从 TextBox 继承的类
【发布时间】:2016-12-02 00:43:02
【问题描述】:

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

【问题讨论】:

  • 查找覆盖关键字,我想你会得到你需要的
  • 另外:不要称它为 UserControl(它是一种容器类型)。它将是一个自定义控件,即控件的子类
  • @SeanK 在单行 TextBox 中,即使没有覆盖它也可以工作。但是对于多行TextBox,即使覆盖也无法正常工作。

标签: c# winforms user-controls


【解决方案1】:

您只需覆盖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;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2023-03-03
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多