小弟刚刚开学习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

解决方案 »

  1.   

    你的子窗体的构造函数忘记写参数了吧。
    构造函数中Parent哪来的?
    主窗口调用的时候也是按带参创建的。
      

  2.   

    两个问题:
    第一frmChild 没有带有一个参数的构造参数,所以你不能在上面这样实例化它
    MdiBasic.frmChild child = new MdiBasic.frmChild(this); 第二 如果你想将窗体嵌套在另一个窗体,请让它继承Control而不是Form
      

  3.   

    对了 书上的是parent  改后错误提示没有parent 这个参数
      

  4.   

    恩 好的 谢谢啦! 真是遇见好人啦!heihei
      

  5.   

    public frmChild() 
    看你的构造函数。没有参数。而你给它传了个this。所以出错。你可以给它加个参数public frmChild(Form parent)然后。你在 this.MdiParent = Parent; 这里把Parent改成你传进来的参数。原理 1.你定义的类的构造函数没有参数。而你实例化它的时候给它传了参数。所以它会报你的第一个错误,需要注意以后写的时候实例化时NEW后面的括号里的参数要和定义的类的参数个数和类型统一。否则会报错。2.你在this.MdiParent = Parent; 中给它Parent这样一个东西。Parent的意思指是你的这个类的父类也就是你的子窗体的父窗体,而这时候你的这个类继承的是FORM。所以他会报你的第二个错。
      

  6.   

    嗨 真是晕死!刚接触C#没几天,真是耽误大家宝贵的时间了。问题解决了
    正如楼上所述构造函数没有参数而在实例化的时候却传了参数,当然出错了嘿嘿惭愧 现添加参数  public frmChild(MdiBasic.frmContainer parent) 
     问题解决;
    另外我贴的代码中的Parent 应该是parant这个参数 而不是Control Control.Parent 获取或设置控件的父容器!
    问题解决 马上散分!
    谢谢!谢谢!!!!!
      

  7.   

    兄台,你这学的不扎实啊,我把代码给你改了下
     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; //将子窗体注册到容器中 
            }
        } 
      

  8.   

    谢谢楼上! 这句public frmContainer()  : base() 作何解释?有这必要吗? 在线等指点~~
     一个问题又牵扯出了别的问题看来我结贴早了 呵呵
                
      

  9.   

    public frmContainer()  : base()
    在frmContainer类中调用继承类FORM的构造函数。