打开一个窗体前,如何判断已经打开过一个实例了呢?如果打开就不再打开了?
------------------------------------            FrmAddGjj frmAdd = new FrmAddGjj();
            frmAdd.Show();就是如同这样的代码,可以打开任意多个窗体,
但是我想实现,如果打开过了,就不再打开了。只是将刚才的激活就行了。如何实现呢?另外,我如何给窗体的控件传值呢?
我其实是在做一个添加记录的窗体,窗体启动后,在文本框中显示月份,编号,姓名等信息,然后等待用户录入其他信息?关键想实现:1.窗体只打开一次,
2.可以向窗体传值,让窗体启动后,文本框中就有初始化好的信息。

解决方案 »

  1.   

    #region MDI子窗体实例化一次
            /// <summary>
            /// 名称:CheckChildOpenState
            /// 功能:用子窗体的Name进行判断是否已实例化,如果存在则将他激活
            /// </summary>
            /// <param name="MdiForm">容器窗体</param>
            /// <param name="ChildForm">子窗体</param>
            public static void CheckChildOpenState(Form MdiForm, Form ChildForm)
            {
                foreach (Form tempChildForm in MdiForm.MdiChildren)
                {
                    if (tempChildForm.Name == ChildForm.Name.ToString())
                    {
                        if (tempChildForm.WindowState == FormWindowState.Minimized)
                        {
                            tempChildForm.WindowState = FormWindowState.Normal;
                        }
                        tempChildForm.Activate();
                        return;
                    }
                }
                ChildForm.MdiParent = MdiForm;
                ChildForm.Show();
            }
            #endregion
      

  2.   

    问题一:
    点击打开,再点击隐藏,再点击打开......
    问题二:另外,我如何给窗体的控件传值呢?
    FrmAddGjj frmAdd = new FrmAddGjj(int inum);
      frmAdd.Show();修改构造函数将int inum作为参数传给这个窗体的成员就可以用了
      

  3.   

    或是启动窗体之前,检查一下已经打开的窗体。
    例如private void button9_Click(object sender, EventArgs e)
    {
        Form1 singleForm = null;//初始化为空
        foreach (Form item in Application.OpenForms)
        {
            if (item is Form1)
            {
                singleForm = item;
                break;
            }
        }
        if (singleForm == null) singleForm = new Form1();
        singleForm.Show();
    }
      

  4.   

    不是mdi子窗体,就是普通的窗体。不能用单例吧。用单例就不能关闭了。
      

  5.   

    加一个前置private void button9_Click(object sender, EventArgs e)
    {
        Form1 singleForm = null;//初始化为空
        foreach (Form item in Application.OpenForms)
        {
            if (item is Form1)
            {
                singleForm = item as Form1;
                break;
            }
        }
        if (singleForm == null) singleForm = new Form1();
        singleForm.Show();
        singleForm.BringToFront();
    }
      

  6.   


    private static FMessage instance = null;
            //添加一个属性,FMessge是窗体名
            public static FMessage Instance
            {
                set
                {
                }
                get
                {
                    if (instance == null)
                    {
                        new FMessage();
                    }
                    return instance;
                }
            }//在窗体的构造或load事件中
     public FMessage()
            {
                InitializeComponent();
                instance = this;//写上这个
             }
    //窗体关闭事件
    void FMessage_FormClosed(object sender, FormClosedEventArgs e)
            {
                instance = null;
            }//------------------------------
    //调用
    FMessage fmess = FMessage.Instance;//这注意
                fmess.Show();
      

  7.   

    使用全局变量,使用是判断:
    if(frm!=null && !frm.IsDisposed))
    {
        frm.Show();
    }
      

  8.   

    private static FMessage instance = null;
            //添加一个属性,FMessge是窗体名
            public static FMessage Instance
            {
                set
                {
                }
                get
                {
                    if (instance == null)
                    {
                        new FMessage();
                    }
                    return instance;
                }
            }//在窗体的构造或load事件中
     public FMessage()
            {
                InitializeComponent();
                instance = this;//写上这个
             }
    //窗体关闭事件
    void FMessage_FormClosed(object sender, FormClosedEventArgs e)
            {
                instance = null;
            }//------------------------------
    //调用
    FMessage fmess = FMessage.Instance;//这注意
                fmess.Show();