Frage

In MATLAB 2008a, gibt es eine Möglichkeit, eine Klasse Methode, um zu handeln wie ein uicontrol callback-Funktion, ohne die Methode public?Konzeptionell sollte die Methode nicht öffentlich, denn es sollte nie aufgerufen werden, indem ein Benutzer der Klasse.Es sollte nur aufgerufen werden, als Ergebnis ein UI-Ereignis auslösen einen Rückruf.Allerdings, wenn ich die Methode Zugriff auf private oder protected, wird der Rückruf nicht funktioniert.Meine Klasse ist abgeleitet von hgsetget und ist definiert mit dem 2008a classdef syntax.

Die uicontrol code ungefähr so aussieht:


methods (Access = public)
   function this = MyClass(args)
      this.someClassProperty = uicontrol(property1, value1, ... , 'Callback', ...
      {@(src, event)myCallbackMethod(this, src, event)});
      % the rest of the class constructor code
   end
end

Die callback-code sieht wie folgt aus:


methods (Access = private)  % This doesn't work because it's private
   % It works just fine if I make it public instead, but that's wrong conceptually.
   function myCallbackMethod(this, src, event)
      % do something
   end
end
War es hilfreich?

Lösung

Speichern Sie die function handle der Rückruf als eine private Eigenschaft scheint zu umgehen das problem.Versuchen Sie dies:

classdef MyClass
    properties
        handle;
    end

    properties (Access=private)
        callback;
    end

    methods
        function this = MyClass(args)
            this.callback = @myCallbackMethod;
            this.handle = uicontrol('Callback', ...
                {@(src, event)myCallbackMethod(this, src, event)});
        end
    end

    methods (Access = private)
        function myCallbackMethod(this, src, event)
            disp('Hello world!');
        end
    end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top