B4J控件的ContextMenu属性,也叫上下文菜单属性,用于在用户右键点击控件时显示一个自定义菜单(右键菜单)。在B4J中,设置右键菜单有两种方法:一种是直接用代码设置,一种是在设计器设置。
假设在B4XMainPage页面有一个文本标签Label1,显示文本为“abcdefg”。我们想为Label1添加2个菜单项:"显示大写",“显示小写”,点击这两个菜单项时Label1文本相应变为大写或小写,文本为大写时,"显示大写"菜单项不可用,文本为小写时,"显示小写"菜单项不可用。
我们用这个示例详细讲解如何设置ContextMenu。
一、用代码设置ContextMenu
1、在Class_Globals例程声明ContextMenu对象和菜单项
Private MyContextMenu As ContextMenu
Private MenuItem1 As MenuItem
Private MenuItem2 As MenuItem
2、在B4XPage_Created例程初始化ContextMenu对象和菜单项
MyContextMenu.Initialize("menu")
MenuItem1.Initialize("显示大写", "ToUpper")
MenuItem2.Initialize("显示小写", "ToLower")
3、将菜单项添加到ContextMenu对象
MyContextMenu.MenuItems.Add(MenuItem1)
MyContextMenu.MenuItems.Add(MenuItem2)
4、将 ContextMenu 附加到目标控件Label1上
MenuItem2.Enabled=False ' 因为Label1初始文本是小写
Label1.ContextMenu = MyContextMenu
5、为每个菜单项添加 Action 事件处理程序
Sub ToUpper_Action
Label1.Text=Label1.Text.ToUpperCase
MenuItem1.Enabled=False
MenuItem2.Enabled=True
End Sub
Sub ToLower_Action
Label1.Text=Label1.Text.ToLowerCase
MenuItem1.Enabled=True
MenuItem2.Enabled=False
End Sub
二、在设计器中设置ContextMenu
1、在设计器中选择您想要添加上下文菜单的控件Label1。
2、在属性窗口中找到控件的ContextMenu属性,并点击“...”按钮。
3、在弹出的编辑窗口写入如下JSON字符串并保存:
[
{Text:"显示大写",EventName: "ToUpper"},
{Text:"显示小写",EventName: "ToLower", Enabled: False}
]
4、在页面代码模块添加如下两个例程:
Sub ToUpper_Action
Label1.Text=Label1.Text.ToUpperCase
Label1.ContextMenu.MenuItems.Get(0).As(MenuItem).Enabled=False
Label1.ContextMenu.MenuItems.Get(1).As(MenuItem).Enabled=True
End Sub
Sub ToLower_Action
Label1.Text=Label1.Text.ToLowerCase
Label1.ContextMenu.MenuItems.Get(0).As(MenuItem).Enabled=True
Label1.ContextMenu.MenuItems.Get(1).As(MenuItem).Enabled=False
End Sub
这两种方法设置的右键菜单显示和使用效果完全一样。如下图: