ドキュメンテーション

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

プログラムによって作成されたアプリのコールバックの記述

異なるユーザー操作用のコールバック

UI とグラフィックスのコンポーネントのプロパティには、特定のコールバック関数に関連付けできるものがあります。これらのプロパティはそれぞれ、特定のユーザー操作に対応します。たとえば、uicontrol には、Callback と呼ばれるプロパティがあります。このプロパティの値は、コールバック関数へのハンドル、無名関数、または MATLAB® 式を含む文字ベクトルとして設定できます。このプロパティを設定すると、uicontrol を操作するときにアプリが応答するようになります。Callback プロパティに値が指定されていない場合、ユーザーが uicontrol を操作しても何も起きません。

次の表に、使用可能なコールバック プロパティ、コールバック関数をトリガーするユーザー操作、それらのプロパティを使用する一般的な UI コンポーネントとグラフィックス コンポーネントの一覧を示します。

コールバック プロパティ

ユーザー アクション

このプロパティを使用するコンポーネント

ButtonDownFcn

ポインターがコンポーネント上または Figure 上にあるときにエンド ユーザーがマウス ボタンをクリックする。

axes, figure, uibuttongroup, uicontrol, uipanel, uitable,

Callback

エンド ユーザーがコンポーネントをトリガーする。例: メニュー項目の選択、スライダーの移動、プッシュ ボタンの押し下げ。

uicontextmenu, uicontrol, uimenu

CellEditCallback

エンド ユーザーがテーブル内にある編集可能なセルの値を編集する。

uitable

CellSelectionCallback

エンド ユーザーがテーブル内のセルを選択する。

uitable

ClickedCallback

エンド ユーザーがマウスの左ボタンでプッシュ ツールまたはトグル ツールをクリックする。

uitoggletool, uipushtool

CloseRequestFcn

Figure が閉じる。

figure

CreateFcn

MATLAB がオブジェクトを作成し、そのオブジェクトが表示される前にコールバックが実行される。

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

DeleteFcn

MATLAB が Figure を削除する直前にコールバックが実行される。

axes, figure, uibuttongroup, uicontextmenu, uicontrol, uimenu, uipushtool, uipanel, uitable, uitoggletool, uitoolbar

KeyPressFcn

ポインターがオブジェクト上にあるときにエンド ユーザーがキーボードのキーを押す。

figure, uicontrol, uipanel, uipushtool, uitable, uitoolbar

KeyReleaseFcn

ポインターがオブジェクト上にあるときにエンド ユーザーがキーボードのキーを離す。

figure, uicontrol, uitable

OffCallback

トグル ツールの State'off' に変わると実行される。

uitoggletool

OnCallback

トグル ツールの State'on' に変わると実行される。

uitoggletool

SizeChangedFcn

Resize プロパティが 'on' に設定されているボタン グループ、Figure またはパネルのサイズをエンド ユーザーが変更する。

figure, uipanel, uibuttongroup

SelectionChangedFcn

エンド ユーザーが、ボタン グループ内にある別のラジオ ボタンやトグル ボタンを選択する。

uibuttongroup

WindowButtonDownFcn

ポインターが Figure ウィンドウ内にあるときにエンド ユーザーがマウス ボタンをクリックする。

figure

WindowButtonMotionFcn

エンド ユーザーが Figure ウィンドウ内でポインターを移動する。

figure

WindowButtonUpFcn

エンド ユーザーがマウス ボタンを離す。

figure

WindowKeyPressFcn

ポインターが Figure 上またはその子オブジェクト上にあるときにエンド ユーザーがキーを押す。

figure

WindowKeyReleaseFcn

ポインターが Figure 上またはその子オブジェクト上にあるときにエンド ユーザーがキーを離す。

figure

WindowScrollWheelFcn

ポインターが Figure 上にあるときにエンド ユーザーがマウス ホイールを回す。

figure

コールバック プロパティ値の指定方法

コールバック関数を UI コンポーネントに関連付けるには、コンポーネントのコールバック プロパティのいずれかの値をコールバック関数を参照するよう設定します。通常、この設定はコンポーネントの定義時に行いますが、コールバック プロパティの値はコード内の任意の位置で変更できます。

次のいずれかの方法で、コールバック プロパティの値を指定します。

関数ハンドルの指定

関数ハンドルを使用すると、関数を変数として表すことができます。この関数は、アプリ コードと同じファイル内のローカル関数または入れ子関数でなければなりません。または、MATLAB パス上の個別ファイル内に作成することもできます。

関数ハンドルを作成するには、関数の名前の前に @ 演算子を指定します。たとえば、次の uicontrol コマンドでは、Callback プロパティを関数 pushbutton_callback へのハンドルとすることを指定します。

b = uicontrol('Style','pushbutton','Callback',@pushbutton_callback);

次に、pushbutton_callback の関数定義を示します。

function pushbutton_callback(src,event)
   display('Button pressed');
end
関数ハンドルは入力引数を明示的に参照しませんが、関数宣言には 2 つの入力引数が含まれることに注意してください。これらの 2 つの入力引数は、関数ハンドルとして指定するすべてのコールバックに必要です。MATLAB では、コールバックの実行時にこれらの引数が自動的に渡されます。最初の引数は、コールバックをトリガーした UI コンポーネントです。2 番目の引数は、コールバック関数にイベント データを提供します。コールバック関数で使用できるイベント データがない場合、MATLAB では 2 番目の引数入力が空の配列として渡されます。次の表に、イベント データを使用するコールバックとコンポーネントを示します。

コールバックのプロパティ名コンポーネント
WindowKeyPressFcn
WindowKeyReleaseFcn
WindowScrollWheel
figure
KeyPressFcnfigureuicontroluitable
KeyReleaseFcnfigureuicontroluitable
SelectionChangedFcnuibuttongroup
CellEditCallback
CellSelectionCallback
uitable

コールバックを関数ハンドルとして指定する利点は、コールバックをコンポーネントに割り当てるときに MATLAB で関数の構文エラーや依存関係の不足を検査できることです。コールバック関数に問題がある場合、MATLAB は即座にエラーを返します。ユーザーによるコールバックのトリガーを待つ必要はありません。この動作により、ユーザー側で問題が発生する前にコード内の問題を見つけることができます。

cell 配列の指定

関数で使用する追加の入力引数を受け取るコールバック関数を指定するには、cell 配列を使用します。cell 配列の最初の要素は関数ハンドルです。cell 配列の他の要素は、使用する追加の入力引数です。これらはコンマで区切られます。指定する関数は、関数ハンドルの指定の説明に従って、同じ 2 つの入力引数を定義しなければなりません。ただし、最初の 2 つの引数の後に関数宣言で追加の入力を定義できます。

次の uicontrol コマンドは、プッシュ ボタンを作成し、Callback プロパティを cell 配列として指定します。この例では、関数の名前は pushbutton_callback、追加の入力引数の値は 5 です。

b = uicontrol('Style','pushbutton','Callback',{@pushbutton_callback,5});

次に、pushbutton_callback の関数定義を示します。

function pushbutton_callback(src,event,x)
   display(x);
end

コールバックを関数ハンドルとして指定する場合と同様に、コールバックをコンポーネントに割り当てるときに、MATLAB では cell 配列として指定されたコールバックの構文エラーや依存関係の不足をチェックします。コールバック関数に問題がある場合、MATLAB は即座にエラーを返します。ユーザーによるコールバックのトリガーを待つ必要はありません。この動作により、ユーザー側で問題が発生する前にコード内の問題を見つけることができます。

無名関数の指定

関数ハンドルと cell 配列に必要な 2 つの引数をサポートしない関数を UI コンポーネントで実行する場合は、無名関数を指定します。たとえば、次の uicontrol コマンドは、プッシュ ボタンを作成し、Callback プロパティを無名関数として指定します。この例では、関数の名前を myfun とし、その関数宣言は 1 つの入力引数 x のみを定義します。

b = uicontrol('Style','pushbutton','Callback',@(src,event)myfun(x));

MATLAB コマンドを含む文字ベクトルの指定 (非推奨)

いくつかの簡単なコマンドだけを実行する場合は文字ベクトルも指定できますが、コールバックに含まれるコマンド数が多くなるとコールバックの管理が難しくなることがあります。指定する文字ベクトルは、有効な MATLAB の式で構成されなければなりません。これには関数の引数を含めることができます。次に例を示します。

hb = uicontrol('Style','pushbutton',...
               'String','Plot line',...
               'Callback','plot(rand(20,3))');
文字ベクトル 'plot(rand(20,3))' は有効なコマンドであり、ボタンをクリックすると MATLAB がこの文字ベクトルを評価します。たとえば、次のように文字ベクトルに変数が含まれるとします。
'plot(x)'
この場合、ユーザーがコールバックをトリガーするときに変数 x はベース ワークスペースに存在しなければなりません。存在しない場合は、エラーが返されます。コールバック プロパティの値を代入する時点で変数が存在している必要はありませんが、ユーザーがコールバックをトリガーするときには存在していなければなりません。

関数ハンドルや cell 配列として指定されたコールバックとは異なり、MATLAB では文字ベクトルの構文エラーや依存関係の不足が "検査されることはありません"。MATLAB の式に問題があっても、コールバックをトリガーするまで未検出のまま残ります。

関連するトピック