使Visual Studio设计器忽略公共属性
我有一个带有公共属性的UserControl,使用以下属性:
[Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
我尝试删除所有者表单,在Visual Studio 2010中重新创建一个新表单,并将此UserControl添加到表单。 它不断在Designer文件中添加如下行:
this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty")));
这会导致我的应用程序崩溃,因为此属性不是由序列化创建的。
仅在设计时读取属性将阻止它被序列化到resx文件中。 奇怪的是,如果MyType碰巧是一个集合,设计者会忽略只读,你仍然可以在设计时设置属性,即使该属性没有写入resx,所以最好使该属性也不可浏览。
[ReadOnly(true)] [Browsable(false)] public MyType MyProperty { get { return _MyProperty; } set { _MyProperty = value; } }
使用[DesignerSerializationVisibilityAttribute ( Visibility = Hidden )]
MSDN文章
尝试使用具有属性的访问器方法的私有字段以及[field:NonSerialized]属性:
[field: NonSerialized] private MyType _MyProperty; [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public MyType MyProperty { get { return _MyProperty; } set { _MyProperty = value; } }
我没有找到真正的解决方案,而是一种解决方法……
我不得不进入Form.resx文件并找到它反序列化到我的公共属性中的数据/值键对。 我手动删除了XML对内容,然后我就能运行该应用程序了。
这使我的应用程序可以无错误地构建和运行。 我尝试的其他所有内容(包括删除UserControl的容器表单并重复创建它)都不起作用。
上述就是C#学习教程:使Visual Studio设计器忽略公共属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020948.html