[C#]モーダルダイアログとモードレスダイアログ | Assertion Failed!

[C#]モーダルダイアログとモードレスダイアログ

モーダルダイアログとモードレスダイアログ



Assertion Failed!-ダイアログ


[環境]

VisualStudio2008

C# Windowsフォームアプリケーション


マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!


2つのフォーム(Form1、Form2)を用意し、一方(今回はForm2)をモーダルまたは

モードレスダイアログとして表示する。


[Form1側]

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }


  /// <summary>
  /// モーダルダイアログ
  /// </summary>
  private void button1_Click(object sender, EventArgs e)
  {
    using (Form2 dlg = new Form2("モーダル"))
    {
      dlg.ShowDialog(this);
    }
  }


  /// <summary>
  /// モードレスダイアログ
  /// </summary>
  private void button2_Click(object sender, EventArgs e)
  {
    Form2 dlg = new Form2("モードレス");

    dlg.Show(this);
  }
}


[Form2側]

public partial class Form2 : Form
{
  public Form2(string str)
  {
    InitializeComponent();
    label1.Text = str;
  }
}


モーダルとして表示するときは「ShowDialog()」、モードレスとして表示するときは

「Show()」メソッドを使用する。


各々のメソッドに「this」を渡しているのは、Form1がForm2のオーナーである

ことを意味するため。

これにより、Form2がForm1より下に表示されることがなくなる。

(特にモードレスの際)


注意すべき点は、FormクラスがIDisposableを実装しているということ。

モードレスダイアログを何回も起動してDisposeを行わないと、そのうちメモリがなくなる。