在matlab中更新文本框

时间:2014-07-02 09:10:06

标签: matlab function textbox

我的matlab GUI存在问题,我没有使用GUIDE,我无法在其他地方找到问题的解决方案。问题是我有一个textboxeditbox。当我从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

1 个答案:

答案 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值。)