-1

我尝试在除输入和面板按钮之外的其他地方按下和释放鼠标按钮时使 uipanel 更改边框颜色。

function    [oldpropvalues,varargout]=DisableFigure(handlearray,prop,propvalue,varargin);

  oldpropvalues=get(handlearray,prop);

  %this IF is used to highlight the "modal" panel when anywhere outside it is pressed

  if length(varargin)==2  

    %these two are the old windowbutton functions which will be put back when the window is put back to normal.
    varargout{1}=get(varargin{1},'windowbuttondownfcn');    
    varargout{2}=get(varargin{1},'windowbuttonupfcn');

    set(varargin{1},'windowbuttondownfcn',['set(varargin{2},''bordertype'',''line'',''borderwidth'',2,''highlightcolor'',[0 0 0])']);
    set(varargin{1},'windowbuttonupfcn',['set(varargin{2},''bordertype'',''beveledout'',''borderwidth'',1,''highlightcolor'',[1 1 1])']);

  end 

  set(handlearray,prop,propvalue);

错误显示未定义的变量“varargin”或类“varargin”。

评估 Figure WindowButtonDownFcn 时出错

未定义的变量“varargin”或类“varargin”。

评估 Figure WindowButtonUpFcn 时出错

4

2 回答 2

1

您的问题是您将窗口回调定义为字符向量,这些字符向量在变量varargin不存在的基本工作区中进行评估。您可以将它们定义为匿名函数

set(varargin{1}, 'WindowButtonDownFcn', ...
    @(~, ~) set(varargin{2}, 'BorderType', 'line', 'BorderWidth', 2, ...
                'HighlightColor', [0 0 0]));
set(varargin{1}, 'WindowButtonUpFcn', ...
    @(~, ~) set(varargin{2}, 'BorderType', 'beveledout', 'BorderWidth', 1, ...
                'HighlightColor', [1 1 1]));
于 2017-09-18T17:42:06.673 回答
0

你没有展示你是如何产生错误的,但从错误消息中,我猜你用少于 4 个输入参数调用了这个函数。然后varargin不存在,所以matlab给出了错误。

为避免该错误,您需要nargin在使用之前进行检查varargin,例如,将您的if语句行替换为

if nargin==5 % so length(varargin)==2
于 2017-09-16T01:16:07.067 回答