DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C# で1つだけ表示する後ろに隠れないモーダルレスフォームがうまく閉じません

環境/言語:[C# VS2010 .NET 4 Windows 7]
分類:[.NET]

2013/05/06(Mon) 15:59:07 編集(投稿者)
2013/05/06(Mon) 15:58:15 編集(投稿者)
2013/05/06(Mon) 15:58:01 編集(投稿者)

お世話になります。

メインフォームからモーダレスのサブフォームを作ります。
サブフォームは、シングルトーンを使ったもので1つだけ表示します。
そして、サブフォームはメインフォームの後ろに隠れません。
エクセルの検索画面みたいなものです。

ここまでは、OKなのですがサブフォームを開いているときにメイン画面を閉じると
サブ・メイン一緒に閉じるようにしたいのですが、サブフォームだけ閉じます。

メインフォームの「閉じる」を一回押すだけで、サブ・メインが同時に閉じたいのですがどうすればよろしいですか。

よろしくお願いします。

[メインフォーム]
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication15 {
public partial class FormMain : Form {
public FormMain() {
InitializeComponent();
}

private void b_サブフォームをモダルレスで表示_Click(object sender, EventArgs e) {
FormChild f = FormChild.GetInstance();
f.Visible = false;
f.Show(this);
}
}
}

[サブフォーム]
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication15 {
public partial class FormChild : Form {


private static FormChild _instance;

public int _seasonclose;

public static FormChild GetInstance() {
if (_instance == null) {
_instance = new FormChild();
}
return _instance;
}


public FormChild() {
InitializeComponent();
}

private void FormChild_FormClosing(object sender, FormClosingEventArgs e) {
e.Cancel = true;
this.Hide();
if (this.Owner != null) {
//フォームの所有を解除する
this.Owner.RemoveOwnedForm(this);
}
}

}
}
添付ファイル: 1367823346.png (5 KB)
サブフォーム側で Cancel しているのでメインフォームが閉じることをあなたが妨げています。
イベントハンドラの引数 e にはフォームが閉じられる理由が通知されますので、そこで判断してください。
どういった理由が通知されるかはヘルプを探してみましょう。
回答有り難うございます。

解決しました。


// フォームの閉じた理由
if (e.CloseReason == CloseReason.UserClosing)
e.Cancel = true;

フォームの閉じる理由を条件に加えました。
これで、自分の思っていることができました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板