0

Microsoft が数値テキスト ボックスを .NET フレームワークに同梱しない理由を知っている人はいますか? たとえば、入力された文字が常に有効な数値であることを保証するテキスト ボックスなどです。これは、さまざまなフレーバーのアプリケーションで一般的に使用されるものであり、実際、ほとんどの GUI ライブラリ (私が知っているもの) が何らかの方法で提供するものです。独自のコードを作成するのはそれほど難しくありませんが、簡単でもありません

だから、誰かがこの省略を合理化できるかどうかを知りたい.

編集:提案をありがとう。マスクされたテキスト ボックスと数値のアップダウンにはそれぞれの場所があります。テキスト ボックスのように見えるが、入力が有効な数値に対応するキーを押すと自動的に検証を実行するコントロールに興味があります。私の (確かに限られた) 経験では、これはかなり頻繁に使用されるものです (マスクされたテキスト ボックスによって課される静的な制約が常に必要なわけではありません。ちょうど横にアップダウン コントロールが必要なわけではありません)。 .

ネット上にはさまざまな程度の品質の実装が多数あり、実際にMSDNにはこの例さえあります。

edit2: ありがとうございます。数値のアップダウンは、数値入力のみに使用する .NET コントロールのようです (そして、明示的な数値テキスト ボックス コントロールが実際にない理由です)。数値以外の文字の入力 (キー押下、貼り付けなど) を自動的に禁止すればよかったのですが、コントロールがフォーカスを失ったときに検証を実行するだけで十分だと思います。そして、本当に熱心であれば、キーを押して貼り付けの検証を行うことができます...

4

8 に答える 8

4

NumericUpDown の使用に関する Garry Shutlers の推奨事項を次に示します。アップダウン コントロールが気に入らないかもしれませんが、これWindows の数値入力コントロールの標準的な外観であり、別の外観を使用することについてよく考える必要があります。

独自の実装をコーディングすることになった場合 (または Web で実装を見つけた場合)、注意すべき落とし穴がいくつかあります。キーを押す以外にも、値がコントロールに入る方法はたくさんあることに注意してください。MSDN のリンクにあるものは貼り付けをオーバーライドすることさえしないため、数値以外の文字列をコントロールに ctrl-V で簡単に入力できます。

于 2008-09-17T09:09:11.660 に答える
4

MaskedTextBoxを使用できます

于 2008-09-17T08:29:45.530 に答える
3

数値の入力専用に作成され、TextBox のように使用できるNumericUpDownコントロールがあります。

于 2008-09-17T08:26:43.493 に答える
3

WinForms 2.0 からは、MaskedTextBox があります。マスクは好きなように設定できます。つまり、数字にはすべて 0 のマスクを使用します。

于 2008-09-17T08:31:10.877 に答える
1

一部の .NET Framework コントロールは、奇妙なことに、それらがラップする基になる Windows コントロールのすべての機能を公開していません。この場合、何らかの理由でES_NUMBERスタイルが実装されていません。

おそらく、HandleCreated イベントを処理し (または、TextBox がシールされていないため、OnHandleCreated をオーバーライドし)、SetWindowLongES_NUMBERを呼び出して、基になる Edit コントロールにスタイルを設定することができます。ES_NUMBERWinUser.h で 0x2000 として定義されています。

于 2008-09-17T10:31:51.053 に答える
0

マイクロソフトは、ツールボックスにないコントロールに関するギャップを埋めるためにサードパーティに任せています。時間とコストが彼らの論理的根拠に含まれると思います。

ただし、この場合、FilteredTextBoxはあなたが説明する機能を提供すると思います。

于 2008-09-17T10:14:10.583 に答える
0

2番目の編集に基づく:

Windows フォームのFAQ では、質問26.12でテキスト ボックス内の文字を制限する方法について説明しています。

26.12 テキストボックスが受け入れる文字を制限するにはどうすればよいですか?

テキストボックスの KeyPress イベントを処理できます。渡された文字が受け入れられない場合は、文字が処理されたことを示すイベント引数をマークします。以下は、数字 (およびバックスペースなどの制御文字) のみを受け入れる派生 TextBox です。スニペットは派生テキストボックスを使用しますが、ハンドラーをその親フォームに追加するだけでよいため、必須ではありません。

コード例については、FAQ を参照してください。

于 2008-09-18T02:04:40.097 に答える
0

また、TextBox クラスを派生させてキーパッド イベントを取得し、数字以外が書き込まれないようにすることもできます。

それが Web ページである場合、Javascript を使用して HTML テキスト ボックスに対して同じことが行われます。

于 2008-09-17T09:20:37.543 に答える