C# 从textbox控件继承的组件

C# 从textbox控件继承的组件,c#,visual-studio,inheritance,methods,components,C#,Visual Studio,Inheritance,Methods,Components,我正在尝试创建一个组件,该组件继承了textbox控件Visual Studio 2017的控件,即使用C的Web窗体应用程序 我试图使textbox只能接受数值,如果textbox有超过11个字符,那么这些字符将显示为红色 我知道如何从组件类返回字符串,但我不知道如何将改变颜色的方法传输到textbox所在的主类 组件类零件: public partial class textbox : Component { public textbox() {

我正在尝试创建一个组件,该组件继承了textbox控件Visual Studio 2017的控件,即使用C的Web窗体应用程序

我试图使textbox只能接受数值,如果textbox有超过11个字符,那么这些字符将显示为红色

我知道如何从组件类返回字符串,但我不知道如何将改变颜色的方法传输到textbox所在的主类

组件类零件:

public partial class textbox : Component
   {
       public textbox()
       {
           InitializeComponent();
    }

    public textbox(IContainer container)
    {
        container.Add(this);

        InitializeComponent();
    }

//METHOD TO BE USED IN add_drivers
    public void textBox1_TextChanged(object sender, EventHandler e)
    {
        if (textBox1.MaxLength > 11)
        {
            textBox1.ForeColor = Color.Red;
        }

    }
添加驱动程序类:

namespace Component
{
    public partial class add_driver : Form
    {
    public add_driver()
    {
        InitializeComponent();
    }

    private void add_driver_Load(object sender, EventArgs e)
    {

    }



    private void phoneNr_textbox_TextChanged(object sender, EventArgs e)
    {

  // IN THIS PART I'M NOT SURE HOW TO CALL METHOD FROM COMPONENT
    }

    private void phoneNr_textbox_KeyPress_1(object sender, KeyPressEventArgs e)
        {
        }
   }
    }
您需要在textbox类中处理KeyPress事件,它应该继承现有的textbox类,否则您将需要重新创建所有现有的textbox行为!另外,请注意C中类和方法名称的标准大小写是CamelCase,而不是snake_case或pascalCase

public partial class MyTextBox : TextBox
{
   public MyTextBox()
   {
     InitializeComponent();
   }

  protected override void OnTextChanged(object sender, EventArgs e)
  {
     if (this.Text.Length > 11)
     {
       this.ForeColor = Color.Red;
     }
  }

  protected override void OnKeyPressed(object sender, KeyPressedEventArgs e)
  {
    // check for a number, set e.Handled to true if it's not a number
    // may need to handle copy-paste and other similar actions
  }
}
您可能需要处理一些额外的边缘情况,或者您可能希望添加一些生物舒适性来简化新组件的使用,例如,添加属性以直接获取数值,而不是每次都使用“转换文本”属性


鉴于您已将这些方法添加到MyTextBox类中,您不需要在AddDrivers窗体中为它们使用事件处理程序。

谢谢您的回答,但我仍然不确定如何从AddDrivers类中使用该组件。当我试图使用你们的例子来创建它时,它总是给出错误,并没有找到合适的方法来覆盖。谢谢你关于命名的注释。你在使用标准WinForms吗?是的,我在使用,但没关系,我设法做到了。唯一的问题是被重写的方法没有对象发送者。但现在我的文本框工作正常,所有代码都在组件中。非常感谢。