質問

ガイドを使用して、簡単なMatlab GUIを構築しています。アイテムのリストボックスがあります。ほとんどの場合、それは期待どおりに機能しますが、時々(通常はガイドでフィギュアを編集した後)リストボックスを入力すると、このメッセージとともに消えます。

Warning: single-selection listbox control requires a scalar Value
Control will not be rendered until all of its parameter values are valid 

この動作はデバッグを無視します!私がステップスルーするとき、それは期待どおりに機能します(私はそれが一種のスレッドレースか何かだと思います)。さらに、同一の条件下で、MATLAB環境を再起動した後、通常は消えます。

このエラーで見つかったすべてのドキュメントは、MATLABの以前/古代バージョン(R2010Aを使用しています)を参照しています。

このテーマに関するアイデアや情報は大歓迎です!


編集:ミハイルのおかげで、私は問題を解決したようです。今後の参照のために、ここにコードを投稿しています。

多くのデバッグ印刷とワイルドクリックの後、私は時々、選択したものをリストボックスに尋ねると、空の結果が得られることがわかりました。これやその他の問題は、物事を困惑させました。私はすべての執筆対話をリストボックスに集中機能に移し、テストコードを作成して、物事が必要な状態にとどまることを確認しました。

これは私自身の環境(R2010A)でテストされており、広範囲ではないことに注意してください。また、コードは少し冗長ですが、とにかく気分が良くなりました。 (すなわち。 itemcount 0未満にすることはできません...)

function ensure_listbox_ok(handles)

%check to make sure it does not suck - ask what it has
thestrings = get(handles.listbox_files, 'String');
selection = get(handles.listbox_files, 'Value');

itemcount = length(thestrings);

betterselection = selection;

if(itemcount <= 0)
    betterselection = 1;
else
    if(selection > itemcount)
        betterselection = itemcount;
    end
end

%never use zero!!!! even if 1 is out of bounds.
if(isempty(betterselection) || betterselection <= 0)
    betterselection = 1;
end

%uncomment for debug logging
%display(['Was: ' num2str(selection) ', cleaned: ' num2str(betterselection)]);

%update if we are out of bounds.
if(isempty(selection) || betterselection ~= selection)
    set(handles.listbox_files, 'Value', betterselection);
end
役に立ちましたか?

解決

これは既知のプログラミングエラーであり、人種の状態とは何の関係もありません!

これが機能する方法です:

ポップアップおよび単一選択リスト用 string プロパティは空ではない必要があります。つまり、コンテンツがあります。ただし、デフォルトでは空です。したがって、常に定義する必要があります。

ポップアップに表示された(リスト内で強調表示されている)アイテムは2つのプロパティで定義されています string (文字列のセルの配列として)および value (これは 1 デフォルト)。

空の配列で最初の要素を取得しても明らかに機能しないため、コントロールをレンダリングすることはできません!

リストボックスコントロールは単一選択です - そのプロパティ min < maxvalue スカラーと> 0です。 ListBox(ただし、ポップアップではありません)は、プロパティの場合はマルチセレクションになる可能性があります min > max, 、 この場合 value アレイ(空のことを意味する)と空の可能性があります string 問題を引き起こしません。

UICONTROLプロパティのMATLABヘルプをお読みください string, value, min, max, listboxtop

プラクシスで

  • あなたはそれがガイドで編集した後に現れると言います。ガイドはCode-Behindを作成します。古いCode-Behindを編集した後、時にはその場に残ります。
  • 時々、matlabは1つのステートメント内の順序に敏感です。 set(hlist, 'value', 2, 'string', {'aa','bb'}) 素朴に設定します value2string 十分に長く、Uicontrolを無効にします。
  • Matlabはバギーで、年に2回すべての新しいバージョンが古いものを削除し、新しいバグをもたらします。デバッグモードが必要ではないと確信している場合は、MATLABサポートの場合です。 M-Code、P-Code、コンパイルされたExeと同じコードが実行されています。同じコードの動作は、主にGUIの仕組みで異なって動作します。

他のヒント

私の経験では、このエラーはほとんどの場合、 value プロパティは、リストボックスのエントリの数よりも大きいです。したがって、ListBoxを再駐在させるときはいつでも、 value プロパティ - 安全上の理由から1に設定します。

それ以外は、優れたコメントを確認してください @mikhail.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top