8

Windowsフォームを使用してC#でキーボードバッファをフラッシュするにはどうすればよいですか?

キーボードのように機能するバーコード スキャナーがあります。非常に長いバーコードがスキャンされ、フォームでキャンセル ボタンが押された場合、キーボード バッファーをクリアする必要があります。したがって、保留中のすべての入力をフラッシュして無視する必要があります。バーコードにスペースが含まれている場合、スペースは不要なボタンクリックとして処理されるため、バッファをクリアする必要があります。

4

7 に答える 7

5
while (Console.KeyAvailable) { Console.ReadKey(true); }
于 2010-10-01T16:38:18.787 に答える
2

KeyPreviewフォームで に設定し、イベントをtrueキャッチして、キャンセルがクリックされた場合に に設定します。KeyPresse.Handledtrue

EDIT :フォームのKeyPress イベントをキャッチします

于 2009-06-10T21:12:04.543 に答える
1

@クリス:

Console.KeyAvailableコンソールにフォーカスがなかったため、例外が発生しました。

ただし、例外メッセージは役に立ちました。Console.In.Peek()そのインスタンスで読むために使用することを提案しました。

代替の解決策として、そして後世のために、ここで注目する価値があると思いました。

 if (-1 < Console.In.Peek()) {
     Console.In.ReadToEnd();
 }
于 2010-12-03T16:30:24.950 に答える
1

フォームを無効にし、無効にしている間に DoEvents ですべての処理を強制的に実行します。コントロールは無効になっているため、キーストロークを拒否する必要があります。その後、フォームを再度有効にします。

this.Enabled = false;
Application.DoEvents();
this.Enabled = true;
于 2011-09-27T07:00:55.023 に答える
1

私はあなたがこれを行うことができるかどうかわからない。キーストロークは、メイン イベント ループのイベント キューに入ります。これらのキーストロークをキャンセルするために実行したアクションは、キーストロークの後にキューに入れられます。

イベント ループは、キーストロークが処理された後にのみキャンセル アクションに到達します。キーストローク シーケンスの途中で発生する何らかのイベントに基づいてのみ、キーストロークをキャンセルできます。

于 2009-06-10T21:22:48.640 に答える
0

BIOS レベルのフラッシュ ( http://support.microsoft.com/?scid=kb%3Ben-us%3B43993&x=22&y=10 ) を行うこともできますが、Windows はより高いレベルでキーボードのバッファリングも行うため、この低レベルのアプローチにはお勧めできません。レベル。

最善の方法は、特定のフラグが設定されている間に到着したチャーを食べることです。SLaksが示唆するように、私はKeyPreviewtrueに設定し、inまたはine.Handledのいずれかでtrueに設定します..違いはありません。KeyPressKeyDown

于 2009-06-10T21:47:38.607 に答える