MATLAB では、クラス メソッドをパブリックにしなくても uicontrol コールバックとして機能できますか?
-
01-07-2019 - |
質問
MATLAB 2008a では、メソッドをパブリックにしなくても、クラス メソッドが uicontrol コールバック関数として機能できるようにする方法はありますか?概念的には、このメソッドはクラスのユーザーによって決して呼び出されるべきではないため、パブリックにするべきではありません。コールバックをトリガーする UI イベントの結果としてのみ呼び出す必要があります。ただし、メソッドのアクセスをプライベートまたは保護に設定すると、コールバックは機能しません。私のクラスは hgsetget から派生し、2008a classdef 構文を使用して定義されています。
uicontrol コードは次のようになります。
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
解決
コールバックの関数ハンドルをプライベート プロパティとして保存すると、問題を回避できるようです。これを試して:
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
所属していません StackOverflow