none
有關表單上偵測按鍵的問題? RRS feed

  • 問題

  • 通常好像只有在TextBox 上Key字 才會呼叫 OnKeyDown 按鍵   這樣我可以在Form上呼叫到OnKeyDown這事件ㄚ ?
    2009年7月14日 上午 02:34

解答

所有回覆

  • Form 上也有 KeyDown 事件啊...
    小人物一枚。
    2009年7月14日 上午 04:17
    版主
  • HI,

    如果你要讓表單偵測到表單中控制項的KeyDown等事件

    可以把Form的KeyPreview屬性給設起來

    Form.KeyPreview 屬性

    取得或設定值,指出表單是否在事件傳送至具有焦點的控制項之前,要接收按鍵事件。


    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 letitbe 2009年7月14日 上午 07:22
    • 已取消標示為解答 letitbe 2009年7月14日 上午 08:11
    • 已標示為解答 letitbe 2009年7月14日 上午 08:23
    2009年7月14日 上午 07:01
  • HI,

    如果你要讓表單偵測到表單中控制項的KeyDown等事件

    可以把Form的KeyPreview屬性給設起來

    Form.KeyPreview 屬性

    取得或設定值,指出表單是否在事件傳送至具有焦點的控制項之前,要接收按鍵事件。


    http://www.dotblogs.com.tw/larrynung/

    根據蹂躪大大的解說來測試是OK低 ~~
    2009年7月14日 上午 07:23
  • 但是  我又後來發現,

    當KeyDown 兩次以後,就不會再呼叫KeyDown事件,

    要讓焦點移到別的地方後,再回到原本的Form,按鍵盤才會繼續呼叫KeyDown事件

    但是 我想要讓KeyDown事件可以一直被觸發,

    曾經嘗試過在KeyDown事件裡面寫 KeyPreview=True

    但是 沒用,各位大大有這解決的方法嗎 ?

    2009年7月14日 上午 08:29
  • HI,

    不了解您的問題所在

    我測試的結果是正常的

    表單上只有一個TextBox

    測試Code如下

    Public Class Form1
        Dim keyDownCount As Integer = 0
        Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
            keyDownCount += 1
            Me.Text = keyDownCount.ToString
        End Sub
    End Class


    http://www.dotblogs.com.tw/larrynung/
    2009年7月14日 上午 09:04
  • 你的Form不接受Keyboard Focus.去Enable.
    我不知道Windows Form怎麼設定.因為我是用WPF.
    在WPF 預設是InputElement 有 Keyboard foucs. 其他像Form 或一些 Layout 或  Container 預設是沒有 Focus.
    而你會跳出表單後回到表單可能是該Form具Mouse Focus 但 Keyboard foucs 不知在哪個元件上,剛好那個元件在Form裡面所以觸發到這個事件.而你將Mouse Focus放在Form時,他 Keyboard foucs 有跑掉,所以你又觸發不到.
    所以你還是用Mouse Clicke去代替吧.

    2009年7月14日 上午 09:17