通过单击一个按钮显示frm2,代码如下: frm2 frm2 = new frm2();
 frm2.Show();如果不停的单击按钮,也就是不停的执行以上代码,就会生成很多个frm2窗体。1、为什么会出现这么多frm2窗口?
2、请问这些完全相同的frm2之间有什么区别么?如何控制每个独立的frm2窗体?
3、在实际使用中,我们即使多次单机按钮,也应该出现一个frm2窗体就足够了,如何避免多次单击出现多个frm2的现象?谢谢

解决方案 »

  1.   

    如何避免多次单击出现多个frm2的现象?class Test
    {
      frm2 frm2;  void button1_Click(object sender, System.EventArgs e)
      {
        if (frm2 != null) frm2 = new frm2(); 
        frm2.Show();
      }
    }
      

  2.   

    写错了,应该是:
    if (frm2 == null) frm2 = new frm2(); 
      

  3.   

    也可以这样,使按钮单一次后就不能再单击:
      void button1_Click(object sender, System.EventArgs e)
      {
        (sender as Button).Enabled = false;
        frm2 frm2 = new frm2(); 
        frm2.Show();
      }
      

  4.   

    问题1:
    Form2 f2=new Form2();
    这样就创建了一个窗体。其中Form2是窗体类,里面封装了如何构建f2的方法
    相当于f2是Form2类的实例。
    就像string是一个类,可以用string定义无穷多个实例差不多意思(但是Form2是窗体类)。问题2:
    windows会为每个窗体分配一个各不相同的句柄。在C#中是InPtr类型,在C++中是一个长指针。
    你可以在每个FORM2的实例中调用 MessageBox.Show(this.Handle.ToString());方法查看,每个窗体的句柄都是不同的。
    你可以把每个子窗体的句柄存到某个数组里进行管理。问题3:
    要避免出现多个重复的窗体可以用两个方法
    1.用showdialog()方法显示子窗体
    2.在主窗体中用一个static bool变量,在子窗体的load中将变量赋为true。closed是赋为false。主窗体生成子窗体前对此变量检查。这是我学C#至今的理解。如有错误,请后面补充
      

  5.   

    谢谢以上各位的回答现在,我想实现这样的目的:
    就是修改了frm2窗口中的控件内容,然后关闭frm2
    此时再次单机按钮如何显示已经修改了控件内容的那个frm2?
      

  6.   

    7L的问题比较简单,
    我只知道实现的方法:你在关闭Frm2的时候保存下来内容就行了,不保存就不行,
    因为你没叫机器保存下来,不象人可以自己记录。
      

  7.   

    Form2不是有个构造函数的么        public Form2()
            {
                InitializeComponent();
            }
    比如说你改了一个label1.text        public Form_About(string label_Changed)
            {
                InitializeComponent();
                label1.text=label_Changed
            }
    你在构造函数中传入一个值,比如 string label_Changed
    至于你要保存,那么比如你在Form_Main中定义一个Static变量
    然后你在Form2的Closed事件里面对Form_Main的变量赋值,你要显示更新后的Form2只要把这个变量传给Form2的构造函数即可