B4X编程语言:设置B4J控件的上下文菜单(ContextMenu)

发布于:2024-12-07 ⋅ 阅读:(48) ⋅ 点赞:(0)

        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

        这两种方法设置的右键菜单显示和使用效果完全一样。如下图: