C# 从TextBoxBase继承
我正在处理一个库(.dll)文件,我想创建一个名为FatherTextBox的自定义文本框,所以我从TextBoxBase(一个抽象类)派生开始 对自定义逻辑进行编码后,我注意到我收到了以下错误消息:C# 从TextBoxBase继承,c#,winforms,C#,Winforms,我正在处理一个库(.dll)文件,我想创建一个名为FatherTextBox的自定义文本框,所以我从TextBoxBase(一个抽象类)派生开始 对自定义逻辑进行编码后,我注意到我收到了以下错误消息: The type 'System.Windows.Forms.TextBoxBase' has no constructors defined 所以我想这不是一个选择: public FatherTextBox() : base() { } 我的问题是: 没有构造函数
The type 'System.Windows.Forms.TextBoxBase' has no constructors defined
所以我想这不是一个选择:
public FatherTextBox() : base()
{
}
我的问题是:
TextBoxBase
有一个内部
构造函数,这就是为什么不能调用它。试试这个
class Txt:TextBox
{
public Txt():base()
{
}
}
查看
TextBoxBase
类的源代码,有两个构造函数:
internal TextBoxBase()
{
base.SetState2(2048, true);
this.textBoxFlags[TextBoxBase.autoSize | TextBoxBase.hideSelection | TextBoxBase.wordWrap | TextBoxBase.shortcutsEnabled] = true;
base.SetStyle(ControlStyles.FixedHeight, this.textBoxFlags[TextBoxBase.autoSize]);
base.SetStyle(ControlStyles.UserPaint | ControlStyles.StandardClick | ControlStyles.StandardDoubleClick | ControlStyles.UseTextForAccessibility, false);
this.requestedHeight = base.Height;
}
及
第一个构造函数是内部的,因此只有定义该类型的同一程序集才能访问它。第二个是静态构造函数,在类的第一次访问时调用
现在回答您的问题:
TextBox
或RichTextBox
,可满足您的需要TextBoxBase
为所有具有通用OOP原则的文本框设计了一个文本框库:封装。封装简而言之就是隐藏复杂类型的实现细节。而且TextBoxBase
非常复杂所以不可能从TextBoxBase继承吗?@samy正确。继承自
TextBox
或RichTextBox
,或其他类似于您想要的东西。好的,我会这样做的,谢谢:)但我想知道,如果我们不能使用它,为什么他们会创建TextBoxBase?nvm我现在明白了,是microsft个人使用的。看我的帖子,为什么您不能使用它。
static TextBoxBase()
{
// Note: this type is marked as 'beforefieldinit'.
TextBoxBase.autoSize = BitVector32.CreateMask();
TextBoxBase.hideSelection = BitVector32.CreateMask(TextBoxBase.autoSize);
TextBoxBase.multiline = BitVector32.CreateMask(TextBoxBase.hideSelection);
TextBoxBase.modified = BitVector32.CreateMask(TextBoxBase.multiline);
TextBoxBase.readOnly = BitVector32.CreateMask(TextBoxBase.modified);
TextBoxBase.acceptsTab = BitVector32.CreateMask(TextBoxBase.readOnly);
TextBoxBase.wordWrap = BitVector32.CreateMask(TextBoxBase.acceptsTab);
TextBoxBase.creatingHandle = BitVector32.CreateMask(TextBoxBase.wordWrap);
TextBoxBase.codeUpdateText = BitVector32.CreateMask(TextBoxBase.creatingHandle);
TextBoxBase.shortcutsEnabled = BitVector32.CreateMask(TextBoxBase.codeUpdateText);
TextBoxBase.scrollToCaretOnHandleCreated = BitVector32.CreateMask(TextBoxBase.shortcutsEnabled);
TextBoxBase.setSelectionOnHandleCreated = BitVector32.CreateMask(TextBoxBase.scrollToCaretOnHandleCreated);
TextBoxBase.EVENT_ACCEPTSTABCHANGED = new object();
TextBoxBase.EVENT_BORDERSTYLECHANGED = new object();
TextBoxBase.EVENT_HIDESELECTIONCHANGED = new object();
TextBoxBase.EVENT_MODIFIEDCHANGED = new object();
TextBoxBase.EVENT_MULTILINECHANGED = new object();
TextBoxBase.EVENT_READONLYCHANGED = new object();
}