子图形表单在Designer视图中表现不正常(VS 2008)

时间:2008-09-20 14:18:36

标签: c# winforms visual-studio-2008

我已将Form子类化为包含一些额外的功能,这些功能可归结为List<Image>,它显示在表单上的一组预定义位置。我有以下内容:

public class ButtonForm : Form 
{
    public class TitleButton
    {
        public TitleButton() { /* does stuff here */ }
        // there's other stuff too, just thought I should point out there's
        // a default constructor.
    }

    private List<TitleButton> _buttons = new List<TitleButton>();
    public List<TitleButton> TitleButtons
    {
        get { return _buttons; }
        set { _buttons = value; }
    }
    // Other stuff here
}

然后我想要使用的实际表单是ButtonForm的子类而不是Form。这一切都很好,设计师甚至拿起新的财产,并在财产清单上显示。我觉得这太好了!它展示了这个系列,我可以将按钮添加到那里然后我会去。所以我打开了收藏编辑器,添加了所有的对象,并且看到设计师坐在那里是我想要的完美视图。

这是它开始变丑的地方。由于某种原因,Designer拒绝实际生成代码来创建对象并将它们附加到集合中,所以虽然它在设计模式下看起来很棒,但是一旦我编译并运行它,它就会再次消失并且我又回来了一个方块。我完全不知道为什么会发生这种情况;如果Designer能够很好地生成它以获得具有额外行为的图像完美视图,为什么不能/不会将代码生成到实际代码文件中?

1 个答案:

答案 0 :(得分:3)

首先,您需要从Component继承TitleButton类,以便设计人员知道它是可以通过设计器生成的代码创建的组件。然后,您需要指示设计器代码生成器处理集合的内容而不是集合实例本身。所以试试以下......

public class TitleButton : Component
{
   // ... 
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TitleButton> TitleButtons
{
   // ...
}