UIControl
オブジェクトおよびコールバックの更新
関数 uifigure
を使用して作成されたアプリでは、uibutton
や uidropdown
などのコンポーネント関数を使用して UI コンポーネントをアプリに追加します。関数 figure
および uicontrol
を使用したアプリの作成は、引き続きサポートされます。ただし、figure
ベースのアプリで UIControl
オブジェクトを使用するより、uifigure
ベースのアプリで UI コンポーネントを使用する方が便利です。たとえば、次の機能は uifigure
ベースのアプリにしかありません。
新しいコンポーネント タイプ (ツリー、ハイパーリンク、計器コンポーネントなど)
アプリのレイアウトを構成するレイアウト ツール (グリッド レイアウト マネージャーなど)
追加のコンポーネント カスタム オプション (テキスト配置とコンポーネント プレースホルダー テキストを制御するコンポーネント プロパティなど)
これらのメリットを活用するには、figure
ベースのアプリを移行して関数 uifigure
を使用します。次に、以下の手順に従って、アプリの UIControl
オブジェクトを UI コンポーネントに置き換えます。
関数
uicontrol
の呼び出しを、対応する UI コンポーネント関数の呼び出しに置き換えます。UI コンポーネントのプロパティを更新します。
UI コンポーネントのコールバックを更新します。
関数 uicontrol
の呼び出しの置換
関数 uicontrol
には、コントロールのスタイルを指定する引数があります。すべての UIControl
スタイルは、同様の機能と外観をもつ UI コンポーネント オブジェクトに対応します。uifigure
ベースのアプリでは、関数 uicontrol
の呼び出しを、対応する UI コンポーネント関数の呼び出しに置き換えます。次の表に、UIControl
スタイルと、それに対応する UI コンポーネント関数のリストを示します。
UIControl オブジェクト | UI コンポーネント オブジェクト | ||
---|---|---|---|
スタイル | 外観 | 関数 | 外観 |
'pushbutton' | | uibutton | |
'togglebutton' | |
| |
'checkbox' | | uicheckbox | |
'radiobutton' | | uiradiobutton | |
'edit' (1 行) | | uieditfield | |
'edit' (複数行) | | uitextarea | |
'text' | | uilabel | |
'slider' | | uislider | |
'listbox' | | uilistbox | |
'popupmenu' | | uidropdown | |
'frame' | | |
一部の 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 に追加されます。uibutton
や uicheckbox
などの 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
オブジェクトには、同じプロパティが多数あります。たとえば、どちらのタイプのオブジェクトにも、Position
、BackgroundColor
、および FontSize
プロパティがあります。UIControl
オブジェクトと UI コンポーネントの両方で、同じコードを使用してこれらのプロパティを設定できます。
ただし、アプリで特定の UIControl
プロパティを設定する場合、UI コンポーネントの使用に移行するときに、これらのプロパティの名前や値の更新が必要になることがあります。次の表に、UI コンポーネント プロパティとは異なる UIControl
オブジェクトの一般的なプロパティと、これらのプロパティをコードに設定する場合の推奨アクションを示します。この表に示されていないプロパティ関連エラーが発生した場合は、特定の UI コンポーネントのプロパティに関するページを参照して、エラーを解決してください。すべての UI コンポーネントとそれらのプロパティへのリンクの一覧については、アプリ作成コンポーネントを参照してください。
UIControl プロパティ | 説明 | 推奨アクション |
---|---|---|
String |
|
|
Units | UIControl オブジェクトの Units プロパティは、オブジェクトの測定単位を指定します。UI コンポーネント オブジェクトには Units プロパティがありません。すべての UI コンポーネントが、距離の測定にピクセル単位を使用します。 | ピクセル単位を使用するように UI コンポーネントの あるいは、正規化単位を使用してアプリのサイズ変更動作を管理する場合は、代わりにアプリ レイアウトを更新してグリッド レイアウト マネージャーを使用します。 詳細については、プログラムによるアプリのサイズ変更動作の管理を参照してください。 |
Value | Value プロパティは、特定の UIControl オブジェクトのステータスを変更します。これらの各 UIControl スタイルに相当する UI コンポーネントにも Value プロパティがあります。ただし、指定するプロパティ値の型が異なる場合があります。 |
|
ForegroundColor | UIControl オブジェクトの ForegroundColor プロパティは、コンポーネントのテキストの色を指定します。UI コンポーネントでは、このプロパティは FontColor という名前です。 | ForegroundColor へのすべての参照を FontColor に置き換えます。 |
Max と Min | Max プロパティおよび Min プロパティの値は、UIControl スタイルに応じて効果が異なります。UI コンポーネントには、より具体的な名前と動作の個別のプロパティがあります。 |
|
CData | CData プロパティは、UIControl オブジェクトと関連付けられるアイコンまたはイメージを指定します。アイコンをサポートする UI コンポーネントには、代わりとなる Icon プロパティがあります。さらに、アプリにイメージを表示するためのイメージ UI コンポーネントがあります。 |
|
Extent | UIControl オブジェクトの Extent プロパティは、そのテキストとフォント サイズに基づいてオブジェクトのサイズを格納します。UI コンポーネントには、これに相当するプロパティがありません。 | アプリで Extent プロパティを使用して、コンポーネントのサイズをそれに含まれているテキストに基づいて指定している場合は、関数 uigridlayout を使用して、グリッド レイアウト マネージャーを使用するようにアプリ レイアウトを更新します。テキストを使用するコンポーネントを含むグリッド列の列幅を 'fit' として指定します。これにより、コンポーネントのサイズがそれに含まれているテキストに合わせて拡大縮小します。 |
SliderStep | SliderStep プロパティは、ユーザーが矢印ボタンをクリックしたときのスライダーの値の変化量を制御します。関数 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
コールバックをアプリで使用している場合は、関数 uicontrol
を uieditfield
または uitextarea
に更新するときに、代わりに ValueChangingFcn
コールバックを使用することを検討してください。編集フィールドまたはテキスト エリア コンポーネントの ValueChangingFcn
コールバックは、ユーザーがコンポーネントに入力するときに繰り返し実行されます。
fig = uifigure;
ef = uieditfield(fig);
ef.ValueChangingFcn = @(src,event)disp("Typing...");
キーを押したときのコールバックとボタンダウン コールバック
すべての UIControl
オブジェクトには、ユーザーがオブジェクトをクリックすると応答する ButtonDownFcn
コールバックと、オブジェクトにフォーカスがあるときにユーザーがキーを押すと応答する KeyPressFcn
および KeyReleaseFcn
コールバックがあります。UI コンポーネントに関連付けられた、これに相当するコールバックはありません。ただし、コンポーネントを含む UI Figure で WindowButtonDownFcn
、WindowKeyPressFcn
、または WindowKeyReleaseFcn
コールバックを指定すれば、同じ動作になるようにコードを更新できます。これで、CurrentObject
プロパティを使用して、最後にクリックされたオブジェクトをクエリできます。
UIControl コールバック | UIFigure コールバック | 例 |
---|---|---|
ButtonDownFcn | WindowButtonDownFcn | fig = uifigure; lb = uilistbox(fig); fig.WindowButtonDownFcn = {@processClick,lb}; function processClick(src,event,lb) if src.CurrentObject == lb disp("List box clicked") end end |
KeyPressFcn | WindowKeyPressFcn | 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 |
KeyReleaseFcn | WindowKeyReleaseFcn | 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 |