• 締切済み

ウィンドリストの追加について

MDIの子ウィンドウを「閉じる」ボタンが押された時に、CloseingイベントでCancel=Trueにして、再度Showで表示させるようにしているのですが、いったん「閉じる」ボタンで閉じた後、Showすると、ウィンドウリストに子ウィンドウが追加さていません。 どうしたら、ウィンドウリストに追加されるのでしょうか? 最初にShowした時は、追加されているのですが。 宜しくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

        item = WindowsMenu.DropDownItems(m)         ' 最初のエントリーかをチェック         If TypeOf WindowsMenu.DropDownItems(m - 1) Is ToolStripSeparator Then           item.Text = "&1" & item.Text.Substring(2)         Else           item.Text = "&" & (m - 6).ToString & item.Text.Substring(2)         End If MainForm側の WindowsMenuのDropDownOpeningの下記の部分に         ch.mn = item を追加します MainForm側に Public Sub DeleteWindowsListItem( mn as ToolStripMenu )   for n as Integer = 0 to WindowsMenu.DropDownItems.Count -1     if WindowsMenu.DropDownItems(n).Text.IndexOf(mn.Text.SubString(2)) > -1 then       WindowsMenu.DropDownItems.RemoveAt( n )       exit sub     end if   next End Sub を追加 子フォーム側のClosingまたはClosed if mn IsNot nothing then   MainForm.DeleteWindowsListItem( mn ) End if を記述してください Closingイベントの場合は閉じる場合のコード部分に追加します 子フォームをキャンセルした場合に 他のウィンドウにフォーカスが移動する前に『ウィンドウ』メニューを開いた場合 アクセラレータのインデックスがおかしくなるようです

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

> If mnu.Text.IndexOf(Me.Text) > -1 Then のどちらが取得不能なのでしょう? mnu.Textなのでしょうか Me.Textなのでしょうか サブフォームのタイトルなら Me.Textですし メニューの項目の文字列なら mnu.Textですが MDIフォームのメニューはスケルトンのままなのでしょうか・・・

Jyan01
質問者

お礼

すみません。 こちらのミスでした。うまく表示は出来ました。 ですが、ウィンドウを閉じてもウィンドウリストにウィンドウ名が残ったままです。 違うウィンドウを開くと、ウィンドウリストのインデックスが「-2」となって表示されます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

対処療法ですが … SubForm側にToolStripMenuItem型のメンバー変数を用意 # Publicフィールドかプロパティなどで実装 Public mn As ToolStripMenuItem といった具合に追加 SubFormのFormClosingイベントのCancelにする部分で   ' MDIFormのメニューから 自分のメニューを探す   For Each mnu As ToolStripItem In MainForm.WindowsMenu.DropDownItems     If mnu.Text.IndexOf(Me.Text) > -1 Then       mn = mnu       Exit For     End If   Next MainForm側の WindowsMenuのDropDownOpeningなどで   If MdiChildren.Length > 0 Then     For n As Integer = 0 To MdiChildren.Length - 1       ' chの型は適宜修正してください       Dim ch As SubForm = MdiChildren(n)       If ch.mn IsNot Nothing Then         ch.mn.Checked = (ch Is ActiveMdiChild)         Dim m As Integer         m = WindowsMenu.DropDownItems.Add(ch.mn)         Dim item As ToolStripItem         item = WindowsMenu.DropDownItems(m)         ' 最初のエントリーかをチェック         If TypeOf WindowsMenu.DropDownItems(m - 1) Is ToolStripSeparator Then           item.Text = "&1" & item.Text.Substring(2)         Else           item.Text = "&" & (m - 6).ToString & item.Text.Substring(2)         End If       End If     Next   End If といった具合で表示できますが、ドロップダウンメニューが更新されないとクローズで追加したメニューの アクセラレータが間違っていることがあります

Jyan01
質問者

お礼

回答ありがとうございます。 遅くなって申し訳ありません。 >If mnu.Text.IndexOf(Me.Text) > -1 Then のところで、どうもメニューからウィンドウテキスト名を取得できないようです。 いったんメニューを開いて確認してみたら、ちゃんと表示されてはいるものの、ここではTextを取得できていないようです。 どうしてなのでしょうか?

関連するQ&A