2008/05/13(Tue) 22:22:58 編集(投稿者)
■No18375 (高木 さん) に返信
> 子画面で編集・追加されているのに、親画面を閉じようとすると、
> メッセージを表示し、使用者に閉じてよいか委ねる機能を作成したいです。
親側と子側の関連度が分かりませんが、その条件であれば、必ずしも
子画面の編集状況を、親側が把握しておく必要は無いような気もします。
閉じるときの終了確認は、子画面自身にやらせれば済むので。
public class ParentForm : Form
{
ChildForm childForm = new ChildForm();
public ParentForm()
{
Text = "親画面";
Size = new Size(300, 100);
Shown += delegate { childForm.Show(this); };
}
}
public class ChildForm : Form
{
TextBox textBox1 = new TextBox();
public ChildForm()
{
Text = "サブ画面";
Size = new Size(300, 100);
textBox1.Text = "編集前の値";
Controls.Add(textBox1);
Button button1 = new Button();
button1.Text = "保存済みにする";
button1.Enabled = false;
button1.Left = textBox1.Right;
button1.Click += button1_Click;
button1.AutoSize = true;
Controls.Add(button1);
textBox1.TextChanged += delegate { button1.Enabled = true; };
FormClosing += ChildForm_FormClosing;
StartPosition = FormStartPosition.WindowsDefaultLocation;
}
void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
// TextBox の内容が変更されていた時だけ保存確認
if (textBox1.Modified)
{
e.Cancel = DialogResult.No ==
MessageBox.Show(
"サブ画面の値が変更されています。\r\n" +
"まだ保存されていませんが、このまま閉じてもよろしいですか?",
"保存確認", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
}
}
void button1_Click(object sender, EventArgs e)
{
// 実際にはここに保存処理等が入る事になるかと。
textBox1.Modified = false;
((Button)sender).Enabled = false;
}
}