MATLAB: UI without GUIDE. The problem with edit element

guiMATLAB

I try make UI without GUIDE
I wrote simple code:
function testui()
f=figure();
f.Color='black';
f.ToolBar='none';
ui=uicontrol('Style','edit');
ui.HorizontalAlignment='right';
ui.String='0';
myvar=2;
pb=uicontrol('Style','pushbutton','Position',[250 20 60 20],'String', 'Evaluate', 'Callback',{@pushbutton_callback,myvar,ui.String})
end
function pushbutton_callback(hObject,callbackdata,x,Y)
F=str2double(Y);
display(F)
display (x)
end
The problem is that even if I enter in edit box some string (number< say 10 and click "Enter", which must change the handle ui.String), I do not get this number in pushbutton_callback function. I get only predefined ui.String (if not empty): F = 0 x = 2 Instead of F = 10 x = 2 as expected. What do I wrong?
[EDITED, Jan. Please format your code – Thanks!]

Best Answer

You should be passing into the callback function the handle to your edit box. For example
... ,'Callback',{@pushbutton_callback,myvar,ui})
Then get the value from the edit box inside the callback. The way you are doing it, MATLAB is evaluating the value of the string and saving the literal as part of the callback function call. It will not evaluate it again.
With the revisions, your code becomes:
function testui()
f=figure();
f.Color='black';
f.ToolBar='none';
ui=uicontrol('Style','edit');
set(ui,'HorizontalAlignment','right') % set works in R2014a and older, too
set(ui,'String','0')
myvar=2;
uicontrol('Style','pushbutton','Position',[250 20 60 20],'String', ...
'Evaluate', 'Callback',{@pushbutton_callback,myvar,ui});
end
function pushbutton_callback(~,~,x,Y) % use ~ to ignore inputs we don't use
F=str2double(get(Y,'String'));
display(F)
display(x)
end