2017-08-10 86 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按钮。 –