このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3件中 1~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
> 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
対処療法ですが …
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
あなたにおすすめの質問
- MDIフォームとユーザコントロール MDIフォームとユーザコントロール
- Closeメソッド詳細を教えてくださ... Closeメソッド詳細を教えてください
- VB2008でMDIフォームを使用し... VB2008でMDIフォームを使用した時の不具合
- MFC MDIでステータスバーの追加... MFC MDIでステータスバーの追加。
- 「Cancel = True」とはど... 「Cancel = True」とはどういう意味でし
- 子ウィンドウに発生したイベント 子ウィンドウに発生したイベント
- エクセルVBAで Cancel=Tr... エクセルVBAで Cancel=Trueの使い方
- MDIアプリケーションの子ウィンドウ... MDIアプリケーションの子ウィンドウとしてOfficeを起動する方法
- VC++6.0,MDI,子ウィンドウ... VC++6.0,MDI,子ウィンドウのタイトルが変わる!?
- VB.NETのMDIアプリについて VB.NETのMDIアプリについて