メニューを使ってみよう

プログラムにメニューがあるといろいろ便利です、それになにより市販のアプリケーションみたいでかっこいいです
そこでメニューを付ける方法を調べました


【1】メニューからプロジェクト→コントロール→Microsot PocketPC MenuBar Control 3.0 をチェック
ツールボックスに現れたMenuBar コントロールのアイコンをクリックしてFormに配置する
Formのどこに配置しても実行時は必ず一番下に表示されるのでどこに配置してもいいし大きさも関係ないが、フォームを縦に少し伸ばして一番下に配置しておくと邪魔にならない

【2】メニューバーのプロパティの初期値ではNewButtonがTrueになっているが、この場合自動的にメニューの最初にNewの項目が表示される。普通は不要なのでFalseに変える


【3】Private Sub Form_Load() にメニューの項目設定のコードを記述する
Form_Load のブロックは最初はコードウィンドウにはありませんので、自分で書き込むか、コードウィンドウの上部にあるコンボボックスでFormとLoadを選ぶと作成されます
Private Sub Form_Load()
End Sub
の間に以下のコードを書き込みます
(例)

Dim mnuFile As MenuBarLib.MenuBarMenu
Dim mnuHelp As MenuBarLib.MenuBarMenu

Set mnuFile = MenuBar1.Controls.AddMenu("File", "mnuFile")
mnuFile.Items.Add 1, "mnuFileItem1", "項目1"
mnuFile.Items.Add 2, "mnuFileItem2", "項目2"
mnuFile.Items.Add 3, "mnuFileItem3", "項目3"
mnuFile.Items.Add 4, "mnuFileQuit", "終了"

Set mnuHelp = MenuBar1.Controls.AddMenu("Help", "mnuHelp")
mnuHelp.Items.Add 1, "mnuHelpUsage1", "使い方"
mnuHelp.Items.Add 2, "mnuHelpUsage2", "バージョン"

この場合メニューバーには 「File」 「Help」 の2つが表示され
File を押すと 「項目1」 「項目2」 「項目3」 「終了」 の4つが表示される
Help を押すと 「使い方」 「バージョン」 の2つが表示される
実行するとこんな感じ


xxxx.Items.Add の後の数字は1から連番にする必要あり、全部付けないという手もある
第二引数(1番目の文字列)は自由に設定していいが後で処理する時に同じ文字列を指定する必要あり
第三引数(2番目の文字列)は画面に表示される文字列なので何でもいいが解り易いものが良い

【4】MenuBar1_MenuClick() にメニューが選択された場合のコードを記述
自動的には作成されないので自分で書く、以下のコードをコピペしてください
(上での設定に対応した例)
Private Sub MenuBar1_MenuClick(ByVal Item As MenuBarLib.Item)

  Select Case Item.Key
    Case "mnuFileItem1"
        '項目1が選択された場合の処理をかく
    Case "mnuFileItem2"
        '項目2が選択された場合の処理をかく
    Case "mnuFileItem3"
        '項目3が選択された場合の処理をかく
    Case "mnuFileQuit"
        Form_OKClick '終了する

    Case "mnuHelpUsage1"
        MsgBox "使用法" + vbCrLf + "使い方の説明", vbOKOnly, "Usage1"
    Case "mnuHelpUsage2"
        MsgBox "プログラム名" + vbCrLf + "Ver 0.00", vbOKOnly, "Usage2"
  End Select

End Sub

Case の後の文字列はメニュー設定時の文字列と一致する必要あり
コメント(')行の部分に実際の処理をかく
この例では
"mnuFileQuit" では終了するため Form_OKClick を呼んでいる
"mnuHelpUsage1" と "mnuHelpUsage2" では、メッセージボックスを使って説明を表示している





もう少し高度メニューの作り方

普通は上の作り方で十分ですがもっと高度な使い方をしたいという場合もあるので、更に詳しい作り方を説明します
なお、これはマニュアルなどを見ながら試行錯誤して作った結果なので、正しい方法かどうかはわかりません

【附1】サブメニューにセパレーター(区切りの横線)を表示するには
items.Add([index], [key], [caption], [style])
の第4引数[style]に mbrMenuSeparator を指定する (値は1)
上の例では
Set mnuFile = MenuBar1.Controls.AddMenu("File", "mnuFile")
mnuFile.Items.Add 1, "mnuFileItem1", "項目1"
mnuFile.Items.Add 2, "mnuFileItem2", "項目2"
mnuFile.Items.Add 3, "mnuFileItem3", "項目3"
mnuFile.Items.Add 4, , , mbrMenuSeparator
mnuFile.Items.Add 5, "mnuFileQuit", "終了"
となる
こうすると「項目3」と「終了」の間に横線が引かれる
第2、第3引数は不要、在ってもなくてもいっしょ
第1引数は必要、付けないなら全部に付けない


【附2】メニューにサブメニューをつけるには
(1回タップして出たメニューの横に右向きの▲があり更にメニューが開く)

(1)メニューに項目を追加するときにItem Objectを保存する
Dim mnuDtbs As Item
Set mnuDtbs = mnuFile.Items.Add(4, "mnuDtbs", "データベース")
メニューに登録するだけなら mnuFile.Items.Add 4, "mnuDtbs", "データベース" で良いが変数に代入するときは次のように()が必要 mnuFile.Items.Add(4, "mnuDtbs", "データベース")
また代入時にSetが必要 mnuDtbs = mnuFile.Items.Add(4, "mnuDtbs", "データベース") これではだめです
(2)ItemからItemsを返すプロパティー「SubItems」を使って Itemsを得る
Dim mnuDtbs2 As MenuBarLib.Items
Set mnuDtbs2 = mnuDtbs.SubItems
(3)得られたItems(ここではmnuDtbs2)にメニューを追加する
mnuDtbs2.Add 1, "mnuDtbs1", "データベース1"
mnuDtbs2.Add 2, "mnuDtbs2", "データベース2"
・・・・・・・・・・・・・

(1)(2)は次のように1行で書いてもいい
Dim mnuDtbs2 As MenuBarLib.Items
Set mnuDtbs2 = mnuFile.Items.Add(4, "mnuDtbs", "データベース").SubItems

(サンプル)

Dim mnuFile As MenuBarLib.MenuBarMenu
Dim mnuHelp As MenuBarLib.MenuBarMenu
Dim mnuDtbs2 As MenuBarLib.Items '変数の型はこれでいいか不明

Set mnuFile = MenuBar1.Controls.AddMenu("File", "mnuFile")
mnuFile.Items.Add 1, "mnuFileForm1", "List表示"
mnuFile.Items.Add 2, "mnuFileForm2", "データベース設定"
Set mnuDtbs2 = mnuFile.Items.Add(3, "mnuDtbs", "データベース").SubItems
mnuFile.Items.Add 4, "mnuFileQuit", "終了"

mnuDtbs2.Add 1, "mnuDtbs1", "データベース1"
mnuDtbs2.Add 2, "mnuDtbs2", "データベース2"
mnuDtbs2.Add 3, "mnuDtbs3", "データベース3"

Set mnuHelp = MenuBar1.Controls.AddMenu("Help", "mnuHelp")
mnuHelp.Items.Add 1, "mnuHelpUsage", "使い方"
mnuHelp.Items.Add 2, "mnuHelpUsage2", "シート説明"
mnuHelp.Items.Add 3, "mnuHelpUsage3", "データ構造"


【附3】メニューの項目の左端にチェックマークをつける
(1)メニューに項目を追加するときにItem Objectを保存する
Dim mnuDtbs As Item
Set mnuDtbs = mnuFile.Items.Add(4, "mnuDtbs", "データベース")
(2)Item Objectのプロパティーに従ってCheckedを指定する
mnuDtbs.Checked = True


【附4】メニューの項目を選択不可能にする
(1)メニューに項目を追加するときにItem Objectを保存する
Dim mnuDtbs As Item
Set mnuDtbs = mnuFile.Items.Add(4, "mnuDtbs", "データベース")
(2)Item Objectのプロパティーに従ってEnabledを指定する
mnuDtbs.Enabled = False

【附1〜4を使用したサンプルコード】
サブメニュー「データベース」のサブメニュー「データベース1」「データベース2」は選択するたびにチェックマークが付いたり外れたりします、「データベース3」は選択できません
他のメニューはメッセージボックスを表示します
テキストファイルです

ソースファイル
ZIPファイルです

実行時の画面です
サブメニュー"データベース"の下にセパレーターがあり
サブメニュー"データベース"からサブメニューが表示され
その"データベース1"がチェックされ、"データベース3"が選択不能になっています



VBTOPに戻る