AppDesigner ボタンの種類を変更できますか?

7 views (last 30 days)
良文
良文 on 26 Dec 2023
Commented: 良文 on 8 Jan 2024
AppDesignerでボタンコンポーネントなどを配置してアプリケーションを作っていましたが、
ボタンの種類を間違えて、”Button”ではなく"StateButton"をたくさん配置してしまいました。
ボタン押下時のコールバックはそのままで、配置したボタンの種類を変更することはできないでしょうか?

Accepted Answer

Tak
Tak on 26 Dec 2023
Edited: Tak on 26 Dec 2023
手元のバージョンは R2021b ですが appdesigner の設計ビュー上の操作では状態ボタンコンポーネントの変換ができなさそうですね。
いくつかの方法は提示してみますが、どれも手間としては変わらないのでひとつひとつ置き換えていくのが最善な気がします。
ボタンの置き換え
地味な作業にはなりますが、設計ビュー上で新しいボタンに置き換えます。
  1. 新たなボタンを配置
  2. 状態ボタンの ButtonValueChanged コールバックからコードをコピー
  3. ボタンの ButtonPushed コールバックへコードをペースト
  4. 状態ボタンを削除
状態ボタンのコールバックデフォルトで value = app.Button.Value; のように状態を参照していた部分は削除の必要があります。また、他にも状態ボタンにしかない参照があればコードの修正が必要になります。
状態ボタンをボタンのように見せかける
状態ボタンの ButtonValueChanged コールバック内にボタンの状態を書き換えるコードを挿入します。
コールバックの最初に
app.Button.Value = false;
と状態を強制的に false に書き換えるコードを挿入することで、疑似的にボタンのように見せかけることができます。
もちろんボタンの状態を強制的に書き換えますので、コールバック内でボタンの状態を参照している部分も合わせて修正する必要がある点には注意してください。
UIの設計としてどうなのか…という点は別として、ひとまずコールバックにコードを1行追加するだけで済みます。
M-ファイルとしてエクスポートしてコードとして修正する
各種コンポーネントの配置についてコードを自動生成してくれている appdesigner から切り離されてしますので、デメリットが大きいですが、M-ファイルとしてエクスポートしてしまえばコードとして修正が可能になります。
修正ポイントとして代表的なのは以下の部分です。
properties ブロック内の matlab.ui.control.StateButtonmatlab.ui.control.Button に変更する。
classdef myapp < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
Button matlab.ui.control.StateButton
end
...
end
methods ブロック内で uibutton(app.UIFigure, 'state') となっている部分を uibutton(app.UIFigure, 'push') に変更する。
既にコールバックを記述している場合は app.Button.ValueChangedFcn についても app.Button.ButtonPushedFcn に変更する必要があります。
classdef myapp < matlab.apps.AppBase
...
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
...
% Create Button
app.Button = uibutton(app.UIFigure, 'state');
app.Button.ValueChangedFcn = createCallbackFcn(app, @ButtonValueChanged, true);
...
end
end
その他、 ボタンのプロパティ状態ボタンのプロパティ を見比べながら、細かなコールバックの記述を直したりする必要があるかもしれません。
コールバック関数名についても、コードの可読性の観点から見直したい…など、appdesignerから切り離した場合、コンポーネントブラウザやコードの自動生成で管理されていたものを、ユーザーがクラスM-ファイルとして可読性を考慮して記述する必要が出てきます。
appdesigner が便利なのであまりオススメはしません。
  1 Comment
良文
良文 on 26 Dec 2023
Edited: 良文 on 26 Dec 2023
グレーアウトされているcreateComponents(app)なんかを書き換える裏ワザなんかないかなーと
思ったのですが、やっぱりだめっぽいですね。
色々なやり方を教えていただきありがとうございました。
アプリ作成の初期段階だったので、地道に一つ一つコンポーネントを置き換えていくことにします。

Sign in to comment.

More Answers (1)

Hiroshi Iwamura
Hiroshi Iwamura on 27 Dec 2023
R2024a からできるようになるようです。
App Designer: Convert between additional similar UI components
To convert one type of UI component to another with similar functionality, right-click the component on the canvas or in the Component Browser and select Replace With. Then, select the component to convert to. Replacing one component with another preserves relevant property values, such as font properties and callbacks that exist for both components. For example, you can now convert component types within these additional groups:
  • Push button and state button
  • Tree and check box tree
  • List box and drop-down component
Prerelease版を入れればできるかと思います。
  1 Comment
良文
良文 on 8 Jan 2024
情報ありがとうございました。

Sign in to comment.

Categories

Find more on UI コンポーネント クラスの開発 in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!