我的matlab GUI存在问题,我没有使用GUIDE,我无法在其他地方找到问题的解决方案。问题是我有一个textbox
和editbox
。当我从editbox
更改焦点时,我希望我的textbox
获取新字符串,具体取决于editbox
中的内容。使用我当前的代码,我没有收到任何错误消息,但没有任何反应。
我的代码的相关部分:
nip_edit2=uicontrol('Parent', TabHandles{2,1}, ... % edit2_nip edit2
'Position', [round(PanelWidth/4.5) 15.4*ButtonHeight ButtonHeight ButtonHeight/2.5], ...
'String', '', ...
'Style', 'edit', 'backgroundcolor','white',...
'tag','edit2_nip_3',...
'callback',@nip_passiv) ;
nip_edit3=uicontrol('Parent', TabHandles{2,1}, ... % edit3_nip text1
'Position', [round(PanelWidth/4.5) 14.8*ButtonHeight ButtonHeight ButtonHeight/2.5], ...
'String', '', ...
'Style', 'text', 'backgroundcolor','white',...
'tag','edit3_nip_3'); `
function nip_passiv (edit2_nip_3,edit3_nip_3)
A1=360-str2double(get(edit2_nip_3,'string'))
if A1<0
errordlg('Angle 1 must be smaller than 360','Error');
return
elseif A1> 360
errordlg('Angle 1 must be bigger than 0','Error');
return
end
set(edit3_nip_3,'string',A1)
drawnow
end
答案 0 :(得分:0)
有几个地方你的代码可能会无声地破坏。
首先,带有无法从十进制转换为数字的字符串的str2double
将返回NaN
,这意味着所有后续操作(isnan()
,{{1}等测试除外) }等)将返回isfinite()
。此外,所有与确定数字的比较都将返回NaN
,这意味着如果用户输入false
,您的if
都不会执行。
其次,具有'abracadabra'
属性的set
函数的参数应该是字符串,而不是double。你会更好:
'String'
稍后编辑:
此外,您应该将set(edit3_nip_3, 'String', num2str(A1));
的回调样式视为编辑文本。 Here is the required list of arguments.我的建议不是将uicontrol
作为参数传递(因为第二个参数保留给事件数据),而是在创建时将其保存在主GUI edit3_nip_3
中(作为字段中的字段)结构,例如);回调需要知道哪个句柄是复制的目的地(因此它将使用第三个参数来定位handles
值。)