yangzj 发表于 2007-11-19 21:24

GUI事件发生顺序问题

我想实现在按按钮之前检查编辑框输入的正确性.
现在用的的是编辑框的callback函数来进行检查,出现的问题是当焦点在编缉框的时候,直接点击按钮,这时发生的顺序并不是我所想要的,而是先执行了按钮的callback函数,没有达到目的.不像在VC里控件有焦点事件,请问GUI里是用什么办法来实现这个功能?

[ 本帖最后由 yangzj 于 2007-11-19 21:29 编辑 ]

donkeyxu 发表于 2007-11-19 22:40

回复 #1 yangzj 的帖子

callback里加上判断,如果不是就不往下操作。

eight 发表于 2007-11-19 22:42

原帖由 yangzj 于 2007-11-19 21:24 发表 http://www.chinavib.com/forum/images/common/back.gif
我想实现在按按钮之前检查编辑框输入的正确性.
现在用的的是编辑框的callback函数来进行检查,出现的问题是当焦点在编缉框的时候,直接点击按钮,这时发生的顺序并不是我所想要的,而是先执行了按钮的callback函数 ...
检查输入字符的合法性问题最好的实现方式是放在 lostfocus 事件中,这在 vb 里面是有的,可是 matlab 中貌似没有,我有空再想想如何解决吧。

ps:直接放在 button 的 callback 中不行吗?即点击按钮后,先判断输入是否合法,再进行后续处理

yangzj 发表于 2007-11-19 22:55

谢谢,主要是参数太多,按钮也多,而且我想做成实时的检查,还要即时调整控件,实在不行只能放按钮事件里检查了

[ 本帖最后由 eight 于 2007-11-20 09:19 编辑 ]

eight 发表于 2007-11-20 16:56

可以使用 KeyPressFcn 事件。不过这个事件是在用户每输入一个字符以后就马上执行的,因此没有 lostfocus 那么好,后者是当用户输入完毕后才执行的。奇怪的是,figure 窗口有 keyreleasefcn 这个事件,但是 edit 就没有

yangzj 发表于 2007-11-20 20:11

谢谢eight

keyreleasefcn事件edit也有,不过这个不好用来检查合法性吧.
我现在是在edit的callback里进行检查,同时也在按钮的回调函数下进行检查.


上面是我界面的一小部分,现在问题是当我把质量改成一个非法值后直接点击工具栏中保存的时候,尽管在保存按钮回调函数的开头进行了检查判断,但仍然会进行保存,而且保存的是之前的值,也就是在保存的时候edit的string值并没变.而且奇怪的是当设置断点进行调试运行的时候又能捕捉到错误,也就是edit的string值已经变了.请问也没有可以强制更新所有控件的命令来放在保存函数的最前面?

yangzj 发表于 2007-11-20 22:31

经过试验,原来是这样的:当鼠标从编辑框离开直接点击客户区的任何区域(包括控件上)时都将首先引发它的回调函数,而当点击的是非客户区(如菜单栏、工具栏)的空白区时,则不会有任何响应,当点击的是非客户区的控件(如工具栏按钮),则首先引发是点击事件,然后才是编辑框的回调函数。
按这个原理的话,大家有没有什么办法来解决上面的问题?

eight 发表于 2007-11-21 09:07

原帖由 yangzj 于 2007-11-20 22:31 发表 http://www.chinavib.com/forum/images/common/back.gif
经过试验,原来是这样的:当鼠标从编辑框离开直接点击客户区的任何区域(包括控件上)时都将首先引发它的回调函数,而当点击的是非客户区(如菜单栏、工具栏)的空白区时,则不会有任何响应,当点击的是非客户区的 ...

其实你看看 edit 的 callback 函数代码的注释部分就知道了:当用户点击 edit 控件附近的区域时,事件被触发

eight 发表于 2007-11-21 11:59

原帖由 yangzj 于 2007-11-20 20:11 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢eight

keyreleasefcn事件edit也有,不过这个不好用来检查合法性吧.
我现在是在edit的callback里进行检查,同时也在按钮的回调函数下进行检查.

31000
上面是我界面的一小部分,现在问题是当我把质量改成 ...

keyreleasefun 也不太好,最好用 失去焦点 的事件。不过 matlab 好像没有,所以还是写在 button 的 callback 事件中吧

yangzj 发表于 2007-11-21 12:50

没办法了,我只好把几个按钮排一起来当工具栏用了

rap2009 发表于 2008-3-14 21:27

在Output函数下面,定义你分析的编辑框全局句柄,gHanldes。
然后在你的工具栏里调用guidata(gHanldes),它返回你编辑框存储的值。看看这样行不行。我也没试过。
页: [1]
查看完整版本: GUI事件发生顺序问题