问题描述
有三个按钮,分别对应了三种功能,用func1()、func2()和func2()表示。
在响应按钮时,要先运行前置函数pre(),再运行按钮对应的函数func(),最后运行后置函数suf()。如下所示:
mainForm.button1.oncommand = function(id,event){
pre();
func1();
suf();
}
mainForm.button2.oncommand = function(id,event){
pre();
func2();
suf();
}
mainForm.button3.oncommand = function(id,event){
pre();
func2();
suf();
}
这样就会将pre()和suf()写三遍.
一种解决方法
新定义一个函数
function main(func){
pre();
call(func);
suf();
}
按钮响应函数则为:
mainForm.button1.oncommand = function(id,event){
main(func1);
}
mainForm.button2.oncommand = function(id,event){
main(func2);
}
mainForm.button3.oncommand = function(id,event){
main(func3);
}
试验和结果
为了试验方便,将所有函数都设定为对话框,代码如下:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="窗口试验";right=447;bottom=447)
mainForm.add(
button1={cls="button";text="Button1";left=152;top=64;right=272;bottom=120;z=1};
button2={cls="button";text="Button2";left=152;top=160;right=272;bottom=216;z=2};
button3={cls="button";text="Button3";left=152;top=256;right=272;bottom=312;z=3}
)
/*}}*/
function main(func){
pre();
call(func);
suf();
}
function pre(){
mainForm.msgbox("前置函数")
}
function suf(){
mainForm.msgbox("后置函数")
}
function func1(){
mainForm.msgbox("按钮1")
}
function func2(){
mainForm.msgbox("按钮2")
}
function func3(){
mainForm.msgbox("按钮3")
}
mainForm.button1.oncommand = function(id,event){
main(func1);
}
mainForm.button2.oncommand = function(id,event){
main(func2);
}
mainForm.button3.oncommand = function(id,event){
main(func3);
}
mainForm.show();
return win.loopMessage();
实际效果如图: