2017-08-15 24 views
-1

私はTabPageをカスタマイズしましたが、次のような問題があることがわかりました:C#TabControl、カスタムTabPagesコレクションエディタの作成方法

まず、2つのカスタムTabPageを作成しました。

しかし、そこに私が文書を閉じ、問題があって、私は、文書を再び開く:

enter image description here

見て、のTabPageが4になるが、私は「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; 
     } 
    } 

} 

ありがとう:

は、ここに私のコードです。

+0

あなたが代わりにあなたの第二の画像と画像のコードブロックを使用して検討してください。しかし、デザイナーで生成されたコードと、あなたのイメージの説明に基づいて、私が提案することができる唯一のことは、TabPagesプロパティのシリアル化を非表示にすることです。 –

答えて

0

私はあなたのコードを試しました。すべてがうまくいくように見えます。

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    [EditorAttribute(typeof(BLK_TabPageCollectionEditor), typeof(UITypeEditor))] 
    [MergableProperty(false)] 
    public new TabControl.TabPageCollection TabPages 
    { 
     get 
     { 
      return base.TabPages; 
     } 
    } 
関連する問題