有一个方法,要打开另外一个窗体fr1 但是每次调用的时候,总是要打开好多次。有什么方法只显示最后一次打开的窗体fr1。

解决方案 »

  1.   

    http://topic.csdn.net/u/20081223/01/af5ed0d7-9b1b-4b28-9d20-04ebc313c65f.html
      

  2.   

    form1 frm=new form1();
    frm.showdialog();
      

  3.   

    form已经打开过了,再次触发的时候,就直接ShowWindow等显示出来,而不是重新创建一个新的
      

  4.   

    要写成方法吗?其实都一样的
     public void open(Form fr)
            {
                fr = new Form();
                fr.ShowDialog();
            } private void button1_Click(object sender, EventArgs e)
     {
                Form dr=new Form();
                open(dr);
    }
      

  5.   

    窗体处理我一般这样做的:
    比如需要处理的窗体类是YourForm,那么定义一个YourForm的引用:
    privte YourForm yf = null;
    然后,需要显示这个Form是如下处理:
    if (yf == null)
    {
    yf = new YourForm();
    }
    yf.Visible = true;
    关闭而不注销该对象则:
    if (yf != null)
    {
    yf.Visible = false;
    }
    注销该对象(当然,这个注销的实际过程可能不是想象的那样):
    if (yf != null)
    {
    yf.Dispose();
    yf = null;
    }
    用过Qt-Designer的应该都知道,Qt里面自动生成的窗体处理一般都是这样的。
      

  6.   

    可以用一个静态的窗体类对象,初始化时先检查该对象是否为空,为空的话就New,否则直接调用
    也可以枚举当前所有的窗口对象,查找该对象(可以根据窗口名称属性),如:
    private Form GetForm(string text)
            {
                foreach (Form f in this.MdiChildren)
                {
                    if (f.Text == text)
                    { return f; }
                }
                return null;
            }然后调用的时候用类似下面的代码:
    frmFileDown frm = (frmFileDown)GetForm("归档文件下载");
                if (frm == null) { frm = new frmFileDown(); }
                frm.MdiParent = this;
                frm.WindowState = FormWindowState.Normal;
                frm.TopMost = true;
                frm.Show();
      

  7.   

    如果不想用模式窗体的话,
    可以先声明一个全局的Form1对象form1;
    然后在要打开的窗口事件中:
    if(form1==null)
       form1=new Form1();
    form1.show();
    form1.WindowState = FormWindowState.Normal; 
      

  8.   

    利用单例模式 public partial class Form2 : Form
        {
            private static Form2 form = null;        private Form2()
            {
                InitializeComponent();
            }
            public static Form getForm() 
            {
                if( form==null  )
                {
                    form = new Form2();
                }
                return form;
            }
        }
    然后 form1 里边 只需调用这个getFrom()这个方法就行了
      

  9.   


    bool opened=false;
    foreach(Form f in MdiParent.MdiChildren)
    {
      if(f.Name=="Form1")
      {
        opened=true;f.Show();
        break;
      }
    }
    if(!opened)
    {
      Form1 fm=new Form1;
      fm.Show();
    }
      

  10.   


    Form1 frm=new Form1();
    frm.Tag=false;
    if(!(bool)frm.Tag)
    {
         frm.Show();
         frm.Tag=true;
    }
      

  11.   

    这个问题目可以通过GOF的单例模式public partial class Form1: Form 
        { 
            private static Form1 form;         private Form1()
            {
                InitializeComponent(); 
            } 
            public static Form getForm() 
            { 
                if( form==null ||this.Dispose)
                { 
                    form = new Form1); 
                } 
                return form; 
            } 
        } 然后 form2里边 只需调用这个getFrom()
    Form1 form=Form1.getFrom();