从文本框控件继承的组件
Posted
技术标签:
【中文标题】从文本框控件继承的组件【英文标题】:component which inherits from textbox control 【发布时间】:2019-06-30 12:31:21 【问题描述】:我正在尝试创建一个从文本框控件(Visual Studio 2017,使用 C# 的 Web 窗体应用程序)继承控件的组件。
我正在尝试使该文本框只能接受数值,如果文本框有超过 11 个字符,那么它们的字符将显示为红色。
我了解如何从组件类返回一个字符串,但我不太了解如何将改变颜色的方法转移到文本框所在的主类。
组件类部分:
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;
add_driver 类:
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)
【问题讨论】:
【参考方案1】:您需要在您的 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
您可能需要处理一些额外的边缘情况,或者您可能希望添加一些生物舒适度以方便您的新组件的使用(例如,添加一个属性以直接获取数值,而不是让Text
属性每次)。
鉴于您已将这些方法添加到您的 MyTextBox
类中,您将不需要在您的 AddDrivers
表单中为它们提供事件处理程序。
【讨论】:
感谢您的回答,但我仍然不确定如何从 AddDrivers 类中使用该组件。当我尝试使用您的示例创建它时,它不断给出错误“找不到合适的方法来覆盖”。感谢您提供有关命名的说明。 您使用的是标准 WinForms 吗? 是的,但没关系,我设法做到了。唯一的问题是被覆盖的方法没有对象发送者。但现在我的文本框工作正常,所有代码都在组件中。谢谢以上是关于从文本框控件继承的组件的主要内容,如果未能解决你的问题,请参考以下文章