Skip to content

NE 合集 19 · 弹层家族:Dialog · Drawer · 气泡 · Tooltip ​

《LingBuilder new_emoji 合集》第 19 集。反馈篇的第二集:上集的 Message / MessageBox 是「程序开口说话」,这一集是「程序给你递面板」——Dialog 弹窗、Drawer 抽屉,加上自带触发按钮的气泡三件套(Popover / Popconfirm / Tooltip)。全程约 35 分钟。

前置要求:完成第 01 集;建议先看第 18 集(消息与通知),本集延续「反馈类」这条线。本集源码包见文末。

这一集你将学会 ​

  • Dialog / Drawer:设计器里摆一块「弹层占位」,运行期用一条命令开合——NE弹窗_设置打开 / NE抽屉_设置打开
  • 气泡三件套:Popover(卡片气泡)、Popconfirm(确认气泡)、Tooltip(悬停提示)自带触发按钮,label 就是按钮文本,代码一行都不用写
  • 开合命令的三个参数:首参写 当前窗口、第二参写裸控件名、第三参 1 开 0 关
  • Popconfirm 的结果口径:引擎把 确认=1 / 取消=0 传给底层回调,IDE 侧是「结果变化」事件
  • 五个必须知道的实测行为:正文换行协议、首参传 0 静默无效、placement=0 弹在左侧、气泡点空白不关闭、弹层默认 open 别乱开

先看一眼本集成品——气泡、弹出确认、抽屉、对话框整一家子:

成品预览

1. 命令与事件预告 ​

命令 / 事件作用
NE弹窗_设置打开(当前窗口, 设置弹窗, 1)打开弹窗;第三参改 0 收回
NE抽屉_设置打开(当前窗口, 设置抽屉, 1)打开抽屉;第三参改 0 收回
Closed 事件(Dialog/Drawer)弹层被关掉时触发;不传原因,只知道关了
ValueChanged 事件(Popover)气泡卡片开合回调:开=1 / 关=0
ValueChanged 事件(Popconfirm)确认气泡结果回调:确认=1 / 取消=0
(Tooltip 无事件)纯悬停提示,没有回调

本集只需要 new_emoji 模块。

2. 新建项目 + 启用模块 + 切后端 ​

流程和第 1 集一样,项目名称填 弹层体验馆:

欢迎页

选择项目类型

填写项目名

进入工作台

模块面板搜「原生界面」→ 启用「new_emoji 原生界面库」:

搜索并启用

已启用

界面设计 → 选中窗口 → 确认「设计后端」是 new_emoji 模块:

切换设计后端

工具箱

3. 设计界面 ​

窗口 1000×680,左列是弹窗 + 抽屉的「弹层占位」,右列是三个气泡触发按钮,下面一排开合按钮和速查条。

控件名称左距顶距宽度高度关键属性
文本 Text标题文本322070036🪟 弹层家族:Dialog · Drawer · 气泡 · 提示,字号 21 粗体
文本 Text副标题文本326290024字号 13,#94A3B8
分割线 Divider标题分割线329693628两种驱动:命令控制开合 vs 控件自带触发器
文本 Text弹窗标签3213243022① Dialog 弹窗(模态 440×280,初始关闭),字号 12
弹窗 Dialog设置弹窗32158300120title=修改昵称 ✏️;body 一条字符串内 \n;open=假;modal=真;closable=真;draggable=真;dialogWidth=440;dialogHeight=280;事件 Closed
文本 Text抽屉标签3230043022② Drawer 抽屉(右侧滑出,宽 340),字号 12
抽屉 Drawer设置抽屉32326300110title=通知设置 🔔;body 一条字符串内 \n;placement=1(右侧);open=假;closable=真;size=340;事件 Closed
文本 Text气泡标签49213247622③ 自带触发器的气泡族(点 / 悬停试试),字号 12
气泡卡片 Popover帮助气泡49215828080label=🔎 什么是部署密钥?;title=部署密钥;content 一条字符串内 \n;placement=0;open=假;popupWidth=300;popupHeight=150;事件 ValueChanged
气泡确认 Popconfirm删除确认49225830080label=🗑️ 删除缓存目录;title=确认删除?;content;confirm=清空;cancel=再想想;placement=0;open=假;事件 ValueChanged
悬停提示 Tooltip版本提示49235826042label=v2.4.0;content=当前已是最新版本…;placement=0;open=假;showDelay=120
按钮 Button弹窗按钮3247017038🪟 打开设置弹窗,样式=主要(1)
按钮 Button抽屉按钮21447017038📖 打开通知抽屉,样式=成功(2)
按钮 Button关抽屉按钮39647017038🚪 关闭抽屉,样式=默认(0)
文本 Text数据协议说明3252093656字号 12,#94A3B8,自动换行
文本 Text状态文本3258493660字号 14,#7DD3FC,自动换行

3.1 数据协议红线:正文是一条字符串,换行用 \n ​

Dialog / Drawer 的 body、气泡三件套的 content 都是正文型 stringList。推荐写法是一条字符串、行与行之间嵌 \n:

在这里修改你的昵称。\n改完点右上角 × 关闭。

(发射器也支持把多条字符串按行拼接——在属性行里写成多行同样有效。但本教程统一用「单条 + \n」,和 12、13 集表格的 | 协议区分开:正文用 \n,列表项用 |。)

3.2 弹层是「占位控件」:设计器里那块卡片运行期看不见 ​

Dialog / Drawer 在设计器里显示为一块占位卡,运行窗口里它不占位置——只有命令把它打开后才出现。所以弹窗/抽屉在窗口里的左距顶距不是它弹出后的位置(弹窗自动居中,抽屉贴边滑出),摆哪儿都行,摆一起好管理。

红线:open 默认开着别乱开。 设计期开着方便预览,但运行一启动弹层就盖住界面。本集初始全部 open=假,用按钮打开。

3.3 气泡三件套:控件即按钮 ​

Popover / Popconfirm / Tooltip 自带触发按钮,label 属性就是按钮上的字——不需要再配一个 Button,也没有「打开气泡」的中文命令,点了触发按钮引擎自动弹。placement 是弹出方位,本集三个都填 0,实测弹在触发按钮的左侧(不是上方)。

设计器全景

4. 写代码 ​

lcpp
类 MainWindow
    事件 _MainWindow_创建完毕()
        控件_设置文本(状态文本, "🪟 欢迎来到弹层体验馆。左边是弹窗和抽屉(初始关闭),右边三个自带触发按钮;左下按钮用命令开合弹层。")
        调试输出("弹层体验馆已创建完毕")
    结束

    事件 _弹窗按钮_被单击()
        NE弹窗_设置打开(当前窗口, 设置弹窗, 1)
        控件_设置文本(状态文本, "🪟 NE弹窗_设置打开(设置弹窗, 1):模态弹窗弹出,右上 × 或点遮罩可关。")
    结束

    事件 _抽屉按钮_被单击()
        NE抽屉_设置打开(当前窗口, 设置抽屉, 1)
        控件_设置文本(状态文本, "📖 NE抽屉_设置打开(设置抽屉, 1):抽屉从右侧滑出,宽 340。")
    结束

    事件 _关抽屉按钮_被单击()
        NE抽屉_设置打开(当前窗口, 设置抽屉, 0)
        控件_设置文本(状态文本, "🚪 NE抽屉_设置打开(设置抽屉, 0):抽屉收回右侧。")
    结束

    事件 _设置弹窗_关闭()
        控件_设置文本(状态文本, "❎ 弹窗的「关闭」事件触发——Closed 回调不传原因,只知道关了。")
    结束

    事件 _设置抽屉_关闭()
        控件_设置文本(状态文本, "❎ 抽屉的「关闭」事件触发。")
    结束

    事件 _删除确认_结果变化()
        控件_设置文本(状态文本, "⚠️ 气泡确认的「结果变化」回调触发(引擎把 确认=1 / 取消=0 传给底层回调)。")
    结束

    事件 _帮助气泡_动作回调()
        控件_设置文本(状态文本, "💡 气泡卡片的「动作回调」触发(开=1 / 关=0)。")
    结束
结束类

三个看点:

  1. 开合命令首参必须写 当前窗口——它指定弹层挂在哪个窗口上。传 0 会静默无效(不报错、也不弹),网上旧示例里写 0 的写法别照抄。
  2. 第二参写裸控件名(设置弹窗,不带引号)——它引用的是设计器里的控件,不是字符串。
  3. 气泡两个回调共用 ValueChanged 事件名,但语义不同:Popover 回报开合(1/0),Popconfirm 回报选择结果(确认=1 / 取消=0)。

代码上半

代码中段

代码下半

5. 编译前先看错误列表 ​

点「编译当前项目」,先看底部错误列表——零报错再继续:

错误列表零报错

6. 运行!五种弹层各试一次 ​

点「运行」。左边两块弹层占位(运行期不显示),右边三个气泡触发按钮,下面一排开合按钮:

运行窗口

① 点「🪟 打开设置弹窗」——模态弹窗居中弹出,盖住右侧三张卡片,四周遮罩变暗。右上 × 或点遮罩都能关:

打开弹窗

② 点弹窗右上 ×——弹窗收回,Closed 回调触发。注意状态栏的说明:这个回调不传关闭原因,只知道「关了」:

弹窗关闭

③ 点「📖 打开通知抽屉」——抽屉从右侧滑出(宽 340),正文两行照设计器里 \n 的位置换行:

打开抽屉

④ 点「🚪 关闭抽屉」——同一条命令,第三个参数从 1 改成 0,抽屉收回右侧:

关闭抽屉

⑤ 点「🔎 什么是部署密钥?」——气泡卡片弹出:弹在触发按钮的左侧,标题 + 三行正文(\n 换行生效)。状态栏显示 ValueChanged 回调回报开=1:

气泡卡片

⑥ 点「🗑️ 删除缓存目录」——确认气泡弹出:⚠️ 图标 + 两行正文 + 「清空 / 再想想」两个按钮(按钮文字就是 confirm / cancel 属性):

气泡确认

⑦ 点「清空」——气泡自动收回,状态栏报「结果变化」回调触发。引擎把确认=1 / 取消=0传给底层回调;点「再想想」走的是同一个回调、结果为 0:

气泡确认结果

⑧ 鼠标悬停在 v2.4.0 上——Tooltip 延时 120 毫秒后弹出,同样在触发按钮左侧;鼠标移开自动消失,全程无回调:

悬停提示

实测红线:气泡三件套点空白不会关闭。 和网页的习惯不同,弹出的气泡点旁边空白不收,要再点一次触发按钮才收回(Tooltip 除外——它本来就是悬停即散)。给用户演示时记得提一句。

7. 导出源码包 ​

命令面板执行「项目:一键导出 LCPP 源码包」即可。

本集源码包 ​

下一集预告 ​

加载与状态:Loading 加载、Skeleton 骨架屏、Empty 空状态、Result 结果页、InfiniteScroll 滚动加载——数据没到/出错/到底了,界面怎么体面地等着。