问题1:c#中显示MDI子窗体的方法是把mainform的ismdicontainer=true;再在要显示子窗体的地方加入childform child=new 
childform;child.mdiparent=this;child.show();可是我在mainform中放了个menuStrip,在menuStrip的一个菜单项的单击事件中childform child=new childform();child.mdiparent=this;child.show();(mainform的ismdicontainer已经设为true)但是怎么都显示不出来?
问题2:如果这个子窗体显示出来后,怎么在这个MDI子窗体中调用父窗体的方法

解决方案 »

  1.   

    把父窗体的方法定义成public 的就可以在了窗体调用了 
      

  2.   


    问题2:如果这个子窗体显示出来后,怎么在这个MDI子窗体中调用父窗体的方法 
    -----------
    把父窗体的方法定义成public 
      

  3.   

    第一个问题,我在我这里试了一下,没有出现你说的那种情况,看看是不是你的FORM的属性设置了什么,单从代码来看,看不出什么问题。
    第二个问题,可以把你父窗体的方法设为Public的,或是用委托。建议公用的方法放在单独的一个类里面。
      

  4.   

     父窗体的方法设置成public后这样调 ?
     this.MdiParent.那个方法
    还是这样调?new mainform().那个方法
      

  5.   

    你的方法是静态的么?如果是的话,才能直接用类名.方法名来调用,否则你要先实例化,再调用
    其实一个Form就是一个类
      

  6.   


    你看清楚啊,我什么时候用类名调来?前面的new你没看到,不懂就别瞎说
      

  7.   

    在 子窗体里定义一个属性 mainform
    new子窗体时,mainform=this;这样就可以在子窗体中用mainform调主窗体了。
      

  8.   

    使用 new mainform() 肯定不行 这样会新产生一个主窗体的实例
      

  9.   

    问题2:如果这个子窗体显示出来后,怎么在这个MDI子窗体中调用父窗体的方法 
    在需要调用父方法的地方new一个父对象。通过父对象来调用父的方法;你想一想。其实就是2个类,一个类调用另一个类的方法。
      

  10.   

    你必须把主窗体的实例(不是类,new一个会产生一个新的实例,不是当前使用的)传给新生成的子窗体的实例。这样就可以直接在子窗体中调用主窗体公开的方法和属性
      

  11.   

    主窗体定义
    private static MainForm mainForm;
    public static MDIForm
    {
        get
           { 
             return mainForm;
           }
    }public MainFrom()
    {
                InitializeComponent();
                mainForm= this;
    }子窗体调用MainForm.MDIForm.方法