|
分類:[VB.NET/VB2005 以降]
2010/10/03(Sun) 01:37:56 編集(投稿者)
こんばんは。 現在MDIでアプリを開発しているのですが、解決できない問題が出てきたので質問させて下さい。
親フォームに存在するMenuStripのMdiWindowListItemプロパティに、ToolStripMenuItemを設定しています。 子フォームはFormクラスを継承し、FormClosingイベントハンドラを以下のように記述しています。
Private Sub ChildForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Me.Visible = False e.Cancel = True End Sub
また、親フォームに存在するCheckBoxのCheckedプロパティと、子フォームのVisibleプロパティをバインドしています。 全体として、子フォームの生成、設定、表示のコードは以下のように、親フォームのLoadイベントハンドラ内で記述されています。
Private Sub ParentForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim child As New ChildForm() child.MdiParent = Me CheckBox.DataBindings.Add(New Binding("Checked", child, "Visible", True, DataSourceUpdateMode.OnPropertyChanged)) child.Visible = True End Sub
この状態で親フォームを起動し、CheckBoxで子フォームの表示を切り替えると、それに連動してMdiWindowListItemも適切に変化します。(子フォームが表示されていればMdiWindowListItemに表示され、表示されていなければMdiWindowListItemにも表示されない) ただ子フォームの"×"ボタンで子フォームを閉じると、その後CheckBoxで子フォームを再表示しても、MdiWindowListItemに表示されません。 FormClosingイベントハンドラの内容を考えると、"×"ボタン、CheckBox、どちらで操作した場合も同じ結果になると思うのですが、何が異なるのでしょうか? MdiParentプロパティの設定が原因かとも思い、子フォームのVisibleChangedイベントハンドラやLoadイベントハンドラで親フォームを設定してみましたが、解決しませんでした。
何かご存じの方がいらっしゃれば、お教え下さい。よろしくお願いします。
|