オブジェクトをソートして取得(MatLab GUI)

6 views (last 30 days)
yuuji yamada
yuuji yamada on 22 Oct 2018
Commented: yuuji yamada on 23 Oct 2018
MatLab GUIでツールを作っており、matlab 2018aを使用しています。 入力項目を20個用意し、各々のオブジェクトにはTag名を edit_text1~edit_text20 まで割り当てています。 プログラムで panels = sort(findobj(form, '-regexp', 'Tag', 'edit_text')); とすることでedit_text1~edit_text20をTag名の昇順に取得しようとしました。 しかし、取得結果を見ると順番がバラバラで昇順にソートされていませんでした。matlab 2013bはうまくいっていたような気がしたのですが matlab 2018aではどのように昇順に取得すればよいでしょうか。

Accepted Answer

Kazuya
Kazuya on 23 Oct 2018
Edited: Kazuya on 23 Oct 2018
R2014a以前のバージョンだと、グラフィックスオブジェクトのハンドルは数値型でした。ですので、
findobj(form, '-regexp', 'Tag', 'edit_text')
と実行するとおそらく数値のベクトルが出力され sortでの並べ替えがうまくいっていたのだと想像しています。実際に上のコマンドを実行すると、R2014b 以降(R2018a含む)ではオブジェクト(UIControl)の配列が返ってくるはずです。これが sort が期待通りに動いていない要因です。
参考: R2014b でのグラフィックスの変更点 の"グラフィックス ハンドルが double からオブジェクトに変更"に詳しいです。
では、、どうすればいいのかですが、それぞれのオブジェクトの Tag を別途配列で取り出して、数字部分を抽出して、並べ替えて、それに合わせてオブジェクトの配列も並べ替える・・という方法か、、それとも必要な時に必要なオブジェクトを findobj で探し出すか。後者の方がコードの可読性は良いかもしれません。
  1 Comment
yuuji yamada
yuuji yamada on 23 Oct 2018
御回答ありがとうございます。 ご提案頂いたTagを別途取り出す方法を採用しようと思います。 ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on アプリの作成 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!