Domanda

In MATLAB 2008a, c'è un modo per consentire a un metodo di classe di agire come una funzione di callback di uicontrol senza dover rendere pubblico il metodo? Concettualmente, il metodo non dovrebbe essere pubblico perché non dovrebbe mai essere chiamato da un utente della classe. Dovrebbe essere chiamato solo come risultato di un evento UI che attiva un callback. Tuttavia, se imposto l'accesso del metodo su privato o protetto, il callback non funziona. La mia classe deriva da hgsetget ed è definita usando la sintassi classaf 2008a.

Il codice uicontrol è simile a:


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

Il codice di richiamata è simile a:


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
È stato utile?

Soluzione

La memorizzazione dell'handle di funzione del callback come proprietà privata sembra risolvere il problema. Prova questo:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top