フィルターのクリア

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

3 ビュー (過去 30 日間)
yuuji yamada
yuuji yamada 2018 年 10 月 22 日
コメント済み: yuuji yamada 2018 年 10 月 23 日
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ではどのように昇順に取得すればよいでしょうか。

採用された回答

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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeアプリの作成 についてさらに検索

Community Treasure Hunt

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

Start Hunting!