2008-09-19 10 views
7

Gibt es in MATLAB 2008a eine Möglichkeit, einer Klassenmethode zu ermöglichen, als eine uicontrol-Callback-Funktion zu fungieren, ohne die Methode veröffentlichen zu müssen? Konzeptionell sollte die Methode nicht öffentlich sein, da sie niemals von einem Benutzer der Klasse aufgerufen werden sollte. Es sollte nur aufgerufen werden, wenn ein Benutzeroberflächenereignis einen Rückruf auslöst. Wenn ich jedoch den Zugriff der Methode auf privat oder geschützt festlege, funktioniert der Rückruf nicht. Meine Klasse ist von hgsetget abgeleitet und wird mit der 2008a-Klassedef-Syntax definiert.Kann eine Klassenmethode in MATLAB als ein uicontrol-Callback fungieren, ohne öffentlich zu sein?

Die uicontrol Code sieht ungefähr so ​​aus:


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 

Der Callback-Code wie folgt aussieht:


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 

Antwort

8

die Funktion Griff der Callback-Speicher als Privateigentum scheint das Problem zu umgehen. Versuchen Sie Folgendes:

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 
Verwandte Themen