En MATLAB, puede un método de clase actuar como un uicontrol de devolución de llamada sin ser público?

StackOverflow https://stackoverflow.com/questions/106086

Pregunta

En MATLAB, 2008a, hay una manera de permitir a un método de clase para actuar como un uicontrol función de devolución de llamada sin tener que hacer el método público?Conceptualmente, el método no debe ser pública, porque nunca debe ser llamado por un usuario de la clase.Sólo debe ser llamado como resultado de un evento de interfaz de usuario la activación de una devolución de llamada.Sin embargo, si puedo configurar el método de acceso privado o protegido, la devolución de llamada no funciona.Mi clase es derivada de hgsetget y se define mediante la 2008a classdef sintaxis.

El uicontrol código sería 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
¿Fue útil?

Solución

El almacenamiento de la función de la manija de la devolución de llamada como una propiedad privada parece la solución del problema.Intente 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top