窗体上有个按钮,KeyDown就失效,Me.SetFocus 似乎也没用,求解怎么办让KeyDown生效

解决方案 »

  1.   

    当窗体上有可以获得焦点的控件的时候,很少会用到窗体的KeyDown事件,因为,KeyDown会被获得焦点的对象截获.
    比如,窗体上有一个按钮,获得焦点,这时按下按键,应该是针对于此按钮的操作,而不应该理解为对窗体的操作.
    如果你一定要对窗体进行操作,可以设置窗体的Click或DBlclick事件.
      

  2.   

    按钮是吧,就是要按钮的KeyDown事件有效,那就不是窗体获得焦点,是这个按钮获得焦点,假设这个按钮是Command1,那就用下面的代码Command1.SetFocus就这样,是让按钮获得焦点,按钮有焦点,自然就会接收到KeyDown事件
      

  3.   

    把keypreview属性设置为真就OK啦啦
      

  4.   

    Me.SetFocus 是让当前form获得焦点!
      

  5.   

    KeyPreview 属性
          返回或设置一个值,以决定是否在控件的键盘事件之前激活窗体的键盘事件。键盘事件为:KeyDown、KeyUp 和 KeyPress。语法object.KeyPreview [= boolean]KeyPreview 属性语法有以下组成部分:部分 描述 
    Object 对象表达式,其值是“应用于”列表中的一个对象。 
    Boolean 布尔表达式,指定如何接收事件。Setting 中有其说明。 
    设置值 boolean 的设置值为:设置值 描述 
    True 窗体先接收键盘事件,然后是活动控件接收事件。 
    False (缺省值)活动控件接收键盘事件,而窗体不接收。 
    说明可以用该属性,生成窗体的键盘处理程序,例如,应用程序利用功能键时,需要在窗体级处理击键,而不是为每个可以接收击键事件的控件编写程序。如果窗体中没有可见和有效的控件,它将自动接收所有键盘事件。若要在窗体级处理键盘事件、而不允许控件接收键盘事件时,在窗体的 KeyPress 事件中设置 KeyAscii 为 0,在窗体的 KeyDown 事件中设置 KeyCode 为 0。 注意 一些控件能够拦截键盘事件,以致窗体不能接收它们。这样的例子有:CommandButton 控件有焦点时的 ENTER 键、以及焦点在 ListBox 控件上时的方向键。