MATLAB: Pull String out of Edit Text without user hitting enter

edittextupdate

Hi,
I am building a GUI with an EditText box and I want to pull the String out of it in my program, essentially as follows:
s = get(handles.edittext, 'String');
However, I want to get whatever the user currently has typed in there, which appears only to update after the user hits enter, etc.
I have tried updating the edittext box programmatically by calling its callback, but it still does not give the currently typed String (it gives the prior-updated string). Example:
edittext_Callback(handles.edittext, [], handles);
I have also tried updating the focus using the 'uicontrol' function. Example:
uicontrol(handles.edittext);
But again, it only gives the string that was in the box when the user caused it to update.
I am at a loss. Is there any way to snag what the user currently has typed in the EditText without the user having to cause it to update manually?

Best Answer

The only way I know to do this (that doesn't involve Java), is to capture the user's input using the keypressfcn. As the user types, store the string using the keypressfcn and concatenation, then if the user does hit return clear the stored variable from the callback.
Here is a small example. You may want to add more checks, but I tried to cover enough to make it functional.
function [] = gui_keypress()
% Typing in the editbox puts the string in a textbox.
S.fh = figure('units','pixels',...
'position',[500 500 200 100],...
'menubar','none',...
'name','keypress',...
'numbertitle','off',...
'resize','off');
S.ed = uicontrol('style','edit',...
'unit','pix',...
'position',[10 10 180 30],...
'fontsize',14,...
'callback',@ed_call,...
'keypressfcn',@ed_kpfcn);
S.tx = uicontrol('style','text',...
'units','pix',...
'position',[10 60 180 30]);
S.STR = [];
guidata(S.fh,S);
uicontrol(S.ed)
function [] = ed_call(H,E)
% Callback for editbox.
S = guidata(gcbf); % Get the structure.

set(S.tx,'str',get(S.ed,'string'));
S.STR = [];
guidata(gcbf,S)
function [] = ed_kpfcn(H,E)
% Keypressfcn for editbox
S = guidata(gcbf); % Get the structure.
if strcmp(E.Key,'backspace')
S.STR = S.STR(1:end-1);
elseif isempty(E.Character)
return
else
S.STR = [S.STR E.Character];
end
set(S.tx,'string',S.STR)
guidata(gcbf,S)