当前位置: 首页 > news >正文

JS宏实例:数据透视工具的制作(四)

上一节中,我们完成了核心的计算代码部分,本节中将完善事件代码

一、创建所有需求的事件函数

1、窗体初始化

// 窗体初始化
function pivotForm_Initialize(){} 
function typeSet_Initialize(){} 
function valueSet_Initialize(){} 
function allColTypeSet_Initialize(){}

上述是四个窗体显示前会执行的事件

2、主窗体部分事件

// pivotForm 主窗体事件
function pivotForm_CommandButton1_Click(){} 
function pivotForm_CommandButton2_Click(){} 
function pivotForm_CommandButton3_Click(){} 
function pivotForm_CommandButton4_Click(){} 
function pivotForm_CommandButton5_Click(){} 
function pivotForm_CommandButton6_Click(){}
function pivotForm_TextEdit1_Change(){} 
function pivotForm_ListBox1_DblClick(cancel){} 
function pivotForm_ListBox2_DblClick(cancel){}
function pivotForm_ListBox3_DblClick(cancel){} 
function pivotForm_ListBox4_DblClick(cancel){} 
function pivotForm_ListBox5_DblClick(cancel){}

3、附属窗体事件

// typeSet 单个字段设置窗体事件
function typeSet_CommandButton1_Click(){} 
function typeSet_CommandButton2_Click(){} 
function typeSet_CommandButton3_Click(){}
function typeSet_ComboBox1_Change(){} 
function typeSet_ComboBox2_Change(){}// valueSet 值字段设置窗体事件
function valueSet_CommandButton1_Click(){} 
function valueSet_CommandButton2_Click(){} 
function valueSet_CommandButton3_Click(){}
function valueSet_ComboBox1_Change(){} 
function valueSet_ComboBox2_Change(){} 
function valueSet_ComboBox3_Change(){}
function valueSet_ComboBox4_Change(){} 
function valueSet_ListBox1_Click(){}// allColTypeSet 字段类型设置窗体事件
function allColTypeSet_CommandButton1_Click(){} 
function allColTypeSet_ComboBox1_Change(){} 
function allColTypeSet_ComboBox2_Change(){}

注意:上述事件函数可以在全局定义,然后通过代理或闭包的方式去拦截它的调用,从而更改它的行为,因此,我们可以定义一个事件类和一个事件绑定方法来完成这一操作

二、事件类的构造函数

1、代码

commandButtonClick

// 事件类
function Events() {}
Events.prototype = {formInitialize: function(userform, obj, moveObj) {// userform 是一个窗体对象// obj 是一个对象,对象中的key是控件名称,值是一个数组存储默认值,或初始化// moveObj key = 要移动的控件名称,value = [left, top, height, width]for (let key in obj) {let str = key.match(/[a-zA-Z]+/g);if (str === "CommandButton" || str === "Label") {userform.Controls(key).Caption = obj[key][0];} else if (str === "ComboBox" || str === "ListBox") {obj[key].slice(1).forEach(i => userform.Controls(key).AddItem(i));userform.Controls(key).Value = obj[key][0];} else if (str === "TextEdit") {userform.Controls(key).Value = obj[key][0];}}for (let key in moveObj) {userform.Controls(key).Left = moveObj[0];userform.Controls(key).Top = moveObj[1];userform.Controls(key).Height = moveObj[2];userform.Controls(key).Width = moveObj[3];}},commandButtonClick: function(fu) {return fu;},textEditChange: function(fu) {return fu;},comboBoxChange: function(fu) {return fu;},listBoxDblClick: function(fu, cancel) {return fu;},
}

2、说明

在原型链中,定义了五个方法:

  • formInitialize:窗体初始化事件,也就是打开窗体要执行的操作
    • 参数
      • userform:窗体对象
      • obj:对象中的key是控件名称,值是一个数组存储默认值,或初始化操作数据
      • moveObj:key 是要移动的控件名称,value = [left, top, height, width]
    • 局限性
      • 未给出所有控件的操作方式
      • 为给出所有属性的操作
    • 优化方式
      • 通过Proxy对象来拦截该函数的调用,给他增加其他行为
      • 通过闭包,给它添加额外的操作等
  • commandButtonClick:命令按钮的点击事件,点击按钮时,执行传入的函数fu
  • textEditChange:文本框内容发生变化时,执行传入的操作函数fu
  • comboBoxChange:组合框内容发生变化时,执行传入的操作函数fu
  • listBoxDblClick:在列表框中双击某一元素时,执行传入的操作函数fu

暂未写玩,后续直接在这里补充

http://www.lryc.cn/news/542015.html

相关文章:

  • 5. Go 方法(结构体的方法成员)
  • 20250223学习记录
  • WPS携手DeepSeek:开启智能办公新时代
  • 无需服务器,浏览器跑700+AI模型?!
  • WSL2下ubuntu开启NFS服务
  • 深入了解 DevOps 基础架构:可追溯性的关键作用
  • k2路由器登录校园网
  • 构建知识图谱的关键:高效三元组抽取技术在文本挖掘中的应用
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时
  • 在 Vue 中处理跨域请求:全面解析与实践指南
  • 标量化rknn的输入输出向量转换处理
  • 认知重构 | 自我分化 | 苏格拉底式提问
  • Java集合之ArrayList(含源码解析 超详细)
  • Java笔记18
  • LangChain大模型应用开发:构建Agent智能体
  • 巧用GitHub的CICD功能免费打包部署前端项目
  • 【2】常用cmd命令大全、使用cmd运行和编译Java程序
  • UniApp SelectorQuery 讲解
  • 【行业解决方案篇十一】【DeepSeek零售分析:客流热力图生成系统】
  • 车载DoIP协议 --- TCP详细解析
  • C++关键字之mutable
  • 设计模式| 观察者模式 Observer Pattern详解
  • Git-速查
  • Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南
  • 深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)
  • 【网络安全】常见的web攻击
  • MySQL面试学习
  • 一文读懂Docker之Docker Compose
  • escape SQL中用法