C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.46020 の関連記事表示

<< 0 >>
■46020  Re[10]: Enterキーによるボタン連打制御
□投稿者/ alvin -(2010/01/23(Sat) 13:57:21)
    2010/01/23(Sat) 13:59:19 編集(投稿者)

    情報不足という現状なので、最初から整理させていただきます。

    クラス構成:
    基底クラスと派生クラス(各業務画面)があります。
    業務画面が起動される時に、基底クラスは各コントロールに対して、フォント、サイズ等の設定を行います。


    現在の対策:
    Enterキーを押し続けると、click→click→click→・・・→KeyUpの順で発生します。
    これを防ぐために、基底クラスがボタンのデザインを設定するとこで、各ボタンにPreviewKeyDownとKeyUPのイベントハンドルを追加しました。

    // PreviewKeyDownハンドル
    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

    // Keyupハンドル
    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

    これの実装により, Enterキーを押し続けると、PreviewKeyDown→KeyDown→KeyPress→ PreviewKeyDown→KeyDown→KeyPress→ ・・・→KeyUp(離した時)
    になり、Enterキーによるボタンがクリックされるデフォルト動作はなくなり、KeyUpでクリックイベント発生させています。
    --------------------------------------------------------------------------------------------------------
    上記で、Enterキー押しっぱなしによる、Clickイベントの連続発生を防いでいます。

    問題1:
    メニューから画面Aを起動しました。
    この時、画面A.ボタンAにフォーカスがあるように見える(GOOGLE.co.jpを開いた時の、検索ボタンの状態、またはボタンの周りに点線がない状態)が、
    Enterキーを押したら、PreviewKeyDown、KeyDown、KeyPress、KeyUpが発生しないまま、クリックイベントが発生します。
    (画面Aが起動されて、マウスでボタンAにちゃんとフォーカスを当ててからEnterキーを押すと、正しい動きをします。)

    問題2:
    画面Aから画面Bを起動しました。
    画面Bが起動されると、画面B.閉じるボタンにフォーカスがあるように見える(GOOGLE.co.jpを開いた時の、検索ボタンの状態、またはボタンの周りに点線がない状態)。
    この時、Enterキーを押すと、画面が閉じられ、Enterキーを離すと画面Bが起動される(画面A.ボタンAにフォーカスがあり、KeyUpが発生したため)。

    根本的に、問題1と2も一緒だと思いますね。
    なぜボタンがそのような状態になり、Enterキーによりクリックイベントが発生するんでしょうか?

記事No.45883 のレス /過去ログ78より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -