2017-09-15 4 views
-1

Ich versuche, den Uipanel Boarder Farben ändern, während Drücken und Loslassen der Maustaste an anderer Stelle als Eingänge und Panel-Tasten.Matlab GUI Callback Probleme

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); 

Der Fehler zeigt Undefinierte Variable "varargin" oder der Klasse "varargin".

Fehler beim Auswerten Abbildung WindowButtonDownFcn

undefinierten Variable "varargin" oder Klasse "varargin".

Fehler beim Auswerten Abbildung WindowButtonUpFcn

Antwort

1

Ihr Problem ist, dass Sie Ihre window callbacks als Zeichenvektoren sind definiert, die werden im Basisarbeitsbereich ausgewertet, wo die Variable varargin nicht existiert. Sie können sie als anonymous functions stattdessen definieren:

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

vielen Dank! Es funktioniert perfekt. –

0

Sie nicht zeigen, wie Sie den Fehler erzeugt, sondern aus der Fehlermeldung, ich denke, die Funktion mit weniger als 4 Eingabeargumenten genannt. Dann existiert varargin nicht, also gibt Matlab den Fehler.

Um den Fehler zu vermeiden, müssen Sie nargin überprüfen, bevor Sie varargin verwenden, zum Beispiel, ersetzen Sie Ihre if Anweisungszeile mit

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

Dies ist, wo ich die Funktion [vabls.PatchFunctions, vabls.WindowFunctionA, vabls.WindowFunctionB] rufen = DisableFigure (vabls.PatchHandles, '' buttondownfcn '', ''‘ ', guiele.CONTWIND, guiele.PolyEditPanel); –

+0

Meine Varargin sind die Figur und Uipanel. –