|
分類:[VB.NET/VB2005 以降]
お世話になっております。 今回はButtonをEnterキーでの連打制限について質問させていただきます。
Enterキーにより連打を制限するためにPreviewKeyDown,KeyUpを利用しています。 button1があるとします。
Private Sub PreviewKeyDownHandler(VaVal sender As Object, ByVal e As System.Windows.Form.KeyEventArgs) _ Handles button1.PreviewKeyDown If e.KeyData = Keys.Enter Then e.IsInputKey = True End End Sub
Private KeyUpHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles button1.KeyUp If e.KeyData = Keys.Enter Then button1.PerformClick() End If End Sub ------------------------------------------------------ コピーペでないので、ソースにミスがあるかもしれません。 ------------------------------------------------------
上記のコードで、連打制御はできていますが、問題が発生しました。
下記状態2の場合、Enterキーが押されたときに、PreviewKewDownが発生しないまま、 ボタンクリックイベントが発生します。
ボタンの選択状態1:ボタンの周りに点線のようなものがあり、選択されているように見える。 ボタンの選択状態2:ボタンの周りに点線のようなものはなく、選択されているようにみえる。
これにより下記の問題が発生します。
条件: Form1、Form2があるとします。 Form1にはForm2を表示する表示ボタンがあり、Form2にはForm2を終了する終了ボタンがあるとします。
操作: 1.Form1で表示ボタンを押下し、Form2を表示しました。 2.Form2が表示され、終了ボタンにフォーカスが当たっています。 !!この時、ボタンの選択状態は上記の状態2です。 3.Form2の終了ボタンにフォーカスがある状態で、Enterキーを押すしたタイミングでForm2が消え、 Form1にもどり(表示ボタンにフォーカスあり)、Enterキーを話したタイミングでForm2がまた表示されます。
つまり、Form2で終了ボタンでEnterキーを押すとForm2が閉じる→Form2が表示される動作を繰り返すようになります。
-------------------------------------------------------------------------- 質問1:PreviewKeyDownが発生しない原因はなんでしょか? 質問2:Enterキーによるボタンの連打を制御する適切な方法は他にあるでしょうか?
|