我正在编写一个测试函数,该函数将通过多个场景运行,并且在每个场景中,我想询问用户是否愿意继续。如果他们说不,那么我将保存变量并退出程序。此函数应该有一个超时,此时代码继续运行,没有选项退出,直到下一个方案启动。我的问题是超时。
我已经考虑过设置questdlg,但设置超时的唯一方法似乎是修改questdlg.m文件,这是我不能做的(由于后勤原因)。
创建一个消息框并使用uiwait停止代码效果很好,但我不知道如何确定用户是否单击了OK按钮或者如何在超时后使框消失。
问题:
如何确定msgbox中是否按下按钮?
如何让msgbox消失?
有没有其他方法可以询问用户是否要停止使用a运行测试 超时?
答案 0 :(得分:2)
困难的部分是你的第一个问题。
我的第一个想法(下面更好的一个)是建议你根据时间检查用户是否点击确定或超时:
tic
hmsg=msgbox('message','title','modal');
uiwait(hmsg,5); %wait 5 sec
然后根据时间检查用户是否按下按钮或由于超时而继续执行:
if toc < 5 %then the user hit the button before timeout
%no need to close the msgbox (user already did that)
%appropriate code here...
else %we got here due to timeout
close(hmsg); %close the msgbox
%appropriate code here
end;
如果他们在线路上达到超时并且它试图关闭已经关闭的窗口,则可能会出现一个小错误。如果这成为一个问题,我认为您可以测试句柄是否有效:
ishandle(hmsg)
在尝试关闭之前。
我认为更好的方式:
hmsg=msgbox('message','title','modal');
uiwait(hmsg,5); %wait 5 sec
%now check to see if hmsg is still a handle to find out what happened
if ishandle(hmsg) %then the window is still open (i.e. timeout)
disp('timeout');
close(hmsg);
%appropriate code here...
else %then they closed the window
disp('user hit button');
%other code here
end;