BeforeShowContextMenu

如果你还没有接触菜单设计,可以暂时忽略本节内容。
关于菜单设计,我们会在后续章节介绍。

本事件显示快捷菜单之前执行,可以在此禁止显示快捷菜单,或更改要显示的快捷菜单。
如果是易表用户,而且用过易表的菜单设计功能,相当部分用户会对不能针对不同的表定义不同的快捷菜单而恼火,而现在有了BeforeShowContextMenu事件,别说不同的表,就是同一个DataTable的不同Table,同一个Table的不同列、不同状态的行,都可以显示不同的快捷菜单。
 
e参数属性:

参数 说明
Table 触发事件的表
ContextMenu 设置即将显示的快捷菜单,如果不设置,将显示默认的菜单,我们可以用ContextMenus获得指定名称的快捷菜单,例如:ContextMenus(“菜单A”)

什么是默认的快捷菜单? 在设计快捷菜单的时候,以下名称的快捷菜单将作为默认菜单:
 
Column : 选定某一列或几列后右击显示
Row:     选定一行或多行后右击显示
Cell:    选定一个单元格后右击显示
Range:   选定多个单元格后右击显示
Empty:   右击空白区域的时候显示

HitType HitTypeEnum型枚举,表示右击区域的类型,包括以下可选值:

Column:右击区域是选定的某一列
Row:   右击区域是选定的某一行
Cell:  右击区域是选定的某一单元格
Range: 右击区域是选定的多个单元格
Empty: 右击区域是空白区。

可以看出,HitTypeEnum型枚举的值和默认快捷菜单的名称一一对应;实际上,在默认情况下,右击Table中的某一个区域,总是会产生一个HitType,系统根据这个HitType的值查找对应名称的 默认快捷菜单,并显示该菜单。

Cancel 逻辑型,设为True,取消显示快捷菜单。


示例一,不同的表显示不同的快捷菜单
 
假定你专门针对订单表定义了一个快捷菜单,这个快捷菜单的名称为“菜单A”,在订单表的BeforeShowContextMenu事件中设置如下代码:
 
e.ContextMenu = ContextMenus("菜单A")

是不是简单得不能再简单了?这短短一句代码可以让订单表显示快捷菜单“菜单A”,而其它表继续显示默认的快捷菜单。
 
示例二,同一个DataTable的不同Table,分别显示不同的快捷菜单
 
同样是对于订单表,希望主表Tables(“订单”)显示默认菜单,而对于其他基于订单表的关联Table,显示“菜单A”,代码如下:
 
If e.Table.IsRelation Then '如果是关联表
    e.ContextMenu = ContextMenus(
"菜单A") '显示快捷菜单"菜单A"
End
if

示例三,右击不同位置,显示不同的快捷菜单
 
假定右击订单表中的一个或多个单元格时,显示快捷菜单A,而右击其他位置,显示默认的菜单,代码如下:
 
'如果右击的是一个或多个单元格
If
e.HitType = HitTypeEnum.Cell OrElse e.HitType = HitTypeEnum.Range Then
    e.ContextMenu = ContextMenus(
"菜单A") '显示快捷菜单"菜单A"
End
If

示例四,不同状态的行,显示不同的菜单
 
假定定义了两个快捷菜单,“菜单A”和“菜单B”,分别针对订单表中已经锁定和没有锁定的行,代码如下:

If e.Table.Current Is Nothing Then '当前是Nothing
    e.Cancel =
True '不显示快捷菜单
ElseIf
e.Table.Current.Locked = True Then '当前行被锁定
    e.ContextMenu = ContextMenus(
"菜单A") '显示快捷菜单"菜单A"
Else
'否则
    e.ContextMenu = ContextMenus(
"菜单B") '显示快捷菜单"菜单B"
End
if

为了让你集中精力于事件上,不至于被代码纠缠,上面四个例子都很简单,希望你能举一反三。


本页地址:http://www.foxtable.com/webhelp/topics/0662.htm