C# WinFormsの「モーダル ダイアログ」と「モードレス ダイアログ」の忘備録になります。
#1. モーダルダイアログと、モードレスダイアログの違い
モード名 | 内容 |
---|---|
モーダル ダイアログ | ダイアログボックスを閉じるまでは、同じアプリケーションの他のウィンドウに対する操作ができないダイアログボックス |
モードレス ダイアログ | ダイアログボックス表示中でも他のウィンドウの操作可能なダイアログボックス |
#2. モーダルダイアログの表示方法
var form1 = new Form1();
form1 .ShowDialog();
form1 .Dispose();
ダイアログが不要になった時に Disposeメソッド を呼び出し、リソースを解放しなければならない。
#3. モードレスダイアログ
var form1 = new Form1();
form1.Show();
##3.1 モードレスダイアログの多重起動禁止
Form1 form1 = null;
private void button1_Click(object sender, System.EventArgs e)
{
if ((form1 == null) || form1.IsDisposed)
{
form1 = new Form1();
form1.Show();
}
}
#4. 複数のダイアログ間で情報のやりとり
子ダイアログのプロパティを利用する。
(他にも方法はあるが、基本的におさえておくべき所だけ)
Form1.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
Form2 form2 = null;
public Form1()
{
InitializeComponent();
form2 = new Form2();
form2.Show();
textBox1.Text = form2.FormName;
}
private void button1_Click(object sender, EventArgs e)
{
form2.FormName = "Form1";
form2.SetText();
textBox1.Text = form2.FormName;
}
}
}
Form2.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form2 : Form
{
public string FormName { get; set; } = "Form2";
public Form2()
{
InitializeComponent();
SetText();
}
public void SetText()
{
textBox1.Text = FormName;
}
}
}