C#中避免相同MDI子窗口重復(fù)打開的方法

字號:

方法一:
    直接檢測是否已經(jīng)打開此MDI窗體
    // 是否已經(jīng)打開了?(用循環(huán)來判斷)
    foreach (Form childrenForm in this.MdiChildren)
    {
    //檢測是不是當(dāng)前子窗體名稱
    if (childrenForm.Name == "子窗體名稱")
    {
    //是的話就是把他顯示
    childrenForm.Visible = true;
    //并激活該窗體
    childrenForm.Activate();
    return;
    }
    }
    //下面是打開子窗體
    Form1 childrenForm = new Form1();
    childrenForm.MdiParent = this;
    childrenForm.Show();
    childrenForm.WindowState = FormWindowState.Maximized;
    方法二:
    將子窗體設(shè)成單件:
    namespace WindowsFile
    {
    public partial class Form3 : Form
    {
    public Form3()
    {
    InitializeComponent();
    }
    private void Form3_Load(object sender, EventArgs e)
    {
    richTextBox1.LoadFile(".\\test.txt", RichTextBoxStreamType.PlainText);
    }
    private static Form3 childform=null;
    public static Form3 Form3Signleton()
    {
    if (childform == null)
    {
    childform = new Form3();
    }
    return childform;
    }
    private void Form3_FormClosing(object sender, FormClosingEventArgs e)
    {
    try
    {
    this.Dispose(true);
    childform = null;
    }
    catch(Exception e)
    { MessageBox(e.ToString()); }
    }
    方法三:
    這個(gè)沒用過,也是直接判斷
    private static frm_rk frmchild;//定義子窗體
    private void 商品入庫ToolStripMenuItem_Click(object sender, EventArgs e)//按鈕事件
    {
    frm_rk frmchild = GetForm();
    frmchild.Show();
    }
    private frm_rk GetForm()//判斷子窗體狀態(tài),防止重復(fù)顯示
    {
    if (frmchild == null || frmchild.IsDisposed)
    {
    frmchild = new frm_rk();
    frmchild.MdiParent = this;
    }
    return frmchild;
    }