2016-10-21 4 views
0

ラケットのGUIライブラリでは、text-field%を使用して、1行のテキストボックスをウィンドウに追加できます。しかし、このテキストボックスでは、整数の入力のみを許可するように制限したいと考えています。ラケットのGUIライブラリ内の数字のみを受け入れるテキストボックス

これを処理する1つの方法は、文字が入力されるたびにコールバックを挿入してテキストボックスに追加することです。 text-field%クラスにはメソッドget-valueset-valueがありますが、コールバックとしてではなく、テキストボックスのプログラムによる変更にのみ使用されます。

もう一つの方法は、正規表現で許容される文字や文字列をテキストボックスに渡すことですが、これはサポートされていないようです。

ラケットにテキストフィールドを作成する方法はありますか?これは、ユーザーが整数で入力することのみを許可しますか?

答えて

1

Rosetta Codeで既にこの問題の解決策があるようです。テキストボックスでできることは、ユーザーが入力するたびに呼び出されるコールバックに設定されます。次に、set-valueを使用して、不要な文字を削除できます。その結果text-field%オブジェクトは(リンクからそれを取って)次のようになります。

(define frame (new frame% [label "Demo Frame")) 
:フレームを使用して、テキストボックスに入れているフレームである、と言う

(new text-field% [label "Value"] [parent frame] [init-value "0"] 
    [callback 
     (λ (f ev) 
     (define v (send f get-value)) 
     (unless (string->number v) 
      (send f set-value (regexp-replace* #rx"[^0-9]+" v ""))))])) 

関連する問題