我開始創建一個自定義的TabControl小部件,這樣我就可以在選項卡的右邊緣使用關閉X精確地繪製選項卡。我有一個自定義數組類,它包含所有的選項卡。正確的方法來覆蓋Control.ControlCollection
所以我重寫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();
}
}
目前這個工作,但如果控件類仍然可以調用方法SetChildIndex,等這改變了底層數組列表,但不是的TabPages陣列。
我希望能夠消除新的ControlCollection類必須使用基類來註冊xTabControl對象的新xTabPage對象。
我已經通過.Net反射器的類結構。我希望不必複製Control類的一半,以便讓新小部件的註冊工作。
我知道這是一個遠投,但有沒有人有這樣做的成功?
我放棄了自定義WinForms標準TabControl(現在使用第三方控件),原因很多:無法控制標籤大小等。但是這裏有一些可能相關的資源:http:// dotnetrix。 co.uk/tabcontrol.htm ... http://www.codeproject.com/KB/dotnet/CustomTabControl.aspx ... http://www.codeproject.com/KB/tabs/flattabcontrol.aspx ...在對這些代碼項目文章的評論中,您會發現其他鏈接和許多問題。祝你好運 ! – BillW 2010-02-23 03:30:21