You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将用户控件内元素事件抛给父HMI控件及实现自定义事件触发?

HMI用户控件自定义输入事件实现方案

一、创建用户控件专属的事件触发符号

打开用户控件编辑界面,在专属符号表(不要使用HMI全局内部符号)中创建以下符号:

  • 数字输入相关:布尔型bNumericInputRequested(触发键盘显示)、bNumericInputClosing(触发键盘隐藏);整数型nNumInputX、nNumInputY(存储触发控件的屏幕坐标)
  • 字母输入相关:布尔型bAlphabetInputRequested、bAlphabetInputClosing;整数型nAlphaInputX、nAlphaInputY

二、绑定内部控件焦点事件到符号

选中用户控件内的输入控件,配置焦点事件逻辑:

  • 数字输入控件的.onFocusIn事件:执行WriteToSymbol操作,将bNumericInputRequested设为TRUE,同时把当前控件的屏幕坐标写入nNumInputX、nNumInputY
  • 数字输入控件的.onFocusOut事件:执行WriteToSymbol操作,将bNumericInputClosing设为TRUE
  • 字母输入控件同理,将.onFocusIn绑定到bAlphabetInputRequested = TRUE,.onFocusOut绑定到bAlphabetInputClosing = TRUE

三、在HMI页面监听用户控件实例的事件

将用户控件拖入HMI页面后,每个实例会自动带上专属符号(例如UserControl_1.bNumericInputRequested):

  1. 给HMI页面添加逻辑监听这些符号的上升沿:
    • 监听UserControl_1.bNumericInputRequested:触发显示数字键盘,读取nNumInputX、nNumInputY定位键盘位置
    • 监听UserControl_1.bNumericInputClosing:触发隐藏数字键盘,之后需把bNumericInputClosing重置为FALSE(避免重复触发)
  2. 多实例场景下,每个实例的符号独立命名,分别对应监听即可

四、优化细节

  • 为避免单次焦点事件重复触发监听,可在用户控件内部添加逻辑:当bNumericInputRequested被设为TRUE后,延迟100ms左右自动重置为FALSE
  • 如果直接获取控件坐标有问题,可提前在用户控件内部将每个输入控件的坐标存入对应符号

内容的提问来源于stack exchange,提问作者mijmij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:29