2008-09-19 13 views
7

En MATLAB 2008a, ¿hay alguna manera de permitir que un método de clase actúe como una función de devolución de llamada uicontrol sin tener que hacer que el método sea público? Conceptualmente, el método no debe ser público porque nunca debe ser llamado por un usuario de la clase. Solo se debe invocar como resultado de un evento UI que desencadene una devolución de llamada. Sin embargo, si configuro el acceso del método a privado o protegido, la devolución de llamada no funciona. Mi clase se deriva de hgsetget y se define utilizando la sintaxis classdef 2008a.En MATLAB, ¿puede un método de clase actuar como una devolución de llamada uicontrol sin ser público?

código El uicontrol se ve algo como:


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 

El código de devolución de llamada se parece 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 

Respuesta

8

Almacenamiento del mango en función de la devolución de llamada como una propiedad privada parece solucionar el problema. Pruebe esto:

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 
Cuestiones relacionadas