0

プロパティを含む可能性のあるコントロールを含む既存のカスタム コントロール ライブラリがあります: HeaderStyle、ModalStyle、Collapsable など...

ユーザー インターフェイスでは、プログラムは現在、これらのプロパティの分類されたリストを表示しています。このコードを更新して、通常は使用しないプロパティを非表示にしようとしています。ボタンのクリックに基づいて非表示/表示するプロパティのリストがありますが、これらのフィールドをプログラムで非表示にする方法がわかりません。

非表示にする前にフィールドに入力された値を保持し、フィールドが再び表示された場合に値を再表示したいと思います。

これは、現在存在するが、トグルで非表示/表示したいプロパティです。

/// <summary>ModalStyle property for control</summary>
[XmlAttribute]
[DefaultValue(Utility.Common.Enumerations.ModalStyle.None)]
[Category(PropertyCategories.Rendering)]
[Description("Modal dialog style")]
public ModalStyle? ModalStyle
{
get { return control.ModalStyleActive; }
set { control.ModalStyle = value; }
}

私のオリジナルは #if DEBUG でいくつかのバリアントを実行することでしたが、独自の条件を使用しましたが、ボタン/トグルを介して条件を変更する方法を見つけることができませんでした。

誰でも私の問題の解決策を手伝ってもらえますか? 20 から 30 のプロパティを持つ 20 から 30 のコントロールがあり、それらをフィルター処理したいと考えています。

4

2 に答える 2

1

必要な機能が正確に得られない可能性がありますが、ソリューションをより簡単に保つための 2 つの提案があります。

最初に: あなたはライブラリ開発者なので、他の開発者が IDE プロパティ ウィンドウからアクセスできるプロパティを決定する必要があります。プロパティがめったに使用されないか、IDE であまり役に立たない場合は、[Browsable(false)] 属性を配置します。

2 番目: すべてのプロパティを IDE プロパティ ウィンドウに表示したいが、より高度な (またはあまり使用されていない) プロパティを非表示にする方法を個人に提供したい場合は、それらをすべて「高度な」カテゴリに入れます。ユーザーは、そのカテゴリを折りたたんで忘れることができます。

また: この質問に対する Oliver の回答を見てください: [how-to-show-or-hide-properties-dynamically-in-the-propertygrid]

于 2013-01-17T17:46:33.987 に答える
0

あなたが達成しようとしていることを理解できません。

属性を使用する場合、それらはクラスに対して静的です。したがって、あなたの場合、オブジェクトの表示/非表示を切り替えると、オブジェクトのインスタンスになります。また、実行時に属性値を変更することはできません。

おそらく、グローバルを作成するなどの代替ソリューションを試す必要があります

map<pair<type of object, property name>, is shown>

それに応じてエディターから更新します。

また、プロパティ グリッドのようなものを使用する場合、マップをチェックしないため問題が発生しますが、修正することができます。実行時に新しいクラスを作成し、現在のインスタンスへのプロキシにすることができます。(それを達成する方法をネットで確認してください。しかし、それは非常に簡単です。2 つの可能性があります: 文字列からコンパイルするか、ILGenerator を使用します。

この助けを願っています。

于 2013-01-17T15:11:22.283 に答える