1、在子窗体的OnClosing中写代码,来显示主窗体
2、并非mdi的主窗体就不能设背景图片。

解决方案 »

  1.   

    1、在子窗体的OnClosing中写代码,来显示主窗体
    ---〉OnClosed
      

  2.   

    在Form1的打开Form2的窗体事件中写:
    form2.ShowDialog();//底下直接写上你的打开Form1的代码就行了。他会在Form2关闭才执行Form1的
    form1.Show();
      

  3.   

    1、在子窗体的OnClosing中写代码,来显示主窗体
    ---〉OnClosed
      

  4.   

    当然这是用ShowDialog()的方法,如果用Show()的方法显示Form2,我的方法是在Form2中创建一个公共变量
    public form1 frmOwner;然后在Form1中将this赋给Form2中的该变量。在Form2的关闭事件(Closing那个事件)中写:frmOwner.Show()就可以了。
      

  5.   

    没有什么访不访问,只不过是一个close(),另一show().楼上说的很对。
      

  6.   

    sorry:
    我弄错了,如 birdxxxx(爱上老鼠的猫) 的方法可行。
      

  7.   

    要实现你所要的功能,只需要改写新窗口的构造函数,将主窗口的实例传递给新窗口,然后新窗口关闭时使用改实例显示主窗口即可。例如:
    新窗口构造函数:
    public class Form2 : System.Windows.Forms.Form
    {
    private Form1 frmMain;
    public Form2(Form1 form)
    {
      frmMain = form;
    }
    新窗口关闭时:
    private void Form2_Closed(object sender, System.EventArgs e)
    {
      frmMain.Visible = true;
    }
    }
    打开新窗口:
    private void button1_Click(object sender, System.EventArgs e)
    {
      this.Visible = false;
      Form2 form = new Form2(this);
      form.ShowDialog();
    }
      

  8.   

    谢谢birdxxxx(爱上老鼠的猫)!
    你的解答:
    在Form1的打开Form2的窗体事件中写:
    form2.ShowDialog();//底下直接写上你的打开Form1的代码就行了。他会在Form2关闭才执行Form1的
    form1.Show();
    有效,我再问一个问题。如果我用Show方法,但我要打开多个窗口,即每个LinkLabel打开一个窗口,但同一个窗口只打开一个,不允许重复,这种情况下主窗口是一直显示的。
    我试过类似Form1 theForm1 = new Form1(),一开始就声明了theForm1,当要打开theForm1的时候判断theForm1是不是null,但发现theForm1打开后再关闭以后theForm1就不再是null了,请问该怎么办呢?
      

  9.   

    birdxxxx(爱上老鼠的猫)的回答最为简洁有效,我再Up一下第二个问题。
      

  10.   

    最简单的方法你可以销毁该对象,其在Close后不会立刻把该对象销毁。
    用theForm1.Dispose();
    这样取到的theForm1才是null
      

  11.   

    接收每一个实例的事件,创建窗口实例时添加事件
    form1.Closed+=new eventhandle(this.form_Closed);
    form2.Closed+=new eventhandle(this.form_Closed);

    在事件里处理
    form_Closed(sender, e)
    {
    if (sender is form1) //form1关闭 处理
    if (sender is form2) //form2关闭 处理

    }
      

  12.   

    Dispose()我一开始也试过了,结果是一样的啊。
      

  13.   

    好,我试试 jimh(jimmy)的方法。
      

  14.   

    更正,使用visiblechange事件更符合你的需求
      

  15.   

    jimh(jimmy) 的方法是有效的。我目前采用的处理就是这样的。使用Degelate来做。
    不过这部分我到现在都无法深入理解,只有浅显的认识。
      

  16.   

    Dispose后将theForm1赋值为null就是了
      

  17.   

    可否判断一下是否有子窗口是TRUE,有则隐藏主窗口,否则显示呢
      

  18.   

    private void lklbMonitor_Click(object sender, System.EventArgs e)
    {
    theMonitorForm = new Operation();
    theMonitorForm.GetGuid = this.userguid;
    theMonitorForm.DisplayUserInfo();
    theMonitorForm.VisibleChanged += new EventHandler(this.VisibleChanged);
    theMonitorForm.Show();
    // this.Hide();
    // theMonitorForm.ShowDialog();
    // this.Show();
    } private void frmMain_VisibleChanged(object sender, System.EventArgs e)
    {
    if(sender == theMonitorForm)
    {
    theMonitorForm = null ;
    }
    }
    错误信息:
    事件“System.Windows.Forms.Control.VisibleChanged”只能出现在 += 或 -= 的左边
      

  19.   

    To losthold(呵呵),这样是不行的。
      

  20.   

    To  jimh(jimmy) ,我不太明白啊:(
      

  21.   

    用ShowDialog()方法,向birdxxxx(爱上老鼠的猫)说的那样。
      

  22.   

    theForm1关闭后你判断的是一个对象的实例,在你关闭的时候垃圾收集器并不一定立即收集这个没有用的对象,虽然它已经是不可达的对象,它还是要等待到垃圾收集器开始收集时才会释放(如果这个窗体是0代的话)。所以,我有个建议,不知能不能满足你的要求:  新建一个位于主窗体线程的Hashtable,当你new新的窗口出现时,保存到Hashtable里,关闭时从Hashtable里移出。
      至于怎么样在子窗体中使用主窗体,你只要将主窗体的引用传递给子窗体就可以了,这个可以在子窗体的构造函数里完成
      

  23.   

    设一个公有属性或变量(多窗体间传值最好是静态的),如:
    bool IsOpen=false;//窗体关闭在载入事件中将它设为ture就是打开了,关闭事件中设为false就是关闭了。
    你在程序的任何地方判断这个值就行了。
      

  24.   

    关键是不知道在窗口之间怎么访问啊,我打开一个窗口总要实例化吧,这个被打开后的窗口怎么返回去访问原来那个母窗口呢?这个时候它们已经没有什么关联了啊。难道在被打开的子窗口里再实例化一个母窗口吗?就算是这样也不行啊。我感觉你们不是太明白我的意思。昨天回复我的那两个人就知道我的意思了,可他们后来不来了,555!请看我的问题描述:主窗口(一个普通的窗口,即IsMdiContainer为false),点击它的一个LinkLabel打开一个窗口,(用Show或ShowDialog方法),然后把主窗口隐藏,当打开的窗口被关闭后,主窗口又显示出来。
    问题:怎么知道打开的窗口什么时候被关闭呢?注:本来想把主窗口的IsMdiContainer设成true,结果发现如果设成true窗口就不能用背景图片了,而且主窗口的大小不能太大,不能全屏,不能改变大小(为了美观),但子窗口却是需要全屏的,所以把主窗口的IsMdiContainer设成true感觉不太好。问题已经解决,答案如下:谢谢birdxxxx(爱上老鼠的猫)!
    你的解答:
    在Form1的打开Form2的窗体事件中写:
    form2.ShowDialog();//底下直接写上你的打开Form1的代码就行了。他会在Form2关闭才执行Form1的
    form1.Show();
    有效,我再问一个问题。
    请注意,这才是我现在问的问题!
    Begin---------------------------------------------------------------------------------
    如果我用Show方法,但我要打开多个窗口,即每个LinkLabel打开一个窗口,但同一个窗口只打开一个,不允许重复,这种情况下主窗口是一直显示的。
    我试过类似Form1 theForm1 = new Form1(),一开始就声明了theForm1,当要打开theForm1的时候判断theForm1是不是null,但发现theForm1打开后再关闭以后theForm1就不再是null了,请问该怎么办呢?
    End-----------------------------------------------------------------------------------
      

  25.   

    你可以把每个子窗口的关闭都该成隐藏,下次主窗口再打开这个子窗口的时候就直接show()。
    也就是说在主窗口打开子窗口的时候,如果子窗口式null 就new(),如果不是null,就show()。
    同时在子窗口closing事件中, e.cancel=true; this.hide();