ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ResizeFcn の動作が変更された理由

ResizeFcn コールバックの動作の変更は、Figure とコンテナーの配置およびレイアウトの変更を反映しており、Figure とコンテナーとの間、またすべてのプラットフォームの間でそれらの動作をより一貫性のあるものにしています。

プログラムの起動後に ResizeFcn がエラーを返す

R2014b からは、プログラム ファイル内のすべての変数が割り当てられる前に、ResizeFcn コールバックが実行されることがあります。この場合、ResizeFcn コールバックはエラーを返します。

たとえば、次のプログラムの ResizeFcn コールバックは、関数 createGUI が返す変数を使用します。

function mygui
 
    hs = createGUI;
 
    function handles = createGUI
        % Create figure and its children
        f = figure('Tag','fig',...
                   'ResizeFcn',@doResizeFcn,...
                   'Visible','off');
        u = uicontrol('Parent',f,'Tag','ctrl');
        handles = guihandles(f);
        
        % make figure visible
        set(f,'Visible','on');
    end
 
    function doResizeFcn(varargin)
        length(hs)
    end
end
新しいグラフィックス システムでこのプログラムを実行するとエラーが発生します。これは、doResizeFcn コールバックがはじめて実行されるとき (Figure が表示されるとき) に、hs が存在しないからです。
mygui
Undefined function or variable "hs".
Error in mygui/doResizeFcn (line 18)
        length(hs)

Error using mygui/createGUI (line 14)
Error while evaluating Figure SizeChangedFcn

この問題を解決するには、コールバックが参照するすべての変数が割り当てられた後に Figure を表示します。今回の場合では、関数 createGUI を呼び出した後に Figure を表示します。

function mygui
 
    hs = createGUI;
    % Make the figure visible
    set(hs.fig, 'Visible','on');
 
     function handles = createGUI
        % Create figure and its children
        f = figure('Tag','fig',...
                   'ResizeFcn',@doResizeFcn,...
                   'Visible','off');
        u = uicontrol('Parent',f,'Tag','ctrl');
        handles = guihandles(f);
 
    end
 
    function doResizeFcn(varargin)
        length(hs)
    end
end

非表示のコンポーネントで非アクティブな ResizeFcn

R2014b からは、Figure、パネル、ボタン グループなどの非表示コンテナーのサイズを変更しても、コンテナーが表示されるまで ResizeFcn コールバックはトリガーされません。

以前のリリースの MATLAB® では、コンテナーが表示されているかどうかには関係なく、コンテナーのサイズが変化すると ResizeFcn コールバックが実行されました。

Figure およびコンテナーの表示を制御するには、Visible プロパティを使用します。

  • Figure の Visible プロパティが 'on' に設定されている場合、Figure が表示されます。

  • Uipanel または Uibuttongroup は、それ自身とその先祖の Visible プロパティが 'on' に設定されている場合に表示されます。たとえば、親が Uipanel である Uibuttongroup は、Uibuttongroup、Uipanel および Figure の 'Visible' プロパティがすべて 'on' に設定されている場合に表示されます。

外側の境界または描画可能な領域を変更したときの予期しない動作

R2014b からは、Figure またはコンテナーの外側の境界を変更しても、ResizeFcn コールバックはトリガーされません。

たとえば、次のコードの 2 行目のメニュー バーを削除して OuterPosition を変更した場合、新しいグラフィックス システムではその Figure の ResizeFcn コールバックは実行されません。しかし、以前のリリースの MATLAB ではこのコールバックは実行されました。

f = figure('ResizeFcn','display resized');
set(f,'Menubar','none');

R2014b からは、コンテナーの描画可能な領域 (内側の領域) が変更された場合にのみ、ResizeFcn コールバックが実行されます。MATLAB の以前のリリースでは、描画可能な領域が変更されても ResizeFcn コールバックが実行されないことがありました。

たとえば、境界の幅を大きくして Uipanel の描画可能な領域を変更すると、新しいグラフィックス システムではこの Uipanel の ResizeFcn コールバックが実行されます。このコードを以前のリリースで実行した場合、コールバックは実行されません。

p = uipanel('ResizeFcn','display resized');
set(p,'BorderWidth',3);

関連するトピック