ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで変更されています。このリリースの英語のドキュメンテーションを参照するには、言語設定を United States に変更してください。

関数ハンドル コールバック

はじめに

グラフィックス オブジェクトの多くのプロパティには、コールバック関数を定義することができます。特定のイベントが発生すると (プッシュ ボタンのクリックや、Figure の削除など)、対応するコールバック関数が実行されます。コールバック プロパティの値は、以下のように指定することができます。

  • MATLAB® コマンドまたは関数名である文字列

  • 文字列のセル配列

  • 関数ハンドルまたは関数ハンドルと付加的な引数を含むセル配列

次の複数の節では、関数ハンドル コールバックの定義方法を説明します。

関数ハンドルの一般的な情報は「関数ハンドル」のリファレンス ページを参照してください。

関数ハンドルの構文

Handle Graphics® では、関数ハンドル コールバックとして利用する関数は、関数定義内で少なくとも 2 つの入力引数を定義しなければなりません。

  • コールバックを生成するオブジェクトのハンドル (イベントのソース)

  • イベント データ構造体 (コールバックによっては空であることも可能)

MATLAB は、コールバックが実行されるたびに上記の 2 つの引数を暗黙的に渡します。たとえば、単一のファイルにある以下のステートメントを考えます。

function myGui
% Create a figure and specify a callback
figure('WindowButtonDownFcn',@myCallback)
			.
			.
			.
% Callback local function defines two input arguments
function myCallback(src,eventdata)
			.
			.
			.

最初のステートメントは、Figure を作成し、(関数名の前に @ を付けて作成される) 関数ハンドルを WindowButtondownFcn プロパティに割り当てます。この関数ハンドルは、ローカル関数 myCallback を示します。myCallback の定義では、関数定義行で 2 つの必須入力引数を指定しなければなりません。

付加的な入力引数を渡す

関数定義に付加的な入力引数を加えることによって、それらをコールバック関数内で利用できるように定義することができます。

function myCallback(src,eventdata,arg1,arg2)

コールバック関数に対して付加的な引数を利用するとき、プロパティの値をセル配列に設定しなければなりません (すなわち、関数ハンドルと引数を中かっこで囲まなければなりません)。

figure('WindowButtonDownFcn',{@myCallback,arg1,arg2})

コールバックを文字列のセル配列として定義 - 特殊な場合

コールバックを文字列のセル配列として定義することは、MATLAB はそれらを単純な文字列とは異なる取り扱いをするため、特殊な場合となります。コールバック プロパティを文字列に設定すると、MATLAB はコールバックが実行されるときベース ワークスペース上でその文字列を評価します。しかしながら、コールバックを文字列のセル配列に設定する場合は以下が必要になります。

  • セル配列には、最初の文字列要素として MATLAB パス上にあるファイルの名前が含まれていなければなりません。

  • コールバックでは、少なくとも 2 つの引数 (コールバック オブジェクトのハンドルと空行列) が定義されていなければなりません。

  • セル配列にあるすべての他の文字列は、引数としてコールバックに渡されます。

たとえば以下のようになります。

figure('WindowButtonDownFcn',{myCallback,arg1})

では、3 つの引数を使用する関数ファイルを定義することが求められます。

function myCallback(src,eventdata,arg1)

関数ハンドル コールバックを使う理由

コールバックの指定に関数ハンドルを使用すると、MATLAB コマンドか、実行時に MATLAB パス上にあるファイル名でなければならない文字列を使用する場合に比べ、いくつかの利点があります。

すべてのコードに対する単一のファイル

関数ハンドルを使うと、すべてのコールバックに対して単一のファイルを使用することができます。この機能は、レイアウト コマンドとコールバックを 1 つのファイルに含めることが可能なため、グラフィカル ユーザー インターフェイスを作成しているときに役立ちます。

ローカル関数へのアクセス方法については、「ローカル関数」 を参照してください。

変数を有効範囲内に保持する

MATLAB が関数ハンドルを評価するとき、同じ変数が関数ハンドルが作成されたときのように、有効範囲内にあります(対照的に、文字列として指定されたコールバックは、ベース ワークスペースで評価されます)。これにより、GUI のオブジェクト ハンドルのようなグローバル データの管理プロセスが簡略化されます。

たとえば、ワークスペース変数を表示するリスト ボックスと、リスト ボックスで選択された変数を使用してそのコールバックがプロットを作成するプッシュ ボタンをもつ GUI を作成すると仮定します。プッシュ ボタンのコールバックは、選択された変数名を問い合わせるリスト ボックスのハンドルが必要になります。以下に行うべきことを示します。

  1. リスト ボックスを作成し、ハンドルを保存します。

    h_listbox = uicontrol('Style','listbox',... etc.);
  2. リスト ボックスのハンドルを、同じファイル内で定義されるプッシュ ボタンのコールバックに渡します。

    h_plot_button = uicontrol('Style','pushbutton',...
       'Callback',{@plot_button_callback,h_listbox},...,etc.);

リスト ボックスのハンドルは、グローバル変数に依存したり、ハンドルを検索するために findobj を使わなくてもプロット ボタンのコールバックで利用可能です。

コールバック オブジェクト ハンドルとイベント データ

MATLAB は、コールバックの実行時に追加情報をコールバックに渡します。この情報は、コールバック オブジェクトのハンドル (コールバック イベントのソース) と、特定のコールバック プロパティに特有のイベント データが含まれます。

たとえば、Figure の KeyPressFcn プロパティに対して出力されるイベント データは、どのキーが押されたかに関する情報を含む構造体です。

あるコールバック プロパティに関連するイベント データに関する情報は、プロパティのドキュメンテーションと共に含まれます。

関数ハンドルを有効範囲に保持する

関数ハンドルは、実行時に有効範囲にない関数を示す場合があります。たとえば、別のファイル内にあるローカル関数などです。

関数ハンドルの一般的な説明については、function handle および「無名関数」を参照してください。

この情報は役に立ちましたか?