小弟刚刚开学习C#,在C#入门经典中 MDI这一小节中,第一个MDI示例程序的问题。
我按照书上一步步做,但结果还是出错。困惑许久了~~~跪求高手指点!!!
这个程序就是在一个主窗体上显示一个子窗体:
//主窗体form1.cs
namespace MdiBasic
{
public partial class frmContainer : Form
{
public frmContainer()
{
InitializeComponent();
MdiBasic.frmChild child = new MdiBasic.frmChild(this);
child.Show();
}
}
}
*********************
//子窗体frmChild.cs
namespace MdiBasic
{
public partial class frmChild : Form
{
public frmChild()
{
InitializeComponent(); this.MdiParent = Parent; //将子窗体注册到容器中
}
}
}错误 1 “frmChild”方法没有采用“1”个参数的重载 D:\vs205.net\progject\MdiBasic\MdiBasic\Form1.cs 16 39 MdiBasic错误 2 无法将类型“System.Windows.Forms.Control”隐式转换为“System.Windows.Forms.Form”。存在一个显式转换(是否缺少强制转换?) D:\vs205.net\progject\MdiBasic\MdiBasic\frmChild.cs 16 30 MdiBasic
我按照书上一步步做,但结果还是出错。困惑许久了~~~跪求高手指点!!!
这个程序就是在一个主窗体上显示一个子窗体:
//主窗体form1.cs
namespace MdiBasic
{
public partial class frmContainer : Form
{
public frmContainer()
{
InitializeComponent();
MdiBasic.frmChild child = new MdiBasic.frmChild(this);
child.Show();
}
}
}
*********************
//子窗体frmChild.cs
namespace MdiBasic
{
public partial class frmChild : Form
{
public frmChild()
{
InitializeComponent(); this.MdiParent = Parent; //将子窗体注册到容器中
}
}
}错误 1 “frmChild”方法没有采用“1”个参数的重载 D:\vs205.net\progject\MdiBasic\MdiBasic\Form1.cs 16 39 MdiBasic错误 2 无法将类型“System.Windows.Forms.Control”隐式转换为“System.Windows.Forms.Form”。存在一个显式转换(是否缺少强制转换?) D:\vs205.net\progject\MdiBasic\MdiBasic\frmChild.cs 16 30 MdiBasic
构造函数中Parent哪来的?
主窗口调用的时候也是按带参创建的。
第一frmChild 没有带有一个参数的构造参数,所以你不能在上面这样实例化它
MdiBasic.frmChild child = new MdiBasic.frmChild(this); 第二 如果你想将窗体嵌套在另一个窗体,请让它继承Control而不是Form
看你的构造函数。没有参数。而你给它传了个this。所以出错。你可以给它加个参数public frmChild(Form parent)然后。你在 this.MdiParent = Parent; 这里把Parent改成你传进来的参数。原理 1.你定义的类的构造函数没有参数。而你实例化它的时候给它传了参数。所以它会报你的第一个错误,需要注意以后写的时候实例化时NEW后面的括号里的参数要和定义的类的参数个数和类型统一。否则会报错。2.你在this.MdiParent = Parent; 中给它Parent这样一个东西。Parent的意思指是你的这个类的父类也就是你的子窗体的父窗体,而这时候你的这个类继承的是FORM。所以他会报你的第二个错。
正如楼上所述构造函数没有参数而在实例化的时候却传了参数,当然出错了嘿嘿惭愧 现添加参数 public frmChild(MdiBasic.frmContainer parent)
问题解决;
另外我贴的代码中的Parent 应该是parant这个参数 而不是Control Control.Parent 获取或设置控件的父容器!
问题解决 马上散分!
谢谢!谢谢!!!!!
public class frmContainer : Form
{
public frmContainer()
: base()
{ frmChild child = new frmChild(this);
child.Show();
}
} public partial class frmChild : Form
{
public frmChild(Form form)
{ this.MdiParent = form; //将子窗体注册到容器中
}
}
一个问题又牵扯出了别的问题看来我结贴早了 呵呵
在frmContainer类中调用继承类FORM的构造函数。