我正在编写一个测试函数,它将通过多个场景运行,并且在每个场景中,我都想询问用户是否想继续。如果他们说没有,那么我将保存变量并退出程序。这个函数应该有一个超时,在这个超时点上,代码将继续运行,没有退出选项,直到下一个场景开始。我的问题是超时。
我已经研究了设置一个questdlg,但是设置超时的唯一方法似乎是修改questdlg。我的文件,我不能做(由于后勤原因)。
创建消息框并使用uiwait停止代码工作得很好,但我不知道如何确定用户是否单击了OK按钮或如何使框在超时后消失。
问题:
如何确定按钮是否在msgbox中被按下?
如何使提示框消失?
是否有另一种方法来询问用户是否想要停止运行测试超时?
最难的部分是你的第一个问题。
我的第一个想法(更好的想法在下面)是建议你根据时间检查用户是点击OK还是超时:
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;