0

Form1ボタンがクリックされたときに別のフォームを作成するを取得しました。

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     Form f5 = new Form5();
     f5.Show();
 }

それが発生した場合、このフォーム f5 が存在するかどうかを判断する必要があるため、存在する場合は、ボタンを押すと、新しいフォームを作成するのではなく、既存のフォームに切り替えるだけです。存在しない場合は、新しいフォームを作成する必要があります. 一部のオブジェクトが存在するかどうかを宣言するまで確認できない場合、どうすればよいですか? 宣言する前に f5 の存在を確認する方法は、そのようなフォームがなく、必要な場合にのみ作成できますか?

4

3 に答える 3

4

これを行う正しいForm5方法は、作成時にオブジェクトへの参照を維持することです。これを行うには、たとえば、クラス レベルの変数を宣言します。

public class MyForm : Form
{
    private Form5 m_frm5 = null;

    // ...other code...

    private void ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (m_frm5 == null)
        {
            m_frm5 = new Form5();
        }
        m_frm5.Show();
    }
}

明らかに、フォーム オブジェクトにアクセスする必要がある場所に応じて、スコープを適切に選択する必要があります。staticローカル変数も同様に機能する場合もあれば、アプリケーション全体に対してグローバルにする必要がある場合もあります。

または、コレクションを繰り返し処理して、 のインスタンスが既に作成されているApplication.OpenFormsかどうかを確認することもできます。Form5

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.GetType() == typeof(Form5))
        {
            f.Show();
            return;
        }
    }

    Form5 frm5 = new Form5();
    frm5.Show();
}

プロのヒント:フォーム クラスには、デフォルトよりもわかりやすい名前を選択してください。Form5 は何も教えてくれません。

于 2013-05-08T19:24:49.390 に答える
1

Form5プライベート変数として作成します。新しいものを作成する前に、それが存在するかどうかを確認してから、新しいものを作成してください。

 private Form5 form5 = null;

 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if(f5 == null || !f5.Visible)
         f5 = new Form5();

     f5.Show();
 }
于 2013-05-08T19:23:30.820 に答える
0

インスタンスを親コードの一部にするだけです。

Form f5 = null;

private void ToolStripMenuItem_Click(object sender, EventArgs e) { 
if (f5 == null) {
      f5 = new Form5(); 
      f5.Show();
  }
 }

後で編集:あなたは正しいです、正しいコードシーケンスをキャプチャしました:)。私はそれを一度だけ開きます。

アプリケーションが MDI でない場合は、むしろ ShowDialog() を使用します。

于 2013-05-08T19:25:16.657 に答える