【问题标题】:How do I make an object's variable name editable in the designer?如何在设计器中使对象的变量名可编辑?
【发布时间】:2009-10-26 14:13:23
【问题描述】:

我编写了一个自定义控件来模仿表格标题的外观。它绘制的列由具有 Text string 属性和 Width int 属性的对象集合给出。两者都添加了BrowsableCategoryDefaultValueDescription 属性。在设计器中,集合是可编辑的,用户可以像设置控件一样设置文本和宽度,并且像我希望的那样尊重属性。但是,用户不能编辑变量的名称;生成的代码如下所示:

HeaderMimicColumn headerMimicColumn1 = new HeaderMimicColumn();
HeaderMimicColumn headerMimicColumn2 = new HeaderMimicColumn();
HeaderMimicColumn headerMimicColumn3 = new HeaderMimicColumn();
...

是否可以让用户在设计器中指定用于列的变量的名称?如果有,怎么做?

编辑:为了清楚起见,HeaderMimicColumn 不是从System.Windows.Forms.Control 派生的,它只是一个普通类,具有这两个属性和一对在它们更改时触发的事件。

我可能还应该解释一下,该集合的 DesignerSerializationVisibility 设置为 Contents

【问题讨论】:

    标签: c# .net visual-studio winforms designer


    【解决方案1】:

    当非组件对象是通过DesignerSerializationVisibility.Contents 机制持久化的集合的一部分时,该集合中的每个对象都没有单独的标识。它只是父集合的一部分。因此,您不能设置它们的名称,因为它们实际上并不作为单独的对象存在。

    如果您希望您的 HeaderMimicColumn 成为您的集合的一部分并且可单独寻址(如 ListView 中的列),您至少必须从 System.ComponentModel.Component. 派生它们,然后处理将带来的其他问题:)

    【讨论】:

    • 太好了,谢谢。作为参考,为了获得我想要的行为,我还需要将 [DesignTimeVisible(false)] 和 [ToolboxItem(false)] 添加到类中。
    【解决方案2】:

    用户应该已经能够通过执行以下操作来做到这一点

    1. 在设计器中按 F4(打开属性窗口)
    2. 在组合框下拉菜单中选择 headerMimicColumn1
    3. 更改名称字段

    【讨论】:

    • 标题模拟列没有显示在组合框中 - 可能是因为它们不是从 System.Windows.Forms.Control 派生的?
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多