2

Windows フォーム アプリケーションを作成しています。char.IsNumber()押されたキーが数字かどうかを確認するために使用します:

   private void AmBox_KeyPress(object sender, KeyPressEventArgs e)
   {
       if(char.IsNumber(e.KeyChar))
           e.Handled=true;
   }

MSDN はchar.IsNumber()、キー char が数値であるかどうかをチェックすると述べているため、数値の場合は true を返します。私が見たところ、結果は逆になり、文字 (A、a、b、c ...) の代わりに数字 (1、2、3 ...) が無視されます。

使えば問題は解決できるのですが!char.IsNumber();、このメソッドが何をするのか理解できませんchar.IsNumber()。誰か親切に詳しく説明してもらえますか?

4

4 に答える 4

7

char.IsNumber()true文字が数字 ( '0''1'、 ... ) の場合に返します'9'

そして、「このイベントe.Handled = true既に処理されているため、無視してください」と表示されます。

したがって、コードは実質的にこれを意味します:

if (e.KeyChar is a number)
    Ignore this event

このように見ると、コードが数値のみを無視する理由がわかります。

したがって、!char.IsNumber()基本的に「文字が数字でない場合、このイベントを無視する」と言うように、使用の解決策は正しいです。

また、他の文字も数字として認識するためChar.IsDigit、おそらく探していることに注意してください。toのみを返します。これはおそらくあなたが望むものです。Char.IsNumberChar.IsDigittrue'0''9'

于 2012-07-25T11:00:16.610 に答える
5

Char.IsNumber()を正しく使用してtrueおり、渡された文字が数値として修飾されている場合は返されます。

問題はHandledプロパティにあります。に設定するとtrue、基本的にフレームワークに、私が既にこれを処理したことを伝えていることになり、そのイベントとは他に何も関係がないため、デフォルトの動作が実行されなくなります。つまり、 に設定Handledした文字trueは無視されます。

そのため、条件を反転する必要があります。

if (!Char.IsNumber(e.KeyChar)) {
    // e.KeyChar is not a number, block it.
    e.Handled = true;
}
于 2012-07-25T11:01:17.360 に答える
2

文字が数字の場合にイベントを処理済みとしてマークしているため、実際に処理するメソッドにイベントが「バブリング」していない可能性が高くなります。

于 2012-07-25T11:00:34.643 に答える
2

これを試して

if(!char.IsNumber(e.KeyChar))
           e.Handled=true;
于 2012-07-25T11:01:40.183 に答える