2011-07-01 7 views
0

Framework 4.0をターゲットとするVS2010では、空の第2行のTableLayoutPanelを含むUserControlがあります。WindowsフォームデザイナーでUserControlサブクラスを編集しますか?

Windowsフォームデザイナを使用してこの2番目の行に項目を追加することは可能ですか、それともすべてコードで行う必要がありますか?

EDIT: Hans Passantのコメントには、リンクされた質問が、別のコントロール内で使用されているUserControlを参照しています。私は継承されたコントロールについて質問しています。

Public Class TestInheritedControl 
    Inherits TestControl 
End Class 

が作成されます。新しいファイルに次のクラスを作成する

Imports System.ComponentModel 
Imports System.Windows.Forms.Design 

<Designer(GetType(testDesigner))> 
Public Class TestControl 
End Class 

Public Class testDesigner 
    Inherits ControlDesigner 
    Public Overrides Sub Initialize(component As System.ComponentModel.IComponent) 
     MyBase.Initialize(component) 
     Dim X As TestControl = CType(component, TestControl) 
     EnableDesignMode(X.TableLayoutPanel1, "TableLayoutPanelX") 
    End Sub 
End Class 

私はTestControlは「TableLayoutPanel1」という名前のTableLayoutPanelを含むユーザーコントロールで、次のテストコードを、作成していますデザイナで表示されたときにデザイナで編集できない「TableLayoutPanel1」という名前のTableLayoutPanelが含まれていました。これは私の元の質問に記載された状況であり、解決されていません。

以前のUserControlsのいずれかを継承せずに新しいUserControlを作成し、その中にTestControlを配置すると、 "TestControl1.TableLayoutPanelX"というデザイナで編集可能なTableLayoutPanelでTestControlのインスタンスが作成されます。

上記のTestInheritedControlクラスをデザイナで編集できるようにする方法はありますか?

+0

[カスタムのUserControlに配置するときにコントロール機能をバブルする方法](http://stackoverflow.com/questions/2785376/how-to-bubble-a-controls-features-when-place) -in-a-custom-usercontrol) –

+0

同じことです。 [Designer]は、基底クラスではなく、継承されたクラスに適用する必要があります。 –

答えて

0

今日も同様のことをやらなければなりませんでした。私がそれを回避する方法は、基本クラスでインスタンス化されていない参照を使用することですが、継承するクラスでは実際のインスタンス化を行います。

すべてのプラグインを完全にプラグインするには、いくつかの手順を追加する必要がありますが、必要なコントロールが提供されます。 TableLayoutPanelを各継承するコントロール型にドロップし、コンストラクタで、(initializecomponentsを呼び出した後の)現在のインスタンス化されたバージョンに基本クラスのバージョンを設定する必要があります。

このようにして、継承しているコントロールで "デザイン"できますが、ベースコントロールからプログラムで使用できます。

関連する問題