0

MDI 子フォームを開く MDI 親フォームがありますが、別の時間にクリックしても再度開きたくありません。代わりに、既に開いている特定の mdi 子フォームに焦点を合わせたいのですが、メニューストリップをクリックしてこの仕事をしています。私はすでにこれを成功させるために多くのことを試みましたが、常に失敗しました。私のコードは次のとおりです。

これはメソッドです...

private bool CheckMdiClientDuplicates(string WndCls)
{
    Form[] mdichld = this.MdiChildren;
    if (this.MdiChildren.Length == 0)
    {
        return true;
    }
    foreach (Form selfm in mdichld)
    {
        string str = selfm.Name;
        str = str.IndexOf(WndCls).ToString();
        if (str != "-1")
        {
            return true;
        }
    }
    return false;
}

そして、私はこの方法を次の方法で実装しています...

private void myToolStripMenuItem_Click(object sender, EventArgs e)
{
    MyForm f = new MyForm();//MyForm is the form on which i am working
    if (CheckMdiClientDuplicates("MyNamespace.MyForm") == true)
    {
        f.MdiParent = this;
        f.Show();
    }
    else
    {
        f.Activate();
        f.BringToFront();
    }
}
4

2 に答える 2

2

fまだあなたnew MyForm()です、それであなたはそれが何をすることを期待しActivateますか?前面に出したい実際のフォームを取得する必要がありますActivate

MyFormさらに、使用するつもりがない限り、おそらく新しいものを作りたくないでしょう。

于 2012-08-31T11:24:08.847 に答える
0

次のコードを試してください。

これは、最初のフォームが表示されるボタンをクリックしたときです。

private void button1_click(object sender, EventArgs e){
        Form1 f1 = null;
        if (IsFormAlreadyOpen(typeof(Form1)) == null)
        {
            if (ActiveMdiChild != null)
            {
                ActiveMdiChild.Close();
            }
            f1 = new Form1();
            f1.MdiParent = this;
            f1.Show();
        }
}

方法:

public static Form IsFormAlreadyOpen(Type FormType)
    {
        foreach (Form OpenForm in Application.OpenForms)
        {
            if (OpenForm.GetType() == FormType)
                return OpenForm;
        }

        return null;
    }

他のフォームの次へボタンをクリックするときも同じことを行います。

于 2015-02-19T08:33:49.953 に答える