C#root表单继承,更改导致破坏子表单

时间:2010-02-26 11:10:23

标签: c# forms inheritance

您好我设置了一些子表单,所有子表单都继承自根表单,设置了几个按钮和徽标等,然后向下过滤到子节点。 我使用visual studio向导添加从root继承的子表单,它们自动声明为:

    public partial class WelcomeForm : MynetInstaller.rootForm

我现在被要求调整子表单的大小并移动一个按钮,我希望通过简单地更改根表单并允许更改过滤来完成这些操作。

我遇到的两个问题是: 1 /我改变了大小,这根本不影响孩子,初始设置后似乎没有继承大小。

2 /我更改按钮的位置,这会导致所有子窗体断开,显示错误:

To prevent possible data loss before loading the designer, the following errors must be     resolved:   



'child' is not a child control of this parent.     

Instances of this error (1)  

1.   Hide Call Stack 

at System.Windows.Forms.Control.ControlCollection.GetChildIndex(Control child, Boolean     throwException)
at System.Windows.Forms.Control.ControlCollection.SetChildIndexInternal(Control child, Int32 newIndex)
at System.Windows.Forms.Control.ControlCollection.SetChildIndex(Control child, Int32 newIndex)
at   System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.SetChildIndex(Control child, Int32 newIndex)  

如果我按继续它将加载页面,但不会移动按钮,如果我尝试运行它我会收到错误:

this.Controls.SetChildIndex(this.btnNext, 0);

话说:

'child' is not a child control

我注意到当我移动控件时它会停止锁定,但手动更改它无济于事。

2 个答案:

答案 0 :(得分:2)

基本表单的大小继承的,设计人员通常会阻止在派生表单中再次设置大小。但不幸的事情可能发生,子形式可能会被巧妙地改变一次。或者它可能是在与设计基本表格的机器上具有不同视频DPI设置的机器上设计的。

我可以想到只有解决方法,编辑设计器生成的代码。在Solution Explorer窗口中,打开子表单旁边的节点,然后双击Designer.cs文件。展开标记为“Windows窗体设计器生成的代码”的区域,并找到ClientSize属性的分配。删除它。

不知道你的第二个问题是怎么回事,这不是一个正常的问题。看一下操作按钮时设计器生成的代码会发生什么。

答案 1 :(得分:0)

对于“'child'不是子控件”问题,您必须从.designer.cs文件.setChildIndex命令行中删除。