Jef*_*eff 12 c# user-controls visual-studio-2008 winforms
我有一个具有一些公共属性的用户控件,一个是我设置[Browseable(false)]的对象.当我在Visual Studio的设计器中添加此控件时,生成的代码将此对象设置为null.
public class Foo : System.Windows.Forms.UserControl
{
[Browsable(false)]
public object Bar { get; set; }
[Browsable(true)]
public bool IsSomething { get; set; }
...
}
private void InitializeComponent()
{
...
this.foo = new Foo();
this.foo.IsSomething = false;
this.foo.Bar = null;
...
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么Visual Studio会这样做,我很好奇是否有一种方法来标记它,以便它不设置它.我通过将对象设置为构造函数中的某些内容来发现这一点,只是为了观察控制器的父对象将其设置为null.
Dav*_*son 20
这里有几个选择.首先,BrowsableAttribute仅确定属性是否显示在属性网格中.要防止属性完全序列化,请使用DesignerSerializationVisibilityAttribute:
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public object Bar { get; set; }
Run Code Online (Sandbox Code Playgroud)
其次,如果您希望序列化属性,但仅当用户实际更改了值时,请使用DefaultValueAttribute:
[Browsable(true)]
[DefaultValue(false)]
public bool IsSomething { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将导致属性仅在与其默认值不同时才被序列化.这也有其他积极的副作用
有更多先进的技术可以控制与设计师的交互(Google"ShouldSerialize"),但这些属性应该可以帮助你完成大部分工作.
| 归档时间: |
|
| 查看次数: |
11614 次 |
| 最近记录: |