2010-02-10 102 views
0

什么是最好的方式来避免(或控制)设计师在.NET中的沉重的自定义属性的初始化?有时候,最初设置某个属性时最重要的是不要在初始设置时执行该设置。自定义属性默认值和.NET设计器

在下面的想象的例子中,我想实现像UpdateSetting这样的属性的灵活性,但不是每次启动应用程序时都将数据库设置为零的不便之处。我能想到的是另一个解锁国旗的财产。

public class A : UserControl 
{ 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 

... 

    public void InitializeComponent() 
    { 
    A a = new A(); 
    a.UpdateSetting = 0; // Causes database write 
    } 
} 

回答

1

假设你控制组件(A类),申请DesignerSerializationVisibilityAttribute到昂贵的财产,与隐藏选项说“不产生该物业的二传手”:

public class A : UserControl 
{ 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 
} 

(编辑:在重新阅读时,我不确定是要防止设计者初始化,还是使其成为可选项,或者允许通过设计人员完成初始化,但推迟初始化的实际执行,仅解决这些情况中的第一个)

+0

是的,我正在拍摄可选,但回想起来,这可能也适用。 – Nicholas 2010-02-10 04:49:50

1
[Default(0)] 
public int UpdateSetting 
{ 
    get { /*...*/} 
    set {/* Write to database or some such thing... */ } 
} 

这将使它显示出设计者最初0(并显示在大胆,如果你改变它后,把它设回0),而在每一个代码实际进行任何设置。

+2

http://stackoverflow.com/questions/2290746/what-namespace-is-the-default-attribute-for-properties-on-usercontr ols/2290768#2290768 我相信你有错误的属性名称。 – 2010-02-18 17:38:51