5

私はC#デスクトップアプリケーションに取り組んでいます。MDIフォームでは、メニューをクリックすると同じ子ウィンドウが開き、そのウィンドウの最初のインスタンスが存在します。MDI 形式の子ウィンドウのこれらの複数のインスタンスを防ぐにはどうすればよいですか?

4

2 に答える 2

4

フォームがすでに開かれているかどうかを確認できます。

  Form instance = null;

  // Looking for MyForm among all opened forms 
  foreach (Form form in Application.OpenForms) 
    if (form is MyForm) {
      instance = form;

      break; 
    }

  if (Object.ReferenceEquals(null, instance)) {
    // No opened form, lets create it and show up:
    instance = new MyForm();
    instance.Show();
    ...
  }
  else {
    // MyForm has been already opened

    // Lets bring it to front, focus, restore it sizes (if minimized)
    if (instance.WindowState == FormWindowState.Minimized)
      instance.WindowState = FormWindowState.Normal; 

    instance.BringToFront();

    if (instance.CanFocus) 
      instance.Focus();
    ...
  }
于 2013-06-29T11:01:56.130 に答える
0

多分これはあなたを助けることができます:

public static bool formOpened = false;   // it is global boolean
Form2 instance;

フォームを開くと:

if(formOpened == false)
{
   instance = new Form2();
   instance.Show();
   formOpened = true;
}
else
{
    instance.Focus();
}

Form2 が閉じられた後、formOpened の値を false に設定する必要があります。

于 2013-06-29T11:54:33.970 に答える