2017-08-10 323 views
2

我一直在用戶控件上使用[System.ComponentModel.ReadOnly]來防止設計器設置屬性,但我已經閱讀了一些指示 [DesignerSerializationVisibility(DesignerSerializationVisibility .Hidden)]應該用於此目的。哪個是對的?如果它不是[System.ComponentModel.ReadOnly],應該何時使用這個屬性?停止窗體設計器設置屬性的屬性

回答

4

那麼,它是這樣做的,但不是它的意圖。 [ReadOnly(true)]阻止用戶修改屬性窗口中的屬性。它仍然顯示,但灰色。這實際上有用的可能性很小,我想不出一個好例子。可能的角落情況是一個自定義的TypeDescriptor,它根據其他屬性值動態更改只讀狀態。但那是火箭科學。

您通常使用[Browsable(false)]來防止該屬性出現。和DesignerSerializationVisibility.Hidden可以阻止代碼序列化程序在InitializeComponent()方法中保留一個值,如果用戶不能修改它,那麼該方法不太可能有用。儘管[DefaultValue]通常會確保這一點。因人而異。

+0

謝謝我希望能夠設置我標記在控件的屬性,我標記的控件/窗體的構造函數中的屬性。當我使用ReadOnly時,它似乎在設計師中引起了MethodNotFound異常 - 是否可以預期? – Shane

+0

嗯,沒有。這是一個簡單的異常生成,只是修改控件而不從表單中刪除它首先可以做到這一點。我不應該要求我用這麼小的信息來猜測,點擊Ask Question按鈕。 –