- PR -

MDI親フォームのToolBarを切り替えるには?

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-21 11:24
引用:

あぶぽんさんの書き込み (2005-10-21 10:58) より:

ToolBarのVisibleに関しては冒頭にも書いたように試してますし、
MdiParent.ControlsをClearしても、Addしても、この現象(
子フォームのVisibleがTrueになってしまう)が発生するので。。。


あー、すいません件名が件名なだけに "結論" がそっちに行きそうでした。
本論としては「再現できなかった」ということです。

引用:

この現象のミソは、子フォームをCloseせずに、

コード:

private void FormA_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
	e.Cancel = true;
	this.Hide();
}


としているところです。


それでも、再現できなかったという意味です。
(重複している部分は書いてもムダなので書いていません)
私のコードは試されたのでしょうか?

# コードを記述する際には [quote] タグではなく [code] タグ使ってくださいね。
# 先ほどから引用になってますが、意味がないです。(インデント潰れますし)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-21 14:37
じゃんぬねっとさんのコードを試してみました。

結果的には同様現象が発生してしまいました。

発生条件として、MDI子フォームを最小化した場合という
ことが分かりました。
MDI子フォームの初期表示状態は最大化です。

一度、最小化すると後はどんどん動きが怪しくなります。

親MDIフォーム「ABC」があるとして、
子MDIフォーム「A」、「B」、「C」があるとします。

「A」を開いた後、「A」を最小化して閉じます。
それから、「B」を開いて、(最大化されているので)通常の
フォームに戻し、周りを見てみると、
「A」が最小化された状態で現れています。

その「A」のウィンドウの動作がスレの冒頭で申し上げたように
おかしな動きをします。

最小化さえしなければ、その現象は起こらないようです。。。
初期表示状態が最大化なのは関係ないようです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-21 14:57
引用:

あぶぽんさんの書き込み (2005-10-21 14:37) より:

発生条件として、MDI子フォームを最小化した場合ということが分かりました。


私も確認できました。

MDI 子フォームを最小化の状態で閉じた時でかつ、
Closing イベントで閉じることをキャンセルして、不可視にした場合に起こるようです。
条件が 1 つでも欠けた場合に、この現象は起こらないようです。

Visible = true にされてしまうトリガーは、ToolBar にアイテムを加えた場合でした。

引用:

一度、最小化すると後はどんどん動きが怪しくなります。


私の端末では、サイズ変更と移動はできるものの、
何故か Form がアクティブの状態にならなくなりました。
また、親 MDI フォームを閉じようとすると、
何故か MDI 子フォームがひとつずつ閉じるような動きになりました。

ドッキング関係とボタンが複数表示されるように見える現象は確認できませんでした。
回避策を探しつつ、原因を追ってます。
取り急ぎ、現象の結果報告をしました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-21 16:50
じゃんぬねっとさん、まいどです。

引用:

引用:

発生条件として、MDI子フォームを最小化した場合ということが分かりました。


私も確認できました。


よかったです。。。って(障害があるのは)良くないですが。

引用:

引用:

一度、最小化すると後はどんどん動きが怪しくなります。


私の端末では、サイズ変更と移動はできるものの、
何故か Form がアクティブの状態にならなくなりました。
また、親 MDI フォームを閉じようとすると、
何故か MDI 子フォームがひとつずつ閉じるような動きになりました。

ドッキング関係とボタンが複数表示されるように見える現象は確認できませんでした。


じゃんぬねっとさんのコードでは私の環境でも同様です。

引用:

また、親 MDI フォームを閉じようとすると、
何故か MDI 子フォームがひとつずつ閉じるような動きになりました。


これは元々そういう仕様(.NETの)かと思っておりましたが。

# じゃんぬねっと (C#, VB.NET)
# じゃんぬねっと日誌 (じゃんぬのおもちゃ箱)
# 拝見しました。
# とても参考になります。さっそく。ブックマークさせて頂きました。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-21 17:12
引用:

コード:
private void FormA_Activated(object sender, System.EventArgs e)
{
	this.MdiParent.Menu = this.Mainmenue;
	this.MdiParent.Controls.RemoveAt(0);
	this.MdiParent.Controls.Add(this.toolBar1);
}


のthis.MdiParent.Controlsを操作したところで、Visible=Trueになる
イベントが全てのMDI子フォームに送られてしまうようです。


とりあえず、思いついたことを。
最初に、this.Controls.Remove(this.toolBar1)をおこなっても一緒でしょうか。
#まず子から切り離す必要があるんではと思いました。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-21 17:23
まどかさん、ありがとうございます。
引用:

最初に、this.Controls.Remove(this.toolBar1)をおこなっても一緒でしょうか。
#まず子から切り離す必要があるんではと思いました。


実はそれはやりましたが、駄目でした。
駄目というのは、やはり、Visible=Trueになったということです。
# 実際には(1)の方法を試したときです。
# そのあとAdd()してますが、Remove()の時点でVisible=Trueになりました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-21 17:24
引用:

まどかさんの書き込み (2005-10-21 17:12) より:

とりあえず、思いついたことを。
最初に、this.Controls.Remove(this.toolBar1)をおこなっても一緒でしょうか。
#まず子から切り離す必要があるんではと思いました。


どうやら、Add メソッド部分で起きてるっぽいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-21 18:23
引用:

「A」を開いた後、「A」を最小化して閉じます。
それから、「B」を開いて、(最大化されているので)通常の
フォームに戻し、周りを見てみると、
「A」が最小化された状態で現れています。


上記の部分だけですが、MDIの仕様のような気がしてならないです。。。
自分のMDIアプリで試してみます。

スキルアップ/キャリアアップ(JOB@IT)