Skip to content

Menu 类

Menu是Win32原生菜单中的项目——可以是FormMDIForm菜单栏上的顶级条目、下拉子菜单中的条目,或相关命令组之间的分隔条。菜单是非窗口化控件:它们没有Left / Top / Width / Height,没有字体,也没有自己的鼠标或键盘事件——它们在设计时通过窗体的菜单编辑器进行填充、结构化和绑定到处理程序。

默认属性是Enabled,默认事件是Click

vb
Private Sub Form_Load()
    mnuFileSave.Enabled = False     ' grey out until there is something to save
End Sub

Private Sub mnuFileSave_Click()
    SaveDocument
End Sub

Private Sub mnuViewToolbar_Click()
    mnuViewToolbar.Checked = Not mnuViewToolbar.Checked
    Toolbar1.Visible = mnuViewToolbar.Checked
End Sub

标题和分隔符

Caption提供为菜单项绘制的文本。两个Caption值具有特殊含义:

  • 和号(&)将下一个字符标记为键盘助记符——在菜单打开时按Alt + 该字母可调用该项目,该字母在渲染菜单中会加下划线显示。使用&&可显示字面和号。
  • 由单个连字符("-")组成的Caption将项目渲染为周围条目之间的水平分隔条。分隔项被程序化调用时仍会收到自己的Click事件,但用户无法通过键盘或鼠标到达。
vb
mnuFileNew.Caption    = "&New"          ' Alt+N while File is open
mnuFileSep1.Caption   = "-"             ' separator bar
mnuFileSaveAs.Caption = "Save &As..."   ' Alt+A

快捷键

ShortcutId将键盘加速键绑定到菜单项。其类型为ShortcutConstants——vbShortcutNone禁用加速键,vbShortcutCtrlS绑定Ctrl+S,依此类推涵盖功能键、**Shift+Ctrl+**范围。设置后,Win32运行时会在渲染的Caption中的制表符后附加相应文本——Save\tCtrl+S——使快捷键以常规方式右对齐显示在菜单中。

vb
mnuFileSave.ShortcutId = vbShortcutCtrlS
mnuFilePrint.ShortcutId = vbShortcutCtrlP

INFO

隐藏的ShortcutString属性仅用于往返导入自VB6 .frm文件的原始文本;运行时不使用它。新代码应使用ShortcutId

菜单图标

twinBASIC扩展了经典VB6菜单,支持在标题旁绘制可选的16×16(或任意尺寸)图标。将StdPicture赋值给Picture,位图将渲染在标题文本的左侧。当提供的图片是多分辨率.ico时,IconSizeXIconSizeY选择要使用的嵌入图像;保持为0(默认),图片以自然尺寸加载。

vb
Set mnuFileSave.Picture = LoadResPicture("MNU_SAVE", vbResBitmap)
mnuFileSave.IconSizeX = 16
mnuFileSave.IconSizeY = 16

控件数组

菜单的控件数组是构建最近使用文件列表、动态窗口子菜单或插件命令列表的标准方式。数组在设计时在第一个项目上声明;其他项目在运行时用Load添加、用Unload移除,与窗口化控件完全相同。在数组中所有项目共享的Click处理程序内部,Index标识被选中的项。

vb
Private Sub mnuRecent_Click(Index As Integer)
    OpenDocument mnuRecent(Index).Tag       ' Tag holds the file path
End Sub

Index在非控件数组的菜单上读取时会引发运行时错误343(对象不是数组)。

窗口列表(MDI)

当承载菜单的窗体是MDIForm时,在设计时将WindowList设为True可将此菜单变为应用程序的窗口子菜单——运行时自动为每个打开的MDI子窗体填充一个条目,用复选标记标记活动子窗体,并将点击其中任一条路由到相应子窗体的SetFocus。应用程序通常将此与显式的层叠/平铺子菜单组合使用,后者调用父窗体的Arrange

属性

Caption

为菜单项绘制的文本。String。和号将下一个字符标记为助记符;&&产生字面和号。Caption为"-"将项目渲染为水平分隔符。赋值会立即反映在任何可见的菜单栏或弹出菜单中。

语法:object.Caption [ = string ]

Checked

是否在项目旁边绘制复选标记。Boolean,默认False。在顶级(菜单栏)项目上设置是支持的但在视觉上较少见;常规用法是在切换设置的下拉菜单项上。

语法:object.Checked [ = boolean ]

ControlType

只读ControlTypeConstants值,将此控件标识为菜单。始终为vbMenuControl

Enabled

用户是否可以选择该项目。禁用的菜单项以灰色绘制,忽略鼠标和键盘激活,包括其ShortcutId加速键。Boolean,默认True默认属性。

语法:object.Enabled [ = boolean ]

禁用顶级菜单栏项目会禁用其整个下拉菜单。Enabled更改时运行时会重建菜单状态,因此更改会立即可见。

HelpContextID

INFO

保留用于VB6兼容;目前在twinBASIC中尚未实现。

一个Long,在VB6中标识当用户在菜单项高亮时按F1时显示的应用程序帮助文件中的主题。

IconSizeX

Picture是多分辨率.ico时,要加载的嵌入图像的水平像素尺寸。Long,默认0(使用图片的自然尺寸)。与IconSizeY配对使用。

IconSizeY

IconSizeX对应的垂直属性。Long,默认0

Index

当菜单是控件数组的一部分时,此实例在数组中的Long零基索引。运行时只读。在非数组菜单上读取会引发运行时错误343(对象不是数组)。

Name

菜单在其父窗体上的唯一设计时名称。String,运行时只读。继承自基控件类。

NegotiatePosition

INFO

保留用于与VB6的ActiveX文档菜单协商功能兼容;目前在twinBASIC中尚未实现。

类型为NegotiatePositionConstantsvbNoNegotiatevbLeftvbMiddlevbRight)——VB6使用此属性决定当ActiveX文档被激活时顶级菜单应出现在宿主应用程序菜单栏的何处。

Parent

对包含此菜单的Form(或MDIForm / UserControl)的引用。只读。

Picture

绘制在标题左侧的StdPicturetwinBASIC扩展——VB6菜单无法显示图标。赋值Nothing移除图标。图标在内部转换为位图;直接传递位图可跳过转换。对于多分辨率.ico文件,与IconSizeX / IconSizeY配对使用。

语法:

  • object.Picture [ = picture ]
  • Set object.Picture = picture

Shortcut

INFO

隐藏、只读,运行时未使用——仅用于往返导入自VB6 .frm文件的原始快捷键文本。使用ShortcutId绑定加速键。

ShortcutId

绑定到此菜单项的键盘加速键。ShortcutConstants的成员——vbShortcutNone(无加速键,默认)、vbShortcutCtrlAvbShortcutCtrlZvbShortcutF1vbShortcutF12,以及Shift+、**Ctrl+Shift+Ctrl+**功能键变体。设置后,渲染菜单时匹配的快捷键文本会附加到Caption(制表符后)。

语法:object.ShortcutId [ = value ]

Tag

应用程序可用于将自定义数据与菜单项关联的自由格式String。框架忽略此属性。继承自基控件类。对于控件数组很有用——例如保存MRU列表条目应打开的文件路径。

Visible

菜单项是否显示。Boolean,默认True。设为False会从菜单中移除条目而不卸载;设回True会将其恢复到原始位置。隐藏顶级菜单栏项目会重建菜单栏使周围条目关闭间隙。

语法:object.Visible [ = boolean ]

WindowList

MDIForm承载的菜单上为True时,将此菜单变为应用程序的窗口子菜单——运行时自动为每个打开的MDI子窗体填充一个条目,并将结果点击路由到相应子窗体的SetFocusBoolean,运行时只读——在设计时设置。每个MDI窗体最多只能有一个菜单设置WindowList

方法

Container

返回承载此菜单的Control的引用——通常是拥有菜单结构的FormMDIForm。对于顶级菜单等效于遍历Parent,但在每个菜单(包括子项)上定义,因此可以统一调用。

语法:object.Container

事件

Click

当用户选择菜单项时引发——通过点击、在菜单打开时按助记符,或按其ShortcutId加速键。当PopUpMenu选择项目时也会引发。默认事件。

语法:object_Click( )

对于属于控件数组的菜单,处理程序接收被选项目的数组Index

语法:object_Click( Index As Integer )

twinBASIC及其LOGO版权为作者"韦恩"所有