在易语言中动态创建控件及响应事件
〖例程说明〗在程序运行时动态创建控件?的确有用,但在易语言中是怎样做的?不太复杂,不外是两步:根据同类原型控件样本复制一个新的同类控件;响应动态生成控件的事件。而动态复制控件样本又分三步:用“复制窗口组件”命令复制一个新的同类控件样本;安排好新创建控件的位置,并设置该控件可视为真;给新控件加上标记以便让程序识别是哪个新创建的控件。
其中需要注意两个前提事项:先要在编辑程序时,绘制一个提供在运行中复制的同类控件(本例叫“原型框”);用控件数组定义各个新控件以方便管理。
本例程示范最简单地创建控件并响应事件。示范在窗口中创建一个横排的编辑框列,每点一下按钮就在排中添加一个新的编辑框。当双击某个新编辑框时可以识别响应的是哪个新编辑框的“编辑框被双击”事件,从而决定由哪个新编辑框回应双击事件。
〖例程说明〗如下:
窗口程序集:窗口程序集1
程序集变量:新框数据类型:编辑框数组:0 备注:新的编辑框
易语言收费版和免费版的区别程序集变量:框号数据类型:整数型
══════════════════════════════
子程序:_按钮1_被单击
框号=框号+1
重定义数组(新框, 真, 框号)
复制窗口组件(原型框, 新框[框号])
新框[框号].移动(原型框.左边+原型框.宽度×框号, 原型框.顶边, 原型框.宽度, 原型框.高度)
新框[框号].内容=“按钮”+到文本(框号)
新框[框号].可视=真
新框[框号].标记=到文本(框号)
══════════════════════════════
子程序:_原型框_被双击
返回值类型:逻辑型
参数:横向位置数据类型:整数型
参数:纵向位置数据类型:整数型
参数:功能键状态数据类型:整数型
局部变量:框编号数据类型:整数型
局部变量:事件框数据类型:编辑框
局部变量:框编号1 数据类型:整数型
事件框=取事件组件()
框编号=到数值(事件框.标记)
信息框(“这是第”+到文本(框编号) +“个新编辑框”, 0, )
〖总结引申〗怎样才能使新创建的控件响应事件呢?其中关键是给复制好的新控件加上唯一的标记文本,然后在发生事件后用“取事件组件”命令获取事件发生的控件,并回应该事件。
还有另外一种方法也可以响应动态创建控件的事件,就是将动态控件的事件交由一个同类控件来响应并处理,要用“事件转移”命令转移事件控制权。示例将事件控件权交给原型编辑框,代码如下:
窗口程序集:窗口程序集1
程序集变量:新框数据类型:编辑框数组:0 备注:新的编辑框
程序集变量:框号数据类型:整数型
══════════════════════════════
子程序:_按钮1_被单击
框号=框号+1
重定义数组(新框, 真, 框号)
复制窗口组件(原型框, 新框[框号])
事件转移(新框[框号], 原型框)
新框[框号].移动(原型框.左边+原型框.宽度×框号, 原型框.顶边, 原型框.宽度, 原型框.高度)
新框[框号].内容=“按钮”+到文本(框号)
新框[框号].可视=真
新框[框号].标记=到文本(框号)
══════════════════════════════
子程序:_原型框_被双击
返回值类型:逻辑型
参数:横向位置数据类型:整数型
参数:纵向位置数据类型:整数型
参数:功能键状态数据类型:整数型
局部变量:框编号数据类型:整数型
局部变量:事件框数据类型:编辑框
局部变量:框编号1 数据类型:整数型
事件框=取事件组件()
框编号=到数值(事件框.标记)