DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Custom Component の デザイナ上のProprtyの展開を抑制する

環境/言語:[C#(Frameworkは3.5を利用しています)]
分類:[.NET]

いつも拝見させて頂いております。
Tankと申します。
表題の件で行き詰ってしまい、質問させていただきます。


現在、C#にてカスタムコンポーネントを作成しております。
(Timerと同じで、VSデザイナ上でフォームより離れた所に配置される奴です)
このコンポーネントはプロパティを持っており、型はTextBoxです。

ソースはこんな感じです。
public partial class CusCon : Component {
public CusCon() {
InitializeComponent();
}

public CusCon(IContainer container) {
container.Add(this);

InitializeComponent();
}

/// <summary>
/// カスタムプロパティ
/// </summary>
private TextBox _CusProp = null;
public TextBox CusProp {
get {
return _CusProp;
}
set {
_CusProp = value;
}
}
}


このコンポーネントをあるフォームに追加すると、デザイナのプロパティウィンドウでは、上記「CusProp」がコンボボックスの形で選択可能になってます。
で、その選択肢としては、フォーム上に配置されているTextBoxコントロールの一覧が出ています。

ここまでは問題ないのですが、ここで選択肢の内どれかを選ぶと、CusProp行の左に三角形が出てきて、そのTextBoxのプロパティが展開され実際に変更も可能になってしまいます。

私のイメージとしては、フォームのプロパティウィンドウ中のAcceptButtonの様に、一覧は表示されるけれど展開はされない形で実現したいと思っています。


Converterクラスを定義してユーザ定義クラスを展開可能にする、と言う記事はあちこちで見つかるのですが、展開可能になっているクラスの展開を抑制するにはどのようにしたら良いでしょうか?

ご教示いただきたく、宜しくお願い致します。
■No30990に返信(Tankさんの記事)
> AcceptButtonの様に、一覧は表示されるけれど展開はされない形

「インターフェイス」と「クラス」の違いではないでしょうか。

AcceptButton プロパティの戻り値の型を確認してみてください。
Button クラスでは無く、IButtonControl インターフェイスになっています。

また、TextBox クラスや TextBoxBase クラス、Control クラスではなく、
IWin32Window インターフェイスや IDropTarget インターフェイスを
扱うようにすれば、展開はされなくなります。

あるいは、自作インターフェイスを実装した Control を用意した場合、
プロパティの型が独自インターフェイスならば展開されませんが、
プロパティの型が独自クラスだった場合には展開できるようです。
> 「インターフェイス」と「クラス」の違いではないでしょうか。


魔界の仮面弁士様、いつもありがとうございます。

確かに、インタフェースだと展開されない事を確認致しました。
その方向で再度検討してみます。


また、過日は(別の板だったと思いますが)お礼も出来ずに失礼いたしました。
重ねてお礼を申し上げます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板