2017-09-15 96 views
-1

我嘗試在按住並釋放除輸入和麪板按鈕之外的其他位置的鼠標按鈕的同時,使uipanel更改邊框顏色。Matlab GUI回調問題

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」。

在評估圖WindowButtonDownFcn

未定義變量 「varargin」 或類 「varargin」 錯誤。

錯誤而評估圖WindowButtonUpFcn

回答

1

你的問題,你的替換聲明if線是你定義你的window callbacks爲特徵向量,其在變量varargin不存在的基本工作空間中進行評估。你可以將它們定義爲anonymous functions代替:

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])); 
+0

非常感謝!它完美的作品。 –

0

你沒有告訴你如何產生的誤差,但是從錯誤信息,我想你不到4個輸入參數調用的函數。然後varargin不存在,所以matlab給出了錯誤。

要避免錯誤,你需要檢查nargin使用varargin之前,例如,與

if nargin==5 % so length(varargin)==2 
+0

這就是我所說的功能[vabls.PatchFunctions,vabls.WindowFunctionA,vabls.WindowFunctionB] = DisableFigure(vabls.PatchHandles '' buttondownfcn '', ''」 」,guiele.CONTWIND,guiele.PolyEditPanel); –

+0

我的varargin是數字和uipanel。 –