BeforeShowContextMenu
如果你还没有接触菜单设计,可以暂时忽略本节内容。
关于菜单设计,我们会在后续章节介绍。
本事件显示快捷菜单之前执行,可以在此禁止显示快捷菜单,或更改要显示的快捷菜单。
如果是易表用户,而且用过易表的菜单设计功能,相当部分用户会对不能针对不同的表定义不同的快捷菜单而恼火,而现在有了BeforeShowContextMenu事件,别说不同的表,就是同一个DataTable的不同Table,同一个Table的不同列、不同状态的行,都可以显示不同的快捷菜单。
e参数属性:
参数 | 说明 |
Table | 触发事件的表 |
ContextMenu | 设置即将显示的快捷菜单,如果不设置,将显示默认的菜单,我们可以用ContextMenus获得指定名称的快捷菜单,例如:ContextMenus(“菜单A”)
什么是默认的快捷菜单? 在设计快捷菜单的时候,以下名称的快捷菜单将作为默认菜单: |
HitType | HitTypeEnum型枚举,表示右击区域的类型,包括以下可选值:
Column:右击区域是选定的某一列 可以看出,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为了让你集中精力于事件上,不至于被代码纠缠,上面四个例子都很简单,希望你能举一反三。