1

set()オブジェクト指向の GUI プログラムを作成していますが、関数を使用して GUI 要素のプロパティを変更しようとすると問題が発生します。ボタンの有効化プロパティをオフからオンに変更しようとしているだけです。以下に同じ問題を示す要約コードを添付しました。matlab がクラスなどを処理する方法はかなり奇妙に感じられるため、問題は単に私のシステムの誤解が原因である可能性があります。set()とにかく、 で関数を使用しようとすると、関数でhandle AD.buttonExitコマンドを実行すると期待どおりに動作しinitUI()ます。別の関数で同じことをしようとすると、失敗します。の内容を印刷するだけでスタックを確認しましたADinitUI関数では、ハンドル値を明確に示していますbuttonExit、コンストラクター関数(または他のクラスメンバー関数)にはありません。私は初歩的な間違いを犯しているように感じますが、それはわかりません。誰かが私を助けてくれることを願っています.

-- rfigler

コード (わかりやすくするために省略):

classdef test

  properties 
      AppUI;
      buttonExit;
  end

  methods 
      function AD = test()
          %draws UI
          AD.initUI(); 
          set(AD.buttonExit, 'Enable', 'on')
          AD.test2()
      end
      function initUI(AD)
          AD.AppUI = figure('Visible','off','Position',[520,321,695,482], 'MenuBar', 'none', 'Name', '3D Particle Tracking',...
              'NumberTitle', 'off', 'Resize', 'off', 'Color', [0.94,0.94,0.94]);
          AD.buttonExit = uicontrol('Enable', 'off', 'Style', 'pushbutton', 'Visible', 'on', 'Position', [35,29,181,31], 'String', 'Exit');
          set(AD.AppUI, 'Visible', 'on');
          %1 set(AD.buttonExit, 'Enable', 'on')
      end
      function test2(AD)
          set(AD.buttonExit, 'Enable', 'on')
      end
  end
end
4

2 に答える 2

1

Matlab クラスは少し奇妙です。デフォルトでは、「ハンドル」クラスではなく「値」クラスです。違いはここで説明されています。

要するに、クラスをクラスに拡張handleさせると、他の OO 言語から期待されるように動作するようになります。クラス定義行を次のように変更するだけです

classdef test < handle
于 2012-06-12T02:29:53.560 に答える
0

initUI で AD を更新したため、更新された変数を出力する必要があります。したがって、次の行を変更する必要があります。

function initUI(AD)function AD = initUI(AD)

そして、test() 関数内:

AD.initUI();AD = AD.initUI();

于 2016-07-06T22:49:20.733 に答える