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;
        }
    }
Другие вопросы по тегам