Main Content

UIControl オブジェクトおよびコールバックの更新

関数 uifigure を使用して作成されたアプリでは、uibuttonuidropdown などのコンポーネント関数を使用して UI コンポーネントをアプリに追加します。関数 figure および uicontrol を使用したアプリの作成は、引き続きサポートされます。ただし、figure ベースのアプリで UIControl オブジェクトを使用するより、uifigure ベースのアプリで UI コンポーネントを使用する方が便利です。たとえば、次の機能は uifigure ベースのアプリにしかありません。

  • 新しいコンポーネント タイプ (ツリー、ハイパーリンク、計器コンポーネントなど)

  • アプリのレイアウトを構成するレイアウト ツール (グリッド レイアウト マネージャーなど)

  • 追加のコンポーネント カスタム オプション (テキスト配置とコンポーネント プレースホルダー テキストを制御するコンポーネント プロパティなど)

これらのメリットを活用するには、figure ベースのアプリを移行して関数 uifigure を使用します。次に、以下の手順に従って、アプリの UIControl オブジェクトを UI コンポーネントに置き換えます。

  1. 関数 uicontrol の呼び出しを、対応する UI コンポーネント関数の呼び出しに置き換えます。

  2. UI コンポーネントのプロパティを更新します。

  3. UI コンポーネントのコールバックを更新します。

関数 uicontrol の呼び出しの置換

関数 uicontrol には、コントロールのスタイルを指定する引数があります。すべての UIControl スタイルは、同様の機能と外観をもつ UI コンポーネント オブジェクトに対応します。uifigure ベースのアプリでは、関数 uicontrol の呼び出しを、対応する UI コンポーネント関数の呼び出しに置き換えます。次の表に、UIControl スタイルと、それに対応する UI コンポーネント関数のリストを示します。

UIControl オブジェクトUI コンポーネント オブジェクト
スタイル外観関数外観
'pushbutton'

UIControl object with push button style

uibutton

Button UI component

'togglebutton'

Two UIControl objects with toggle button style in a button group

  • 1 つの独立した状態ボタンを表す 'state' スタイルの uibutton

  • リンクされたトグル ボタンのグループを表す uitogglebutton

Two toggle button UI components in a button group

'checkbox'

UIControl object with check box style

uicheckbox

Check box UI component

'radiobutton'

Two UIControl objects with radio button style in a button group

uiradiobutton

Two radio button UI components in a button group

'edit' (1 行)

UIControl object with single-line edit field style

uieditfield

Edit field UI component

'edit' (複数行)

UIControl object with multi-line edit field style

uitextarea

Text area UI component

'text'

UIControl object with text style

uilabel

Label UI component

'slider'

UIControl object with slider style

uislider

Slider UI component

'listbox'

UIControl object with list box style

uilistbox

List box UI component

'popupmenu'

UIControl object with pop-up menu style

uidropdown

Drop-down UI component

'frame'

UIControl object with frame style

Panel UI component

一部の UI コンポーネントの構成や動作は、対応する UIControl のものとは少し異なります。多くの場合、以下の手順でコードを更新すればそれらの相違点を調整できます。

スライダーの相違点

uislider を使用して作成されたスライダー UI コンポーネントと、スライダー UIControl オブジェクトとで外観が異なります。

ユーザーがコンテナー内をスクロールできるようにアプリで UIControl スライダーを使用している場合、スクロールを制御するコードを削除し、代わりに以下の代替方法を使用することを検討してください。

  • コンテナーの Scrollable プロパティを 'on' に設定してスクロールを有効にします。

  • 関数 scroll を使用して、プログラムによりコンテナー内をスクロールします。

テキスト入力の相違点

'edit' スタイルの UIControl オブジェクトでは、既定でテキストが中央に配置されますが、uieditfield および uitextarea UI コンポーネントではテキストが左揃えになります。HorizontalAlignment プロパティを指定して、これらの UI コンポーネントのテキスト配置を指定できます。

アプリで 'edit' スタイルの UIControl オブジェクトを使用して、ユーザーに数値の入力を許可している場合、代わりに関数 uieditfield を使用して引数 style"numeric" として指定することで、数値編集フィールドを作成できます。

fig = uifigure;
ef = uieditfield(fig,"numeric");

親コンテナーの相違点

関数 uicontrol と UI コンポーネント関数のどちらにも、親コンテナーを指定するためにオプションの 1 番目の入力引数があります。関数 uicontrol でこの引数を省略すると、コントロールが現在の Figure に追加されます。uibuttonuicheckbox などの UI コンポーネント関数でこの引数を省略すると、新しい UI Figure が作成され、コンポーネントがその Figure に追加されます。

uifigure ベースのアプリでは、関数 uifigure を使用してメイン アプリの UI figure を作成し、変数として Figure オブジェクトを返します。次に、その変数を UI コンポーネント関数の最初の引数として渡します。

fig = uifigure;
btn = uibutton(fig,"BackgroundColor","blue");
cbx = uicheckbox(fig,"Position",[220 100 84 22]);

詳細については、Update App Figure and Containersを参照してください。

コンポーネントのプロパティの更新

UI コンポーネント オブジェクトと UIControl オブジェクトには、同じプロパティが多数あります。たとえば、どちらのタイプのオブジェクトにも、PositionBackgroundColor、および FontSize プロパティがあります。UIControl オブジェクトと UI コンポーネントの両方で、同じコードを使用してこれらのプロパティを設定できます。

ただし、アプリで特定の UIControl プロパティを設定する場合、UI コンポーネントの使用に移行するときに、これらのプロパティの名前や値の更新が必要になることがあります。次の表に、UI コンポーネント プロパティとは異なる UIControl オブジェクトの一般的なプロパティと、これらのプロパティをコードに設定する場合の推奨アクションを示します。この表に示されていないプロパティ関連エラーが発生した場合は、特定の UI コンポーネントのプロパティに関するページを参照して、エラーを解決してください。すべての UI コンポーネントとそれらのプロパティへのリンクの一覧については、アプリ作成コンポーネントを参照してください。

UIControl プロパティ説明推奨アクション
String

UIControl オブジェクトの String プロパティは、コンポーネントの表示テキストを指定します。UI コンポーネントに応じて、このプロパティは、TextValue、または Items で置き換えられます。

  • ラベル、ボタン、およびチェック ボックス — String への参照を Text に置き換えます。

  • 編集フィールドとテキスト エリア — String への参照を Value に置き換えます。

  • ドロップダウン コンポーネントとリスト ボックス — String への参照を Items に置き換えます。

UnitsUIControl オブジェクトの Units プロパティは、オブジェクトの測定単位を指定します。UI コンポーネント オブジェクトには Units プロパティがありません。すべての UI コンポーネントが、距離の測定にピクセル単位を使用します。

ピクセル単位を使用するように UI コンポーネントの Position プロパティを更新します。

あるいは、正規化単位を使用してアプリのサイズ変更動作を管理する場合は、代わりにアプリ レイアウトを更新してグリッド レイアウト マネージャーを使用します。

詳細については、プログラムによるアプリのサイズ変更動作の管理を参照してください。

ValueValue プロパティは、特定の UIControl オブジェクトのステータスを変更します。これらの各 UIControl スタイルに相当する UI コンポーネントにも Value プロパティがあります。ただし、指定するプロパティ値の型が異なる場合があります。
  • 状態ボタン、トグル ボタン、ラジオ ボタン、チェック ボックス — Value を 0 (選択解除または上がった状態) または 1 (選択または押されている状態) として指定します。

  • ドロップダウン コンポーネントとリスト ボックス — ValueItems の要素として指定します。

  • スライダー — 変更は必要ありません。スライダーの Value プロパティの効果は、UIControl オブジェクトでも Slider UI コンポーネントでも同じです。

ForegroundColorUIControl オブジェクトの ForegroundColor プロパティは、コンポーネントのテキストの色を指定します。UI コンポーネントでは、このプロパティは FontColor という名前です。ForegroundColor へのすべての参照を FontColor に置き換えます。
MaxMinMax プロパティおよび Min プロパティの値は、UIControl スタイルに応じて効果が異なります。UI コンポーネントには、より具体的な名前と動作の個別のプロパティがあります。
  • スライダー — スライダーの最大値と最小値を設定するには、Limits プロパティを使用します。

  • 編集フィールドとテキスト エリア — 1 行テキストの編集フィールドと、複数行テキストのテキスト エリアを作成します。

  • リスト ボックス — ユーザーが複数の項目を選択できるようにするには、MultiSelect プロパティを 'on' に設定します。

CDataCData プロパティは、UIControl オブジェクトと関連付けられるアイコンまたはイメージを指定します。アイコンをサポートする UI コンポーネントには、代わりとなる Icon プロパティがあります。さらに、アプリにイメージを表示するためのイメージ UI コンポーネントがあります。
  • プッシュ ボタンとトグル ボタン — Icon を、トゥルーカラー RGB 値の 3 次元配列またはイメージ ファイルへのパスとして指定します。

  • スタンドアロン イメージ — 関数 uiimage を使用します。

ExtentUIControl オブジェクトの Extent プロパティは、そのテキストとフォント サイズに基づいてオブジェクトのサイズを格納します。UI コンポーネントには、これに相当するプロパティがありません。アプリで Extent プロパティを使用して、コンポーネントのサイズをそれに含まれているテキストに基づいて指定している場合は、関数 uigridlayout を使用して、グリッド レイアウト マネージャーを使用するようにアプリ レイアウトを更新します。テキストを使用するコンポーネントを含むグリッド列の列幅を 'fit' として指定します。これにより、コンポーネントのサイズがそれに含まれているテキストに合わせて拡大縮小します。
SliderStepSliderStep プロパティは、ユーザーが矢印ボタンをクリックしたときのスライダーの値の変化量を制御します。関数 uislider を使用して作成される Slider オブジェクトには、これに相当する機能がありません。更新する前に、この機能がアプリにとって重要であるかどうかを判断します。uifigure ベースのアプリには、これに相当する機能がありません。

コールバックの更新

UIControl オブジェクトには Callback プロパティがあります。このプロパティに割り当てられたコールバック関数は、ユーザー操作に応答して実行されます。ユーザー操作は UIControl のスタイルに応じて異なります。すべての UIControl スタイルについて、対応する UI コンポーネントにはそれに相当するコールバック プロパティがありますが、プロパティ名は対応するユーザー操作に固有です。アプリ コードを移行するには、Callback プロパティにコールバック関数を割り当てるときに、プロパティ名を、UI コンポーネントの相当するコールバック プロパティに更新します。次の表に、各コンポーネント タイプのコールバック プロパティ名を示します。

UIControl スタイルCallback ユーザー操作相当する UI コンポーネントのコールバック
'pushbutton'ユーザーがボタンをクリックする。ButtonPushedFcn
'togglebutton'ユーザーがボタンをクリックする。ButtonPushedFcn
'checkbox'ユーザーがチェック ボックスをオンまたはオフにする。SelectionChangedFcn
'radiobutton'ユーザーがボタンをクリックする。ButtonGroup コンテナーの SelectionChangedFcn
'edit'ユーザーが編集フィールドにテキストを入力する。ValueChangedFcn
'slider'ユーザーがスライダー値を変更する。ValueChangedFcn
'listbox'ユーザーが項目を選択する。ValueChangedFcn
'popupmenu'ユーザーが項目を選択する。ValueChangedFcn

たとえば、次のコードは、ユーザーがボタンを押したときに MATLAB® コマンド ウィンドウにステートメントを出力する、ボタン UIControl オブジェクトを作成します。

c = uicontrol;
c.Style = "pushbutton";
c.Callback = @(src,event)disp("Button pushed");
この動作は、uibutton コンポーネントを作成し、ButtonPushedFcn コールバック プロパティを設定するのと同じです。
fig = uifigure;
btn = uibutton(fig)
btn.ButtonPushedFcn = @(src,event)disp("Button pushed");

ユーザーが 'edit' スタイルの UIControl オブジェクトに入力しているときに応答する KeyPressFcn コールバックをアプリで使用している場合は、関数 uicontroluieditfield または uitextarea に更新するときに、代わりに ValueChangingFcn コールバックを使用することを検討してください。編集フィールドまたはテキスト エリア コンポーネントの ValueChangingFcn コールバックは、ユーザーがコンポーネントに入力するときに繰り返し実行されます。

fig = uifigure;
ef = uieditfield(fig);
ef.ValueChangingFcn = @(src,event)disp("Typing...");

キーを押したときのコールバックとボタンダウン コールバック

すべての UIControl オブジェクトには、ユーザーがオブジェクトをクリックすると応答する ButtonDownFcn コールバックと、オブジェクトにフォーカスがあるときにユーザーがキーを押すと応答する KeyPressFcn および KeyReleaseFcn コールバックがあります。UI コンポーネントに関連付けられた、これに相当するコールバックはありません。ただし、コンポーネントを含む UI Figure で WindowButtonDownFcnWindowKeyPressFcn、または WindowKeyReleaseFcn コールバックを指定すれば、同じ動作になるようにコードを更新できます。これで、CurrentObject プロパティを使用して、最後にクリックされたオブジェクトをクエリできます。

UIControl コールバックUIFigure コールバック
ButtonDownFcnWindowButtonDownFcn
fig = uifigure;
lb = uilistbox(fig);
fig.WindowButtonDownFcn = {@processClick,lb};

function processClick(src,event,lb)
    if src.CurrentObject == lb
        disp("List box clicked")
    end
end
KeyPressFcnWindowKeyPressFcn
fig = uifigure;
lb = uilistbox(fig);
fig.WindowKeyPressFcn = {@processKeyPress,lb};

function processKeyPress(src,event,lb)
    if src.CurrentObject == lb
        disp("List box key pressed")
    end
end
KeyReleaseFcnWindowKeyReleaseFcn
fig = uifigure;
lb = uilistbox(fig);
fig.WindowKeyReleaseFcn = {@processKeyRelease,lb};

function processKeyRelease(src,event,lb)
    if src.CurrentObject == lb
        disp("List box key released")
    end
end

関連するトピック