Я начал создавать пользовательский виджет 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, и т.д., который изменяет основной ArrayList, но не массив tabPages.
Я хочу, чтобы исключить необходимость использования нового класса ControlCollection для использования базового класса для регистрации новых объектов xTabPage с помощью xTabControl.
Я уже прошел через структуру классов с .Net Reflector. Я надеюсь, что вам не придется копировать половину класса Control, чтобы получить регистрацию нового виджета для работы.
Я знаю, что это длинный выстрел, но кто-нибудь имел успех?
Я отказался от настройки стандартного WinCorms TabControl (теперь использую сторонний элемент управления) по многим причинам: невозможность контролировать размер вкладок и т. Д. Но вот некоторые ресурсы, которые могут иметь значение: http: // dotnetrix. co.uk/tabcontrol.htm ... http://www.codeproject.com/KB/dotnet/CustomTabControl.aspx ... http://www.codeproject.com/KB/tabs/flattabcontrol.aspx ... В комментариях к статьям Code Project вы найдете другие ссылки и множество вопросов. Удачи ! – BillW