2017-08-10 10 views
2

ユーザーコントロールで[System.ComponentModel.ReadOnly]を使用してプロパティを設定できないようにしましたが、 [DesignerSerializationVisibility .Hidden)]を使用する必要があります。どちらが正しい?それが[System.ComponentModel.ReadOnly]でない場合、この属性はいつ使用されるべきですか?Windowsフォームデザイナーがプロパティを設定しないようにする属性は何ですか?

答えて

4

これはそうですが、意図はありません。 [ReadOnly(true)]は、ユーザーがプロパティウィンドウでプロパティを変更できないようにします。まだ表示されていますが、グレイアウトされています。これが実際に有用であるというオッズはかなり小さいです、私は良い例を考えることができません。可能なコーナーケースは、他のプロパティ値に応じて、読み取り専用状態を動的に変更するカスタムTypeDescriptorです。しかし、それはロケット科学です。

通常、[Browsable(false)]を使用してプロパティが表示されないようにします。また、DesignerSerializationVisibility.Hiddenを使用すると、コードシリアライザがInitializeComponent()メソッドの値を保持しないようにすることができます。ユーザーが変更できない場合は有用であるとは限りません。たとえ[DefaultValue]が通常それを既に保証していたとしても。 YMMV。

+0

ありがとう私はプロパティを設定することができますが、コントロールのフォームのコンストラクタ/私はマーキングしているプロパティを持つコントロールをホストするフォームをマークします。 ReadOnlyを使用したとき、デザイナでMethodNotFound例外が発生するように見えました - これは期待されていますか? – Shane

+0

うーん、いいえ。生成するのは簡単な例外です。フォームから削除することなくコントロールを変更するだけで、最初に行うことができます。私はこれから推測する必要はありません。質問するボタンをクリックしてください。 –

関連する問題