【问题标题】:How do you stop the Designer generating code for public properties on a User Control?如何停止设计器为用户控件上的公共属性生成代码?
【发布时间】:2010-09-06 23:30:57
【问题描述】:

如何阻止设计器自动生成设置用户控件公共属性值的代码?

【问题讨论】:

  • 我想知道设计师对你的属性做鬼的目的是什么......
  • 我在打开设计器时遇到了问题,因为我不小心从我正在使用的旧版本的类库中序列化了一个对象。追踪繁琐:stackoverflow.com/questions/28272552/…

标签: c# winforms


【解决方案1】:

对要对设计器序列化隐藏的属性使用 DesignerSerializationVisibilityAttribute,并将参数设置为 Hidden。

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name
{
    get;
    set;
}

【讨论】:

  • 如果基本表单具有绑定到一个控件的文本属性的公共属性,则非常有用。编辑器希望以继承的形式设置值,因此与本地化混淆。类似于 SO 上的another problem
【解决方案2】:

将以下属性添加到控件中的属性:

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

【讨论】:

    【解决方案3】:

    我正在使用 VS 2013 对 Erik 的回答稍作改动。

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new string Name { 
        get; 
        set; 
    }
    

    【讨论】:

    • 不幸的是,我将该属性命名为“名称”。最好将其命名为不同的名称,因为所有控件都已具有 Name 属性。这就是您必须使用 new 关键字来隐藏基类属性的原因。 :)
    • 是的,自从回答后我自己就犯了这个错误。
    • 正如埃里克本人所提到的这个答案,并没有为实际问题添加任何新内容
    • 不需要反对票,新的是必需的。请正确阅读 Erik 的回复。
    • @peterincumbria 如果您正在使用的类已经具有 name 属性并且您正在尝试编写自己的属性,这只是一个要求。因此,这不会为答案添加任何内容,因为属性是答案而不是新关键字。或者,我可以编写自己的答案,使用 override 关键字而不是 new 覆盖属性。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多