C# TabControl, как создать собственный редактор коллекции TabPages?
Я настроил TabPage, но обнаружил, что есть следующие проблемы:
Во-первых, я создаю два пользовательских TabPage, это сработало.
Но была проблема, когда я закрыл документ, а затем снова открыл документ:
введите описание изображения здесь
Посмотрите, TabPage становится четыре, но я нашел проблему в документе "designer.cs".
//
// blK_TabControl1
//
this.blK_TabControl1.Controls.Add(this.blK_TabPage6);
this.blK_TabControl1.Controls.Add(this.blK_TabPage7);
this.blK_TabControl1.Location = new System.Drawing.Point(4, 12);
this.blK_TabControl1.Name = "blK_TabControl1";
this.blK_TabControl1.SelectedIndex = 0;
this.blK_TabControl1.Size = new System.Drawing.Size(604, 196);
this.blK_TabControl1.TabIndex = 14;
this.blK_TabControl1.TabPages.AddRange(new System.Windows.Forms.TabPage[] {
this.blK_TabPage6,
this.blK_TabPage7});
После того, как обычный TabControl добавляет TabPage, этот код "TabPages.AddRange()" отсутствует, как я могу это исправить?
Вот мой код:
public class BLK_TabPageCollectionEditor : CollectionEditor
{
public BLK_TabPageCollectionEditor(Type type)
: base(type)
{
}
protected override bool CanSelectMultipleInstances()
{
return false;
}
protected override Type CreateCollectionItemType()
{
return typeof(BLK_TabPage);
}
protected override object CreateInstance(Type itemType)
{
BLK_TabPage tabPage = (BLK_TabPage)itemType.Assembly.CreateInstance(itemType.FullName);
IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost));
host.Container.Add(tabPage);
//this.Context.Container.Add(tabPage);
tabPage.Text = tabPage.Name;
return tabPage;
}
}
public class BLK_TabControl : TabControl
{
[EditorAttribute(typeof(BLK_TabPageCollectionEditor), typeof(UITypeEditor))]
[MergableProperty(false)]
public new TabControl.TabPageCollection TabPages
{
get
{
return base.TabPages;
}
}
}
Заранее спасибо.
1 ответ
Решение
Я попробовал твой код. Похоже, все в порядке. Но, основываясь на сгенерированном дизайнером коде и описании вашего изображения, единственное, что я могу предложить, это скрыть сериализацию TabPages
имущество:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorAttribute(typeof(BLK_TabPageCollectionEditor), typeof(UITypeEditor))]
[MergableProperty(false)]
public new TabControl.TabPageCollection TabPages
{
get
{
return base.TabPages;
}
}