Question

Dans MATLAB 2008a, existe-t-il un moyen d'autoriser une méthode de classe à agir en tant que fonction de rappel uicontrol sans avoir à rendre la méthode publique? Conceptuellement, la méthode ne devrait pas être publique car elle ne devrait jamais être appelée par un utilisateur de la classe. Il ne doit être appelé qu'à la suite d'un événement d'interface utilisateur déclenchant un rappel. Cependant, si je configure l'accès de la méthode à privé ou protégé, le rappel ne fonctionnera pas. Ma classe est dérivée de hgsetget et est définie à l'aide de la syntaxe classdef de 2008a.

Le code uicontrol ressemble à quelque chose comme:


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

Le code de rappel ressemble à:


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
Était-ce utile?

La solution

Le fait de stocker le descripteur de fonction du rappel en tant que propriété privée semble permettre de résoudre le problème. Essayez ceci:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top