设置父窗体时候,这里面的this能不能用别的的替换我,其难道不是代表当前类吗,我用当前类名代换都没有作用,请指点!
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            frmBase fbase1 = new frmBase();
            fbase1.MdiParent =
            frmBase.strLabel = toolStripMenuItem2.Text.ToString().Trim();
            frmBase.strForm = toolStripMenuItem2.Text.ToString() + "窗体";
           
            toolStripMenuItem2.Enabled = false;
            fbase1.Show(this);                        //this代表当前窗体,传递当前窗体
            
        }
还请各位给个解释啊

解决方案 »

  1.   

    this是指向自身的指针,类名是类名,不是实例名,搞清楚
      

  2.   

    那就是说,要先实例化一个喽,比如 frmMain frm=new frmMain();
                                     frmbase fbase=new frmbase();
                                     fbase.MdiParent=frm;
    可行吗?
    两位高手
      

  3.   


    frmBase fbase1 = new frmBase();
    fbase1.Parent = this; // 这样?
      

  4.   

    this是指向自身的指针,类名不是实例名
      

  5.   

    我就是不想要这个this,因为如果这里设置this,影响我下面的应用,有没有把this去掉或者换掉的好办法呢
      

  6.   

    这么说吧,有没有不用this,但是实现子窗体设定的呢
      

  7.   


    从语法上完全可以
    但是你运行后会发现,完全不是你要的效果,父窗体中不会有fbase子窗体
    原因就是fbase.MdiParent=frm; 局部变量,而你在Program.Main中运行的Form却并不是frm,frm不会show
      

  8.   

    除非你到后面把frm.Show()出来,但那样会出来两个主窗口,那是你要的吗?
      

  9.   

    程序运行Form1就会显示出来,从Form1中的菜单打开各个Form,这些被打开的Form是放在Form1的区域中,Form1一直是显示的,目的就是这样的
      

  10.   

    我试验了:
            private void toolStripMenuItem2_Click(object sender, EventArgs e)
            {
                frmBase fbase1 = new frmBase();
                frmBase.strLabel = toolStripMenuItem2.Text.ToString().Trim();
                frmBase.strForm = toolStripMenuItem2.Text.ToString() + "窗体";
                frmMain frm = new frmMain();
                fbase1.MdiParent = frm;

               
                toolStripMenuItem2.Enabled = false;
                fbase1.Show(this);                        //this代表当前窗体,传递当前窗体
            }
    不会出现窗口,弹出这样错误:非顶级窗体不能显示为模式对话框。在调用 Show 之前应从所有父窗体中移除该窗体。
      

  11.   

    错误很明显
    fbase1.MdiParent = frm; 表明fbase1是一个MDI子窗体
    显示它就必须先把父窗体frm.show出来,但是这样就会显示两个主窗体了。。
    原因就是fbase1.MdiParent设置的实例并不是当前显示的(也就是this)
      

  12.   

    楼主是要把其他的问题怪罪到 this 的身上吗?是不是太冤了啊
      

  13.   

    好吧,能力不够,我不这样处理了,现在我在frmMain的事件中:
              private void toolStripMenuItem2_Click(object sender, EventArgs e)
            {
                frmBase fbase1 = new frmBase();
                fbase1.MdiParent=this;
                toolStripMenuItem2.Enabled = false;
                //fbase1.Show(this);    原来是用这             
            }
    设置子窗体。
    2、我现在通过子窗体的formclosed事件来改frmMain的toolStripMenuItem2.Enabled=true。
       怎么办呢?
      (如果在FrmMain中用           
                 toolStripMenuItem2.Enabled = false;
               fbase1.Show(this);    
       在frmbase中
            frmMain fmain = (frmMain)this.Owner;
           fmain.toolStripMenuItem2.Enabled=true;
       这种方法可用,但是不能和设置子窗体一起用)
    3、我在FrmMain中
            public bool toolstripmenu2value
            {
                get
                {
                    return toolStripMenuItem2.Enabled;
                }
                set
                {
                    toolStripMenuItem2.Enabled = value;
                }
            }
    来获取属性,
      在frmbase中修改,最后还是没有是toolstripmenu2变为黑色求指点
      

  14.   

    为什么 this会影响你下面的应用呢?