2011-07-11 15 views
0

私は数字だけを許可したいテキストボックスを使用しています。C#KeyPressEventsが処理されました

e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar); 

しかし、それはなぜですか!char.IsDigit()ではなくchar.IsDigit()ですか?なぜそれは否定されますか?私が数字を入力すると、IsDigitsが真を返し、それが私が望むものではないでしょうか?

答えて

3

このコードが行っていることは、数字が押されておらず、制御文字でもない場合、処理が処理されないように処理されていることを示しています。

したがって、数字が押された場合、イベントは通過し、キー押下の通常の処理ロジックが発生するように処理されます。

説明として、Edwin de Konningのコメントを参照してください。「Handled to True」を設定すると、すでに処理されたイベントをマークするときにキーを押さないようにします。これは、操作がそうでない理由です。

文は論理的に等価である:

e.Handled = !(char.IsDigit(e.KeyChar) || !char.IsControl(e.KeyChar)) 

ので、文字が数字やイベントを処理していない制御文字(たとえば、Ctrlキー+ C)のいずれかである場合。

ただし、カットアンドペーストは引き続き機能するため、数字以外の文字が入力されないようにするには十分ではありません。 Edwin de Konnigが示唆したように、MaskedEditを見たいかもしれません。

+0

Handledがtrueに設定されている場合、Keypressは無視されます:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx –

+0

@Edwin de Konning:私が言ったこと最初の段落と2番目の段落では、処理された場合に何が起こるかが記述されています。イベントが通過し、通常のロジックが処理されることはありますか? –

+0

私たちはお互いの投稿を間違って読んでいると思います...それを解読します(最初に編集する必要があります)。 –

2

実際には!char.IsDigit()また!char.IsControl()。したがって、文字が数字の場合は入力を無視しますそして制御文字。私はそれが実際にあなたが望むものであるかどうかはわかりません(Bob Valeが述べたように、それらは相互に排他的です)。おそらく、MaskedTextBoxの使用法を調べるべきでしょう。

+0

いいえ、それ以外の文字は数字ではなく、制御文字ではない文字は無視されます。 trueのe.handledは、通常のロジック処理が発生しないようにします。 –

+0

@Bob:EHandledは、charが数字ではなく、同時に制御文字でない場合にのみ真です。 –

+0

あなたは正しいですが、IsDigitとIsControlは相互排他的な結果セットなので、同時に両方を真とすることはできません。それは私の投票を逆転させません、私はe.Handled == falseが無視条件であることを述べているとしてあなたの声明を読んでいます。司会者が投票を取り消すことができるかどうかを確認して確認します –

1

e.Handledが何をしているかを見てください。本当の文字に設定すると、texboxに入力する必要はありません。

2

e.Handledからtrueに設定すると、イベントが既に処理されていることがフレームワークに通知され、このキー・プレスに代わって何もしないでください。望ましくないすべてのキーをとして扱い、とすることで、これらのイベントを効果的にフィルタリングし、見たいキーだけを残します。

1

キーボードで1を押すと、正確に何が起きているとします。

  • !char.IsDigit(1)== fasle我々は& &を使用するときに最初のチェックがfalseの場合は、その後、全体の文が偽になるので、全体的には、自動的に、falseになりますので。私たちはe.Handledを見れば

は、今、私たちは、値の割り当てが偽であるならば、我々は値が値がtrueだった場合、その値は受け入れられないだろうTextboxに書き込むことを可能にすることを参照してください。

0

上記の方法は、Shiftキーのようなコントロールキーを使用して入力を削除するので、アルファベットや特殊記号を避けることができます。

キーボードから数字を入力している間は、コントロールキーは押されていないので、結果は偽であり、数字の入力が可能です。 (コントロールキーで数字を入力することはできません)

関連する問題