0

メニューストリップのメニューをクリックしたときに一度に1つのウィンドウのみを許可するにはどうすればよいですか?

例:Menustrip Ordre、Tarifなどがあります...初めてOrdreをクリックすると新しいフォームが開きますが、2回目はそれを禁止したいと思います。

 private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if (Already open)
        {

        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }

    }

よろしくお願いします

4

5 に答える 5

1

フォームを最初だけ作成し、次にメニュー項目が選択されたときに同じフォームを表示する場合は、次のように機能します。

private Lordre orderForm = null;
private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (orderForm == null)
        orderForm = new Lordre(ClientId);
        // Set the Parent Form of the Child window.
        orderForm .MdiParent = this;

    }
    // Display the form.
    orderForm.Show(); 
    orderForm.Activate();
}
于 2011-08-12T07:42:58.770 に答える
0

多分このようなもの:

public class MyForm
{
    private Window _openedWindow;
    private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if ( _openedWindow != null &&  _openedWindow.Open)
        {
            //
        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            _openedWindow = newMDIChild;
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }
    }
}

これは完全にブラウザーで作成されたものであり、私は長い間 Windows アプリを作成していないため、正確なクラスとプロパティは異なる場合があります。

于 2011-08-12T07:43:37.147 に答える
0

私が通常単一インスタンス フォームを処理する方法は、それを保持するメンバー変数を用意し、それが null かどうかを確認することです。

したがって、メンバー変数があります。

private TestForm myTestForm = null;

そして、チェックするときは、それがnullかどうかをチェックしてください。そうでない場合は、フォームを作成するときにそれをメンバー変数に割り当て、子フォームの終了イベントのイベント ハンドラーにアタッチします。

if (myTestForm != null)
{
   MessageBox.ShowDialog("Sorry, you already have a TestForm open!");
}
else
{
   myTestForm = new TestForm();
   myTestForm.FormClosing += myTestForm_FormClosing;
   myTestForm.MdiParent = this;
   myTestForm.Show();
}

終了ハンドラーでは、null に戻すだけです。

private void myTestForm_FormClosing(Object sender, FormClosingEventArgs e)
{
   myTestForm = null;
}

また、少し検索しましたが、FormClosing イベントとハンドラーを使用するのではなく、条件を次のように変更できます。

if ((myTestForm != null) && (!myTestForm.IsDisposed())
于 2011-08-12T07:46:06.997 に答える