2008-09-19 39 views
7

Trong MATLAB 2008a, có cách nào để cho phép một phương thức lớp hoạt động như một hàm gọi lại uicontrol mà không cần phải đặt phương thức đó thành công khai không? Về mặt khái niệm, phương thức này không nên được công khai vì nó không bao giờ được gọi bởi người dùng của lớp. Nó chỉ nên được gọi là kết quả của một sự kiện UI kích hoạt một cuộc gọi lại. Tuy nhiên, nếu tôi đặt quyền truy cập của phương thức thành riêng tư hoặc được bảo vệ, hàm gọi lại không hoạt động. Lớp của tôi có nguồn gốc từ hgsetget và được định nghĩa bằng cú pháp classdef 2008a.Trong MATLAB, một phương thức lớp có thể hoạt động như một cuộc gọi lại không được công khai không?

Mã uicontrol trông giống như sau:


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 

Mã gọi lại trông giống như:


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 

Trả lời

8

Lưu trữ các chức năng xử lý của callback như một sở hữu tư nhân dường như workaround vấn đề. Hãy thử điều này:

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 
Các vấn đề liên quan