C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: プロパティウインドウへの表示制御


(過去ログ 96 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■57236 / inTopicNo.1)  プロパティウインドウへの表示制御
  
□投稿者/ まっつ (1回)-(2011/02/18(Fri) 11:05:01)

分類:[.NET 全般] 

いつも参考にさせて頂いております。

表題の件で教えて頂きたいのですが、

派生クラスでデザイナのプロパティウインドウに基底クラスのプロパティを表示しないようにするため
クラス内にControlDesignerクラスを派生させたサブクラスを作成しPostFilterPropertiesメソッドを
オーバーライドして表示させないプロパティをコレクションから削除するよう記述し、このサブクラス
をクラス全体のDesigner属性に与えました。

[System.ComponentModel.Designer(typeof(MyLabel.PropertyFilter))] public class MyLabel : System.Windows.Forms.Label
{
private class PropertyFilter : System.Windows.Forms.Design.ControlDesigner
{
protected override void PostFilterProperties(System.Collections.IDictionary Properties)
{
Properties.Remove("AllowDrop");

base.PostFilterProperties(Properties);
}
}
:
:
}


基底クラスがButtonやLabelの場合はこの方法でデザイナのプロパティウインドウに目的の基底クラスの
プロパティが表示されないようになるのですが、基底クラスがFormの場合はプロパティが表示されてしま
います。
また、基底クラスがGroupBoxのようにデフォルト(?)でコントロールのコンテナとして振舞うものは
プロパティの表示に関しては表示されないようになりますが、コンテナとしての振る舞いが抑制されて
しまいます。


基底クラスがFormの場合はこの方法ではデザイナでのプロパティウインドウの表示を制御できないの
でしょうか?

また、コントロールのコンテナとして振舞うコントロールに関してはコンテナとしての振る舞いと
プロパティウインドウの表示を制御を両立させたい場合はどのようにすればいいでしょうか?

よろしくお願いします。

引用返信 編集キー/
■57258 / inTopicNo.2)  Re[1]: プロパティウインドウへの表示制御
□投稿者/ Azulean (694回)-(2011/02/19(Sat) 01:15:50)
2011/02/19(Sat) 01:16:48 編集(投稿者)
よく見かけるやり方としては、Designer 属性で制御するのではなく、
対象のプロパティを override または、new で上書きして、そのプロパティに Browsable 属性で非表示にすることでしょうか。

[Browsable(false)]
public override int HogeHoge
{
  get { return base.HogeHoge; }
  set { base.HogeHoge = value; }
}

コンテナとしての振る舞いが失われるのは、コンテナに書かれている Designer 属性の型が異なるからでしょう。
元のクラスの Designer 属性を注意深く確認してください。

# GroupBox であれば、GroupBoxDesigner。このあたりは GroupBox にカーソルを合わせて定義に移動(F12) でメタデータが表示され、
# そこから確認することもできます。

引用返信 編集キー/
■57260 / inTopicNo.3)  Re[2]: プロパティウインドウへの表示制御
□投稿者/ まっつ (2回)-(2011/02/19(Sat) 08:21:26)
Azuleanさん、ありがとうございます。

教えて頂いた通り大多数のプロパティは上書きしてBrowsable属性をfalseにすることでウインドウへの表示抑制を
実現できたのですが、GenerateMemberやModifiersに関しては実現できませんでした(これらはプロパティでない??)

色々と調べていくうちに、表示抑制のために作成したサブクラスをControlDesignerクラスの派生ではなく、
ParentControlDesignerクラスを派生させたものにするとコンテナとしての振る舞いを保ったまま、プロパティの
表示抑制ができました。

デザイナクラスについてよく理解しないまま使用した結果で、これを機会に少しデザイナについて勉強しようと
思います。

わざわざ教えて頂いた方法以外で解決してしまいましたが、教えて頂いた方法は別の機会で利用したいと思います。
ありがとうございました。

引用返信 編集キー/
■57261 / inTopicNo.4)  Re[3]: プロパティウインドウへの表示制御
□投稿者/ まっつ (3回)-(2011/02/19(Sat) 08:23:07)
すみません。解決済みにチェックを入れるのを忘れてしまいました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -