声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1837|回复: 10

[GUI界面] GUI事件发生顺序问题

[复制链接]
发表于 2007-11-19 21:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

[ 本帖最后由 yangzj 于 2007-11-19 21:29 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-11-19 22:40 | 显示全部楼层

回复 #1 yangzj 的帖子

callback里加上判断,如果不是就不往下操作。
发表于 2007-11-19 22:42 | 显示全部楼层
原帖由 yangzj 于 2007-11-19 21:24 发表
我想实现在按按钮之前检查编辑框输入的正确性.
现在用的的是编辑框的callback函数来进行检查,出现的问题是当焦点在编缉框的时候,直接点击按钮,这时发生的顺序并不是我所想要的,而是先执行了按钮的callback函数 ...

检查输入字符的合法性问题最好的实现方式是放在 lostfocus 事件中,这在 vb 里面是有的,可是 matlab 中貌似没有,我有空再想想如何解决吧。

ps:直接放在 button 的 callback 中不行吗?即点击按钮后,先判断输入是否合法,再进行后续处理
 楼主| 发表于 2007-11-19 22:55 | 显示全部楼层
谢谢,主要是参数太多,按钮也多,而且我想做成实时的检查,还要即时调整控件,实在不行只能放按钮事件里检查了

[ 本帖最后由 eight 于 2007-11-20 09:19 编辑 ]
发表于 2007-11-20 16:56 | 显示全部楼层
可以使用 KeyPressFcn 事件。不过这个事件是在用户每输入一个字符以后就马上执行的,因此没有 lostfocus 那么好,后者是当用户输入完毕后才执行的。奇怪的是,figure 窗口有 keyreleasefcn 这个事件,但是 edit 就没有
 楼主| 发表于 2007-11-20 20:11 | 显示全部楼层
谢谢eight

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

gui.bmp
上面是我界面的一小部分,现在问题是当我把质量改成一个非法值后直接点击工具栏中保存的时候,尽管在保存按钮回调函数的开头进行了检查判断,但仍然会进行保存,而且保存的是之前的值,也就是在保存的时候edit的string值并没变.而且奇怪的是当设置断点进行调试运行的时候又能捕捉到错误,也就是edit的string值已经变了.请问也没有可以强制更新所有控件的命令来放在保存函数的最前面?
 楼主| 发表于 2007-11-20 22:31 | 显示全部楼层
经过试验,原来是这样的:当鼠标从编辑框离开直接点击客户区的任何区域(包括控件上)时都将首先引发它的回调函数,而当点击的是非客户区(如菜单栏、工具栏)的空白区时,则不会有任何响应,当点击的是非客户区的控件(如工具栏按钮),则首先引发是点击事件,然后才是编辑框的回调函数。
按这个原理的话,大家有没有什么办法来解决上面的问题?
发表于 2007-11-21 09:07 | 显示全部楼层
原帖由 yangzj 于 2007-11-20 22:31 发表
经过试验,原来是这样的:当鼠标从编辑框离开直接点击客户区的任何区域(包括控件上)时都将首先引发它的回调函数,而当点击的是非客户区(如菜单栏、工具栏)的空白区时,则不会有任何响应,当点击的是非客户区的 ...


其实你看看 edit 的 callback 函数代码的注释部分就知道了:当用户点击 edit 控件附近的区域时,事件被触发
发表于 2007-11-21 11:59 | 显示全部楼层
原帖由 yangzj 于 2007-11-20 20:11 发表
谢谢eight

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

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


keyreleasefun 也不太好,最好用 失去焦点 的事件。不过 matlab 好像没有,所以还是写在 button 的 callback 事件中吧
 楼主| 发表于 2007-11-21 12:50 | 显示全部楼层
没办法了,我只好把几个按钮排一起来当工具栏用了
发表于 2008-3-14 21:27 | 显示全部楼层
在Output函数下面,定义你分析的编辑框全局句柄,gHanldes。
然后在你的工具栏里调用guidata(gHanldes),它返回你编辑框存储的值。看看这样行不行。我也没试过。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 08:28 , Processed in 0.067808 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表