今天开始学习事件驱动编程,突然觉得编程就像一场音乐会——每个程序组件都是乐器,而“事件”就像指挥棒的挥动,只有被触发时才会演奏。这种编程模式让程序能根据用户操作、系统状态变化做出响应。

一、事件绑定基础

事件绑定的关键是把事件和处理函数关联起来,我在aardio里试了两个例子:

示例1:按钮点击事件绑定

import win.ui;
/*DSG{{*/
var winform = win.form(text="事件绑定示例";right=759;bottom=469)
winform.add(
button={cls="button";text="点击我";left=327;top=202;right=432;bottom=241;z=1}
)
/*}}*/

// 定义按钮点击事件处理函数
winform.button.oncommand = function(id,event){
    win.msgbox("按钮被点击啦!")
}

winform.show();
win.loopMessage();

截图一

运行后点击按钮真的弹出了消息框!原来通过oncommand属性就能绑定点击事件,匿名函数里的逻辑就是事件触发后的动作。

示例2:窗口关闭事件绑定

import win.ui;
/*DSG{{*/
var winform = win.form(text="窗口关闭事件示例";right=759;bottom=469)
winform.add(
edit={cls="edit";text="关闭窗口试试";left=9;top=11;right=747;bottom=170;edge=1;multiline=1;z=1}
)
/*}}*/

winform.onClose= function(hwnd,message,wparam){
    select(message) {
        case 0x10{
            if(win.msgboxTest("你要关闭窗口么?") ===false){
                return wparam;
            }
        } 
    }
}
winform.show();
win.loopMessage();

截图二

这个例子让我学会了拦截系统事件——当点击窗口关闭按钮时,程序会先弹出确认框,选“否”就不关闭窗口。这里用onClose绑定事件,通过message参数判断是否为关闭事件(0x10是Windows消息中的WM_CLOSE)。

二、自定义事件”

系统事件不够用?那就自己定义!试了两个例子:

示例1:自定义事件触发

import win.ui;
/*DSG{{*/
var winform = win.form(text="自定义事件示例";right=759;bottom=469)
winform.add(
button={cls="button";text="触发自定义事件";left=327;top=202;right=432;bottom=241;z=1}
)
/*}}*/

// 定义自定义事件处理函数
var customEvent = function(){
    win.msgbox("自定义事件被触发啦!")
}

// 按钮点击时触发自定义事件
winform.button.oncommand = function(id,event){
    customEvent()
}

winform.show();
win.loopMessage();

截图三

先定义一个customEvent函数,再通过按钮点击事件调用它——这就像自己写了一段旋律,让按钮成为触发演奏的开关。

示例2:带参数的自定义事件

import win.ui;
/*DSG{{*/
var winform = win.form(text="带参数的自定义事件示例";right=759;bottom=469)
winform.add(
button={cls="button";text="触发带参数的自定义事件";left=327;top=202;right=432;bottom=241;z=1}
)
/*}}*/

// 定义带参数的自定义事件处理函数
var customEventWithParam = function(param){
    win.msgbox("自定义事件被触发,参数是:" + param)
}

// 按钮点击时触发带参数的自定义事件
winform.button.oncommand = function(id,event){
    customEventWithParam("Hello, aardio!")
}

winform.show();
win.loopMessage();

截图四

带参数的事件更灵活!比如可以让不同按钮传递不同文本,事件函数根据参数显示不同内容,这让程序逻辑更动态了。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐