我已将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能够很好地生成它以获得具有额外行为的图像完美视图,为什么不能/不会将代码生成到实际代码文件中?
答案 0 :(得分:3)
首先,您需要从Component继承TitleButton类,以便设计人员知道它是可以通过设计器生成的代码创建的组件。然后,您需要指示设计器代码生成器处理集合的内容而不是集合实例本身。所以试试以下......
public class TitleButton : Component
{
// ...
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TitleButton> TitleButtons
{
// ...
}