How to update edit box's callback as soon as entering data?
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a modal guide gui with bunch of editable edit boxes. everything works out except for when I attempt to close the gui immediately after entering a new input (with keyboard) in any one of the edit boxes. It's like the changes is not effective unless I click somewhere on the gui's figure before closing it.
Any help is appreciated
0 commentaires
Réponses (2)
Oleg Komarov
le 6 Août 2012
Modifié(e) : Oleg Komarov
le 9 Août 2012
There is a problem with the edit box, I show a solution here: http://www.mathworks.in/matlabcentral/answers/33136#answer_41732
And this thread explains the behaviour of the MATLAB's edit box: http://www.mathworks.com/matlabcentral/newsreader/view_thread/151905
No, unfortunately it doesn't work even if I try to give focus to the figure. This is the script (it works in debugging mode but to no use)
function out = mygui
% Create a simple guy with one editbox
h.f = figure('toolbar','none','menubar','none');
h.e = uicontrol('Style','edit','units','pix','position',[100 100 200,20]);
% Set CloseRequestFcn
set(h.f, 'CloseRequestFcn',@f_crf)
% Set into wait so that we can assign out
uiwait(h.f)
% Assign out IF resumed
out = h.out;
% Close gui
delete(h.f)
function f_crf(varargin)
% Force focus to figure
set(h.e,'Visible','off')
drawnow
set(h.e,'Visible','on')
% Retrieve string
h.out = get(h.e,'string');
% Resume
uiresume(h.f)
end
end
1 commentaire
Matt Fig
le 9 Août 2012
Modifié(e) : Matt Fig
le 9 Août 2012
There is a way to do this without Java, but it can get messy and can involve lots of coding. Take Oleg's advice and use Java. Here I altered Oleg's GUI to include some Java to allow you to close the GUI without hitting return or clicking in the GUI window after entering data.
function out = mygui
% Create a simple gui with one editbox
h.f = figure('toolbar','none','menubar','none');
h.e = uicontrol('Style','edit','units','pix','position',[100 100 200,20]);
h.r = java.awt.Robot;
h.k = java.awt.event.KeyEvent.VK_ENTER;
% Set CloseRequestFcn
set(h.f, 'CloseRequestFcn',@f_crf)
% Set into wait so that we can assign out
uicontrol(h.e)
uiwait(h.f)
% Assign out IF resumed
out = h.out;
% Close gui
delete(h.f)
function f_crf(varargin)
pause(.25)
h.r.keyPress(h.k) % press return!
drawnow
h.out = get(h.e,'string');
uiresume(h.f)
end
end
hana
le 9 Août 2012
1 commentaire
Oleg Komarov
le 9 Août 2012
See my answer, I added another consideration and some code which won't work. So far to my knowledge the only solution is Java.
It's not that complicated you should give it a try.
Voir également
Catégories
En savoir plus sur Startup and Shutdown 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!