2008-09-19 5 views
7

MATLAB 2008a में, क्या विधि विधि को सार्वजनिक किए बिना क्लास विधि को यूकंट्रोल कॉलबैक फ़ंक्शन के रूप में कार्य करने की अनुमति देने का कोई तरीका है? संकल्पनात्मक रूप से, विधि सार्वजनिक नहीं होनी चाहिए क्योंकि इसे कक्षा के उपयोगकर्ता द्वारा कभी नहीं बुलाया जाना चाहिए। इसे कॉलबैक ट्रिगर करने वाले यूआई ईवेंट के परिणामस्वरूप ही कहा जाना चाहिए। हालांकि, अगर मैंने विधि या निजी या संरक्षित पहुंच को सेट किया है, तो कॉलबैक काम नहीं करता है। मेरी कक्षा hgsetget से ली गई है और 2008a क्लासडेफ़ सिंटैक्स का उपयोग करके परिभाषित किया गया है।MATLAB में, क्या क्लास विधि सार्वजनिक होने के बिना यूकंट्रोल कॉलबैक के रूप में कार्य कर सकती है?


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 

कॉलबैक कोड लगता है:


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 

उत्तर

8

भंडारण कॉलबैक का कार्य संभाल के रूप में एक निजी संपत्ति समस्या वैकल्पिक हल के लिए लगता है

uicontrol कोड की तरह कुछ लग रहा है। इसे आज़माएं:

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 
संबंधित मुद्दे

 संबंधित मुद्दे