2

Matlab ユーザー インターフェイスに編集ボックスを挿入しましたが、ユーザーが入力できる文字数を制限したいと考えています。編集ボックスには明らかなプロパティはありません (「最大文字数」など)。コールバック関数を使用して、編集ボックスの現在の文字列サイズが設定した制限よりも大きいかどうかを確認し、最初の文字を切り捨てましたが、編集ボックスの外側をクリックしてからもう一度内側をクリックしたときにのみコールバックが機能しました。

これを行う方法について何か考えはありますか?

前もって感謝します。

編集済み

Amro の提案に従って、編集ボックスの KeyPressFcn コールバック内に検証コードを配置してみました。次のコードを入力しました。

function prefix_edit_KeyPressFcn(hObject, eventdata, handles)
    text = get(hObject, 'String');
    if length(text) > 15
        set(hObject, 'String', text(1:15));
    end

問題は、編集ボックスの文字列が変更されるのは、何かを入力し、Enter キーを押してから、もう一度何かを入力しようとしたときだけです。KeyPressFcn は、Enter キーを押した後にのみ呼び出されるようです (Amro が提案したフォーラムの投稿で言及されているように)。

フォーラムで提案された解決策は、そのような単純なタスクに対しては複雑すぎるようです。確かにもっとエレガントな方法があるはずです...

4

2 に答える 2

1

KeyPressFcnを使用する代わりに、基礎となるJavaコンポーネントのKeyTypedCallbackプロパティに前述のコールバック関数を実装します。これは、findjobjユーティリティを使用して見つけることができます。

注:これはブラインドアレイであるため、基になるJavaコンポーネントのドキュメントのlineLimit属性を使用しないでください。これは、Matlabで使用されていない古いJavaバージョンの残骸です。

独自のDocumentオブジェクトを設定することもできますが、コールバックの方法はもっと簡単だと思います。

于 2011-08-16T07:10:55.147 に答える
0

KeyPressFcnコールバック関数内にロジックを配置してみてください。同様の解決策について議論している古いニュースグループ スレッドがあります。

于 2011-08-03T18:50:14.237 に答える