我在VB.NET 2010 Framework 2.0中工作。
我不想让某些属性进入表单的设计器文件,但这些属性将出现在表单(属性网格)上。这些属性的行为总是一样的。
我使用了以下代码:
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property GradientBegin() As Color = Color.Red
但我面临的问题是 - &gt;在将“GradientBegin”颜色更改为RED而非编译程序后,在属性网格上,它将再次将新更改的值替换为RED。所以我实际上无法改变颜色。
我怎样才能做到这一点?
感谢您提前回复。
答案 0 :(得分:1)
我可以说,你要求两件完全相互矛盾的事情。
将DesignerSerializationVisibility
属性设置为“隐藏”将阻止设计者保存有关如何设置这些属性的任何信息。将始终使用它们的默认值,因为不存储自定义设置。
因此,当您将GradientBegin
属性更改为红色以外的颜色时,该设置不会保存到表单的设计器文件中。这就是为什么无论发生什么情况,当您编译并运行程序时,GradientBegin
属性将更改回其默认值Color.Red
。 (如果您不确定默认值来自哪里,它是您在声明属性时设置的值:Public Property GradientBegin() As Color = Color.Red
。)
因此,您必须确定您实际需要的行为。您是否希望设计人员保存(序列化)但是您在设计时设置了该属性?如果是这样,您需要从属性声明中删除DesignerSerializationVisibility
属性。否则,如果你想保留该属性,你将不得不坚持该属性的默认值,因为这是你的程序运行时唯一知道的东西。唯一的另一种选择是在您的代码中明确设置GradientBegin
属性,而不是让设计人员去做。这意味着您无法在设计时使用“属性”窗口进行设置,但它允许您保留DesignerSerializationVisibility
属性以及覆盖属性的默认值。
答案 1 :(得分:0)
如果您应用<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
,则不会保存属性网格上该属性的任何更改。保存设计器中所做更改的唯一方法是执行允许将其放入设计器文件中。
如果您不希望设计人员从属性网格中保存该属性,则需要使用代码来设置属性。
如果您的问题是 从代码中设置属性,但它仍然会变回红色,这是因为设计人员在应用属性之前将其序列化为它仍然在设计器文件中。在这种情况下,您需要进入 ClassName .designer.vb文件并删除将颜色设置为红色的剩余行。只要拥有DesignerSerializationVisibility属性,它就不会再出现。