How can I prevent questdlg bonking?
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
Provided is a simple construct not a working example of a code which bonks to excess until questdlg is satified. The relentless bonking overtakes all user control (keyboard and mouse). Is there a piece of code which mutes the neediness of questdlg?
while true
string = questdlg(...)
if strcmp(string, otherString)
do this task
end
update truth
end
tldr: quesdlg bonks relentlessly when unanswered within while loop. What is a simple fix to allow the user to do other tasks on their computer while leaving questdlg unanswered?
3 commentaires
Steven Lord
le 7 Sep 2017
From context I assume bonk means "modal dialog flashes when you attempt to click on another window." For example, click Open in the Toolstrip to bring up the file selection dialog then try to click back on the MATLAB Desktop. On my Windows machine, the edges of the dialog blink for a little while to try to draw your attention to the window that needs attention.
Réponses (4)
Steven Lord
le 7 Sep 2017
As Robert said, questdlg waits for you to answer. If it was able to proceed to the next line if left unanswered, what would you expect the variable string (BTW if you're actually using that as the name of your variable you may want to change it since now string has a meaning in MATLAB) to be on that next line where you compare it to otherString?
2 commentaires
John D'Errico
le 7 Sep 2017
Um, just don't use questdlg? There are far more usable interface styles in existence.
Robert U
le 7 Sep 2017
Hi geotocho,
since questdlg() is using an uiwait-command to prevent the user from interacting with the window the only suggestion is to write your own myQustdlg - GUI using dialog() in which the window is created as you desire.
questdlg() souce code can be read in Matlab R2014b. Thus, you can gain some inspiration.
Kind regards,
Robert
2 commentaires
Robert U
le 8 Sep 2017
Hi geotocho,
the function questdlg() is well documented and "open source". In case the functionality of that particular function is not serving your needs the only option would be to program your own. Even for that there are enough possibilities inside Matlab.
The same question was asked in 2011: https://de.mathworks.com/matlabcentral/newsreader/view_thread/314299. It was answered properly by Phil Goddard.
The developers you would like to feed are driven by customer needs. It seems that since 2011 there are not much customers asking for that feature or they are helping themselves.
Kind regards,
Robert
Walter Roberson
le 7 Sep 2017
There is no option to questdialog that has the behavior you are asking for. The behavior of modal dialogues is controlled by your operating system, not by MATLAB.
0 commentaires
Jed
le 9 Jan 2020
Modifié(e) : Jed
le 9 Jan 2020
There is a good answer to your question here:
2 commentaires
Walter Roberson
le 9 Jan 2020
No, if you do not use modal then the code will not wait for the reply, and will either destroy the dialog or continue without having received any answer.
Jed
le 3 Fév 2020
Walter: I am a somewhat inexperienced user on this forum, but I have still seen your name enough (and read enough of your answers) to know that you are a guru and someone to be trusted.
I am loathe to disagree with you, but I have tried modifying the questdlg.m function to remove the modal option and (for me at least) the question still blocks the code until a button is selected. I am using linux and an old 2012 version of matlab, so perhaps it is different for others. From the help text of questdlg, I read:
% QUESTDLG uses UIWAIT to suspend execution until the user responds.
and here is the code that implements this functionality from questdlg.m:
if ishghandle(QuestFig)
% Go into uiwait if the figure handle is still valid.
% This is mostly the case during regular use.
uiwait(QuestFig);
end
Voir également
Catégories
En savoir plus sur Dialog Boxes dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!