按一个按钮,显示窗体,我一般都是这么写的
            Form1 f = new Form1(user_msg[0],user_msg[2]);
            f.Show();这样带着参数打开窗体是解决了
现在有如下两个问题
1.如何让新打开的窗体在关闭的时候,触发主窗体的Load()事件
2.如何设置只能打开一个这样的窗体,比如我的按钮是修改密码,我点这个按钮,只能出现一个修改密码的界面。

解决方案 »

  1.   

    1.子窗体关闭后就调用自己写的方法实现你想要的功能2.
    if(Application.OpenForm2["f"]!=null)
    {
    Form1 f = new Form1(user_msg[0],user_msg[2]);}
      

  2.   

    Form1 f;
    if(Application.OpenForm2["f"]==null)
    {
     f= new Form1(user_msg[0],user_msg[2]);
     f.Show();
    }else
    {
    f.BringToFront();
    }
      

  3.   


    else
    {
    f.BringToFront();
    }这里报错 f是未赋值的,要是ELSE里面加上f = new from2 不行的吧
      

  4.   


    //判断某个窗体是否已经打开
                if (Application.OpenForms["Form1"] == null)
                {
                    Form1 fm1 = new Form1();
                    fm1.Show();
                }
      

  5.   

    Form1 fm1=null;
                //判断某个窗体是否已经打开
                if (Application.OpenForms["Form1"] == null)
                {
                    fm1= new Form1();
                    fm1.Show();
                }
                else
                {
                    fm1.BringToFront();
                }
      

  6.   

     private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                Form f = Application.OpenForms[f2.Name];
                if (f == null)
                {
                    f = new Form2();
                    f.Show();
                }
                else
                {
                    f.BringToFront();
                }
                
                
            }
      

  7.   

    load事件加载的时候才会触发的
    你想实现什么功能?
      

  8.   

    Form1 f = new Form1(user_msg[0],user_msg[2],MainForm mainForm);
                f.Show();
    把主界面也作为一个参数传过去,然后在 Form1窗口关闭事件中调用mainForm中方法
      

  9.   

    用事件呗!!
    Form1 中申明一个事件public event EventHandler<EventArgs> OnClose;然后在关闭按钮的单击事件里这么写
    if(OnClose != null)
    {
      OnClose(this,e);
    }------------------------------------------看你自己调用Form1的代码
           Form1 f = new Form1(user_msg[0],user_msg[2]);
          f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
          f.Show();---------------------------------------------
        void frm_OnClose(object sender, EventArgs e)
        {
          Load(null,null);
          //你的意思是在执行Load事件,就是要在一次用里面的代码了,那么最好用个方法去装这些代码,直接调用方法好些
        }
      

  10.   

    我不会调用 父窗体的load事件
    父窗体可以定义一个公共属性,在子窗体关闭的时候对这个属性赋值
      

  11.   


    public delegate void mydelegate(string text);//定义一个委托 
            public static  event mydelegate myevent;//定义上诉委托类型的事件 
            private void button1_Click(object sender, EventArgs e)
            {
             
                if (myevent != null)
                {
                    myevent(textBox1.Text);
                }         }
      //相当于密码窗体传值给父窗体。//这里是主窗体
     private void Form1_Load(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2();
                Form2.myevent+=new Form2.mydelegate(fm2_myevent);
                fm2.Show(); 
            }
            void fm2_myevent(string str)
            {
                this.textBox1.Text = str;
            }其实就是窗体间的传值.你参考一下
      

  12.   

    不行啊,
     f.OnClose += EventHandler <EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
    From里面不包含OnClose 
      

  13.   

    public event EventHandler <EventArgs> OnClose; 
    这个在Form1中写了没,写成全局把你写的代码拿出来看下......
      

  14.   


       public partial class Form2 : Form
        {        //密码窗体
           
            public Form2()
            {
                InitializeComponent();
            }
            public delegate void mydelegate();//定义一个委托 
            public static  event mydelegate myevent;//定义上诉委托类型的事件 
            private void button1_Click(object sender, EventArgs e)
            {
             
                if (myevent != null)
                {
                    myevent();
                }         }
     private void button2_Click(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2();
                Form2.myevent += new Form2.mydelegate(fm2_myevent);
                fm2.Show(); 
                
            }        private void Form1_Load(object sender, EventArgs e)
            {
                MessageBox.Show("你好");
            }
            void fm2_myevent()
            {
                Form1_Load(null,null);
            }你自己试一下,很简单的调用Form1_Load
      

  15.   

    我应该知道是怎么回事找不了,你用用了8楼的代码,Form f = Application.OpenForms[f2.Name];
    看清楚 这个f 是Form 不是Form1 的实例,所以f.OnClose....是点不出来的改成这个应该就可以了:Form1 f = Application.OpenForms[f2.Name];
      

  16.   

    From1:
      public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                Form1 f = new Form1();
                f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来 
                f.Show(); 
            }        void frm_OnClose(object sender, EventArgs e)
            {
                Load22();
            }
            public void Load22()
            {
                MessageBox.Show("333");
            }    }From2:
     public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        public event EventHandler<EventArgs> OnClose;        private void button1_Click(object sender, EventArgs e)
            {
                if (OnClose != null)
                {
                    OnClose(this, e);
                }         }     }
      

  17.   

            Form1 f = new Form1();
                f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来 
                f.Show(); 
    ------------------自己看一下 是怎么调用的
    Form1中new Form1改成Form2
      

  18.   

     Form1 f = new Form1(user_msg[0],user_msg[2]);
                f.ShowDialog();
    并用委托调用事件
      

  19.   


    恩 这个的确是但是这个错误
    f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
    这句话有错误 
     System.EventHandler<System.EventArgs>是类型,但是此处当做变量来用
      

  20.   


    吐血了彻底无语了,彻底服了,那就不知道-----这个是事件最简单的应用了,是你自己什么地方出了问题吧,用的是VS2005或者以上版本吗        Form2 f = new Form2(); 
           f.OnClose += EventHandler <EventArgs>(frm_OnClose); 
            f.Show(); 
      

  21.   


    我也不知道啊 我用的是VS2005
    我是新建的一个test项目,里面就两个窗体 其他的都没有。
    你前面定义的是
    public event EventHandler <EventArgs> OnClose;
    这里是这么用的
    f.OnClose += EventHandler <EventArgs>(frm_OnClose);
      

  22.   

    singleton 模式
    f.Showdialog();