最近使用MATLAB App Designer开发了一个图像处理的App。总体感觉,还是比较方便和快捷的。App Designer和GUI的一个显著区别是,就是App Designer默认采用的是类作为的窗口,而GUI为函数。因此,通过类的事件进行较为方便和复杂的窗口响应就变得重要。
接下来这个专题blog用具体的示例展示App Designer中事件的使用。阅读者最好有C#事件使用的基础。
今天是第一讲,主题是properties的事件。
属性的事件,通常是属性值发生变化的时候,需要采取的一些操作和处理。常见的就是一个属性变化后,我们让窗体做出响应的显示。
下面以例子来说明。
对于初级设计用户界面的同学而言,会将这个例子中的所有代码写进 “计算”的回调函数里面。但通过事件,我们可以让代码更加明确,进一步分工。这里展开几个核心的代码:
1、自定义的属性
Avalue、Bvalue、Cvalue分布存储A,B,C的值,Cstatus显示C的奇偶性。由于A,B是用户输入,C是计算结果显示,因此,C的属性值发生变化时,要进行事件响应。故Cvalue和Cstatus要显示可见(SetBbservable)。
2、初始化(窗体的startup回调)
代码的最后两行是关键,增加事件监听者,意思是,窗体监听属性Cvalue和Cstatus的PostSet事件,并按照app.CvalueChangedFcn和app.CstatusChangedFcn进行处理。PostSet的属性值的默认事件,意思是属性值发生变化以后触发该事件。
有四个与属性相关的预定义事件:
PreSet
– 在设置属性值(调用其 set 访问方法)前即刻触发PostSet
– 设置属性值后即刻触发PreGet
– 在响应属性值查询(调用其 get 访问方法)前即刻触发PostGet
– 返回查询的属性值后即刻触发
3、CvalueChangedFcn和CstatusChangedFcn函数
这两个函数用于响应事件,将Cvalue和Cstatus的值赋给窗体控件并显示。
4、“计算”按钮的回调
这个计算按钮就单纯多了,只干计算的事情。
最后的效果
通过今天这个例子,我们可以成功利用事件将app不同的功能区分开,增强了代码的易读性,使得后期维护修改更加容易,对于稍微复杂的软件,这点特别重要。
完整代码可以在github下载():
https://github.com/gouff/MatlabEventExample/blob/master/EasyEvent.mlapp
下一个例子,将描述完全自定义一个事件,包括事件定义、触发定义、事件监听、事件处理。