如题,困扰我很久的问题,比如我在MDI的子窗体中做一个按钮,运行后点这个按钮后"父窗体"重新加载一次,注:在操作过程中不打开关闭窗口,就像网页中的刷新整页一样,这个功能怎么实现?用this.Refresh();试过了不管用.貌似只是刷新了窗体中的控件,关没有达到窗体重新加载的目地,有没有其他办法?

解决方案 »

  1.   

    所谓的重新加载应是指加载你所指定的所有内容,而不应只是让窗口重新绘制,所以你应该写一个方法来加载你的所有设置,每当窗体Load的时候或需要加载的都调用这个方法.调用的时候先清空原来的设置(比如原来加载的控件或窗体)再加新的内容.
      

  2.   

    你要是重新绘制吧?试试下面函数
    this.Invalidate()
    this.InvokePaint()
    如果要求像网页那样刷新一次全部对像还原为默认值
    this.Controls.Clear();  //删除所有控件
    this.InitializeComponent();//InitializeComponent().net自动为你准备的
    this.OnLoad(e);  //调用一下onload 可产生一次load事件
      

  3.   

    举个例子比如我现在写一个用户登陆和退出登陆,父窗体中的代码如下:
    public static bool session=false;
    public Main()
            {
               if(session==false){
                   
                  //在没有登陆时默认显示的"子窗体form1"
                  
                  form1 fm1=new form1;
                  fm1.Mdiparent=this();
                  fm1.show();            }elseif(session==true){
                  
                  form2 fm2=new form2;
                  fm2.Mdiparent=this();
                  fm2.show();
                  //当session为true时登陆成功.这里显示登陆成功后的内容
                }
             }private void button1_Click(object sender, EventArgs e)
            {
               //这里是退出登陆的按钮CLICK事件代码.
               session=false;
               messagebox.show("已经退出了登陆,需要再次显示子窗体form1.")
               //问题就是这,退出登陆后把session的值改写成了false,父窗体中应该继续显示form1,而实际却还是显示的form2,怎么解决?      
          
            }