none
c# 窗体 键盘事件 RRS feed

  • 问题

  • 键盘事件:form窗体要响应键盘,但是点了上面的控件后,焦点被控件抢走,就不能响应键盘了,控件的tapstop已经设为false了,这个问题咋解决啊?
    2009年5月31日 8:37

答案

  • public class MyListView :ListView
    { // Override IsInputKey method to identify the Special keys protected override bool IsInputKey( System.Windows.Forms.Keys keyData ) { switch ( keyData) { // Add the list of special keys that you want to handle case Keys.Up: return true; case Keys.Down: return true;
     default: return base.IsInputKey(keyData); } } }

    周雪峰
    2009年5月31日 15:25
    版主

全部回复

  • 设置 Form.KeyPreview = true;
    知识改变命运,奋斗成就人生!
    2009年5月31日 8:41
    版主
  • 设置 Form.KeyPreview = true;
    知识改变命运,奋斗成就人生!

    这样就可以?? 我也为这问题烦恼呢
    2009年5月31日 8:52
  • 嗯,可以
    知识改变命运,奋斗成就人生!
    2009年5月31日 8:52
    版主
  • 已经设置了,就是我按上下按钮时候,他不执行窗体键盘事件,而是把焦点转移到别的控件了,我想让他执行窗体的键盘按下事件
    2009年5月31日 8:54
  • 方向键通过重写From 的ProcessDialogKey方法捕获
    protected override bool ProcessDialogKey(Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Left:
                MessageBox.Show(keyData.ToString());
                break;
            case Keys.Right:
                MessageBox.Show(keyData.ToString());
                break;
            case Keys.Up:
                MessageBox.Show(keyData.ToString());
                break;
            case Keys.Down:
                MessageBox.Show(keyData.ToString());
                break;
        }
        return true;
    }
    
    


    知识改变命运,奋斗成就人生!
    2009年5月31日 9:16
    版主
  • 这个button行,可是textbox没有编译功能了,不能往里写内容了,我想在textbox写完之后,我按下向下按钮就执行别的操作了
    2009年5月31日 9:35
  • 用 TextBox 的 KeyDown 事件,判断方向键
    知识改变命运,奋斗成就人生!
    2009年5月31日 9:38
    版主
  • 你好!
         可以这样来实现:
            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {

                if (e.KeyCode == Keys.Up)
                    MessageBox.Show("我按了上箭头");
                else if (e.KeyCode == Keys.Down)
                    MessageBox.Show("我按了下箭头");

                }
    周雪峰
    2009年5月31日 11:23
    版主
  • 这个方法不错,还有一个小问题,就是我用了listview这个控件,按上下键的时候她就在listview上移动,只能手动移开,能不能按上下键的时候不让他获得焦点啊

    2009年5月31日 14:53
  • 你好!
         如果想屏蔽这两个功能键需要自己重新定义一个自己的ListView控件才可以啊!
    周雪峰
    2009年5月31日 15:18
    版主
  • 这个的功能,建议用其它键来代码方向键,如 F2, F3, 方向键处理较特殊, 你大部分地方都需要特殊处理
    知识改变命运,奋斗成就人生!
    2009年5月31日 15:22
    版主
  • public class MyListView :ListView
    { // Override IsInputKey method to identify the Special keys protected override bool IsInputKey( System.Windows.Forms.Keys keyData ) { switch ( keyData) { // Add the list of special keys that you want to handle case Keys.Up: return true; case Keys.Down: return true;
     default: return base.IsInputKey(keyData); } } }

    周雪峰
    2009年5月31日 15:25
    版主