通过另一个 uicontrol MATLAB 启用一个 uicontrol
enable one uicontrol by another uicontrol MATLAB
我有 2 个 edittext uicontrol。如果第一个输入确保条件,我想启用第二个。但是,我遇到了错误 'Reference to non-existing field'。我的代码如下:
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18],...
'callback',{@eth_x_adet_enable,S});
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
function [] = eth_x_adet_enable(varargin)
S = varargin{3}
x_adet = str2double(get(S.eth_xadet,{'String'}));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end
错误实际上是因为这一行:
S = varargin{3}
您已经在回调定义中提供了 S
作为函数的输入参数,因此无需再次检索它。
如果删除该行,它就可以正常工作。正如@thewaywewalk 提到的,您应该提供一个用于获取错误的整个代码的最小示例。
或者,如果您在编辑框回调中显示 varargin
,您会看到 varargin{1}
实际上是 eth_xadet
的句柄,因此您可以使用
P = varargin{1}
x_adet = str2double(get(P,'String'));
它也可以正常工作。
无论如何,我只是创建了一个新函数并添加了一个句柄为 S.ph_agac
的图形,它工作正常:
function EnableEdit(~)
clc
clear
S.ph_agac = figure;
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18],...
'callback',{@eth_x_adet_enable,S});
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
function [] = eth_x_adet_enable(varargin)
%// =================
%// Note I removed the S = varargin{3} line
%// =================
x_adet = str2double(get(S.eth_xadet,'String'));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end
end
end
应在定义 uicontrol 之后定义回调。
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18]);
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
% Here this part solves the problem.
set(S.eth_xadet,'callback',{@eth_x_adet_enable,S})
function [] = eth_x_adet_enable(varargin)
S = varargin{3}
x_adet = str2double(get(S.eth_xadet,{'String'}));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end
我有 2 个 edittext uicontrol。如果第一个输入确保条件,我想启用第二个。但是,我遇到了错误 'Reference to non-existing field'。我的代码如下:
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18],...
'callback',{@eth_x_adet_enable,S});
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
function [] = eth_x_adet_enable(varargin)
S = varargin{3}
x_adet = str2double(get(S.eth_xadet,{'String'}));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end
错误实际上是因为这一行:
S = varargin{3}
您已经在回调定义中提供了 S
作为函数的输入参数,因此无需再次检索它。
如果删除该行,它就可以正常工作。正如@thewaywewalk 提到的,您应该提供一个用于获取错误的整个代码的最小示例。
或者,如果您在编辑框回调中显示 varargin
,您会看到 varargin{1}
实际上是 eth_xadet
的句柄,因此您可以使用
P = varargin{1}
x_adet = str2double(get(P,'String'));
它也可以正常工作。
无论如何,我只是创建了一个新函数并添加了一个句柄为 S.ph_agac
的图形,它工作正常:
function EnableEdit(~)
clc
clear
S.ph_agac = figure;
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18],...
'callback',{@eth_x_adet_enable,S});
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
function [] = eth_x_adet_enable(varargin)
%// =================
%// Note I removed the S = varargin{3} line
%// =================
x_adet = str2double(get(S.eth_xadet,'String'));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end
end
end
应在定义 uicontrol 之后定义回调。
% xadet is a number input
S.eth_xadet = uicontrol(S.ph_agac,'Style','edit',...
'String','1',...
'HorizontalAlignment','right',...
'BackgroundColor','w',...
'Position',[200 68 30 18]);
% xaralik is a number input
S.eth_xaralik = uicontrol(S.ph_agac,'Style','edit',...
'enable','off',...
'String','0',...
'HorizontalAlignment','right',...
'Position',[240 68 50 18]);
% Here this part solves the problem.
set(S.eth_xadet,'callback',{@eth_x_adet_enable,S})
function [] = eth_x_adet_enable(varargin)
S = varargin{3}
x_adet = str2double(get(S.eth_xadet,{'String'}));
if x_adet > 1 % if input is bigger than 1, enable xaralik
set(S.eth_xaralik,'enable','on',...
'BackgroundColor','w');
end