- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我着手创建一个自定义 TabControl 小部件,以便我可以在选项卡的右边缘用关闭的 X 准确地绘制选项卡。我有一个包含所有选项卡的自定义数组类。
所以我覆盖了 CreateControlsInstance 实例类并重新定义了 Controls 类,这样我就可以在反射序列化期间隐藏它。
protected override Control.ControlCollection CreateControlsInstance() {
return new ControlCollection( this );
}
[Browsable( false ), DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
private new Control.ControlCollection Controls {
get { return base.Controls; }
}
然后我创建覆盖类。
public new class ControlCollection: Control.ControlCollection {
private xTabControl owner;
public ControlCollection( xTabControl owner ): base( owner ) {
this.owner = owner;
}
public override void Add( Control value ) {
if ( !(value is xTabPage) )
throw new Exception( "The control must be of type xTabPage" );
xTabPage tabPage = (xTabPage)value;
if ( !owner.inTabEvent )
owner._tabPages.Add( tabPage );
base.Add( value );
}
public override void Remove( Control value ) {
if ( !(value is xTabPage) )
throw new Exception( "The control must be of type JDMX.Widget.xTabPage" );
if ( !owner.inTabEvent ) {
xTabPage tabPage = (xTabPage)value;
owner._tabPages.Remove( tabPage );
}
base.Remove( value );
}
public override void Clear() {
owner._tabPages.Clear();
}
}
目前这是可行的,但如果 Controls 类仍然可以调用方法 SetChildIndex 等,这会更改底层数组列表而不是 tabPages 数组。
我希望能够消除新的 ControlCollection 类必须使用基类来向 xTabControl 注册新的 xTabPage 对象的需要。
我已经使用 .Net Reflector 完成了类结构。我希望不必复制一半的 Control 类来注册新的小部件。
我知道这是不可能的,但有人成功过吗?
最佳答案
在我的整个研究过程中,由于将控件分配给 Add 函数所提供的函数数量众多,因此我找不到不使用 System.Windows.Forms.Control.ControlCollection 就可以管理 UserControl 的实例。当我开始将 Designer 纳入等式时,情况更糟。所以我决定使用上面给出的自定义覆盖来接受 Controls 属性。我现在需要使我的私有(private)级别 _tabPages 与控件集合保持同步,而不是相反。
关于c# - 覆盖 Control.ControlCollection 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315475/
对我编写的如下所示的扩展方法有疑问: public static IEnumerable FindControlsOfType(this ControlCollection instance) whe
我正在使用 Microsoft Visual Studio Express 2010开发 Windows 窗体应用程序 (C#) 我被以下内容迷惑了: 我创建了一个类来组织我的数据 namespace
我着手创建一个自定义 TabControl 小部件,以便我可以在选项卡的右边缘用关闭的 X 准确地绘制选项卡。我有一个包含所有选项卡的自定义数组类。 所以我覆盖了 CreateControlsInst
跟随这个问题Foreach loop for disposing controls skipping iterations让我烦恼的是允许对不断变化的集合进行迭代: 例如,以下内容: List ite
我的 Windows 窗体中有一个选项卡控件,我想循环访问两个不同选项卡中的每个元素。打开文件时,我希望启用两者的所有元素,而当文件关闭时,所有元素都将被禁用。 但是,我不知道如何完成此操作,因为控件
我正在使用ControlCollection.Find() C# 中的方法来查找我的表单中存在的一些图片框。 我将返回的结果存储在 Control[] 数组中。我如何知道 Find() 是否成功???
如何仅获取 ControlCollection 中的文本框? 我尝试: public static IEnumerable TextBoxes(this ControlCollection contr
此类的 MSDN 页面有一个 Control.ControlCollection (Control) constructor . 但语法仅使用 ControlCollection。我很困惑点运算符前面
因此,System.Windows.Forms.Control 具有类型为 Control.ControlCollection 的 Controls 属性。我在这个集合中有一堆小子控件的窗体上有一个控
我是一名优秀的程序员,十分优秀!