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

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

宜しくお願いします。

投稿日時 - 2008-10-10 09:27:52

QNo.4390819

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

回答(3件中 1~3件目)

ANo.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イベントの場合は閉じる場合のコード部分に追加します

子フォームをキャンセルした場合に
他のウィンドウにフォーカスが移動する前に『ウィンドウ』メニューを開いた場合 アクセラレータのインデックスがおかしくなるようです

投稿日時 - 2008-10-15 14:02:06

ANo.2

> If mnu.Text.IndexOf(Me.Text) > -1 Then
のどちらが取得不能なのでしょう?

mnu.Textなのでしょうか Me.Textなのでしょうか
サブフォームのタイトルなら Me.Textですし
メニューの項目の文字列なら mnu.Textですが

MDIフォームのメニューはスケルトンのままなのでしょうか・・・

投稿日時 - 2008-10-14 17:47:21

お礼

すみません。
こちらのミスでした。うまく表示は出来ました。

ですが、ウィンドウを閉じてもウィンドウリストにウィンドウ名が残ったままです。
違うウィンドウを開くと、ウィンドウリストのインデックスが「-2」となって表示されます。

投稿日時 - 2008-10-15 11:22:54

ANo.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
といった具合で表示できますが、ドロップダウンメニューが更新されないとクローズで追加したメニューの アクセラレータが間違っていることがあります

投稿日時 - 2008-10-10 14:51:08

お礼

回答ありがとうございます。
遅くなって申し訳ありません。

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

どうしてなのでしょうか?

投稿日時 - 2008-10-14 09:21:17

あなたにおすすめの質問

MSN恋人探し

MSN恋愛・結婚

数字が教える恋愛常識

数字が教える恋愛常識

恋人には言えない秘密ってある?

[PR] お役立ち情報