2012-02-27 4 views
0

Visual Studioが既に私にしているいくつかの動作を再現したいと思っています。デザイナーでドロップダウンリストを使用して、同じ形式のコンポーネント。Visual Studioフォームデザイナーから現在のフォームの他のコントロールを選択できるようにするドロップダウンを作成する

次の例をご覧ください:フォームとボタン。

フォームから、設定できる「OKButton」プロパティがあります。ダイアログをドロップダウンすると、可能なすべてのボタンがドロップダウンリストに表示されます。

私は、テキストボックスに「ServiceMember」というプロパティを持たせたいと思っています。それを展開すると、 "ServiceObject"タイプのフォームのすべてのパブリックメンバーから選択することができます。

これはどのような自動処理でも可能ですか?そうでない場合は、コンボボックスに現在のオブジェクトにない名前を設定する方法がわかりません。彼らは親のフォームのメンバーですか?

答えて

0

質問のテキストではなくタグから推測されたデザイナーの一部としてこれを実行しようとしている場合は、AttributeProviderの属性を持つカスタムコントロール上にあるパブリックプロパティIListSourceは、プロパティデザイナで選択する必要があります。すなわち:

[AttributeProvider(typeof(IListSource))] 
public object MyList { get; set; } 

リストの選択も自動的に列挙型から生成される - How can I add a combobox in control designer properties for a WinForms custom control?を参照してください - しかし、これはおそらく、この場合はあなたのために役に立ちません。

しかし、このリストの人口は少し痛いでしょう。おそらく、Reflectionを使用してホストコントロール/フォームを調べてServiceObjectから継承したパブリックメンバーを探すことができます。あなたは型にキャストし、null以外のリターンを得るかどうかを確認することができますCheck if a class is derived from a generic classまたは均等参照:

ServiceObject potentialServiceObject = formMember as ServiceObject; 
if (potentialServiceObject != null) 
{ 
    // Add to list for dropdown 
} 
+0

私はもともとタイトルデザイナーを持っていた、誰かがそれを離れて編集した... – greggorob64

+0

その通常悪い習慣持っていますタイトルはタグを複製しています(「How to X in C#」などの質問ではたくさんのミニフイルムを見たことがあります)が、カスタムコントロールデザイナーに関する問題の説明には、明確にすることが役に立ちますそれ。 – kaj

+0

リフレクションを使用してコントロールの親を見て、各コントロールをナビゲートして、正しいオブジェクトタイプを探すことは間違いなく痛みになりますが、私の唯一の選択肢かもしれません。 – greggorob64

関連する問題