在同一个线程中,存在一个主窗体A,和N个子窗体A1,A2,A3,....写一个函数,使用户能够在任何窗体单击一个按钮都能进入A1这个窗体。

解决方案 »

  1.   

    我觉得需求描述不太清楚,最简单的是A1里做个静态方法,作用就是show A1(单件模式)
      

  2.   

    如果是MDI的话:
    子窗体命名:A1,A2,A3....
    在主窗体定义一个GetChildForm()的方法,返回A1窗体,记得关键字用public,然后再在子窗体的button_Click中调用该方法,并且把返回的form设为当前活动窗体。
      

  3.   

    楼主在这个线程中new一个窗体的实例,show出来不就进去了?
      

  4.   

    我在主窗体已经把每一个子窗体都new过了,然后通过主窗体的属性来互相访问。
    现在的问题是,如果再把A1窗体new的话,就是重新打开了一个窗体,就会存在两个窗体了。
      

  5.   


    不要重新实例化,只要把 A1.Active=true;A1.show()就应该可以了。
      

  6.   

    记错了,应该是A1.Focus();好像没有Active这个属性。
      

  7.   

    按楼上的还是不行的,因为比如说我是在A3这个子窗体点按钮,那么结果是A1和A3同时存在,因为你没有把A3关掉。
    而且也不能用this.visibel=false;因为我要写得是一个函数,然后让botton_click直接调用这个函数,函数里面不能包含this。
      

  8.   

    在需要a1的窗体中。弄个a的引用就ok了
      

  9.   

    我换一种提问方式,我在一个窗体内用this.visibel=false;能够把当前窗体设为不显示,
    但我要写一个函数,使任意一个窗体调用这个函数的时候都能实现上面的功能。
    而this在函数里是不能用的,我应该怎么在函数里找到当前窗体呢?
      

  10.   

    把你new过的窗体设成全局变量,就不需要每次都New了
      

  11.   

    窗口 frmA frmB frmC在frmA类里
    frmB fb= null;在frmB类里
    frmA frma = new frmA();
    frma.fb = this;
    在窗体A中关闭窗体B
    fb.visibel =false;
      

  12.   

    发段我的代码给你看看有帮助吗?
     foreach (Form Frm in this.MdiChildren)
                {
                    if (Frm.Name == "DB_in")
                    {
                        if (!Frm.Visible)
                        {
                            Frm.WindowState = FormWindowState.Normal;
                            Frm.Activate();
                            Frm.Show();
                            return;
                        }
                        else
                        {
                            Frm.Activate();
                            return;
                        }
                    }            }
      

  13.   

    要关闭当前窗口也简单啊,直接close()就是了,我自己已经测试过了。