zoukankan      html  css  js  c++  java
  • 关于捕获键盘信息的processDialogkey方法

    在一些控件里的keydown方法,没有办法捕获所有的按键消息

    比如自己写一个窗体控件库,继承了UserControl

    但是没有办法捕获一些键,比如方向键等

    所以必须重载 processDialogkey 方法

    processDialogkey 的描述 在msdn中是这样的

    在消息预处理过程中调用此方法,以处理对话框字符,比如 Tab、Return、Esc 和箭头键。只有当 IsInputKey 方法指示控件未在处理该键时,才调用此方法。ProcessDialogKey 方法只是将字符发送给父级的ProcessDialogKey 方法,或者,在该控件没有父级的情况下返回 falseForm 类重写此方法来执行对话框键的实际处理。仅当控件承载在 Windows 窗体应用程序中或充当 ActiveX 控件时,才调用此方法。

    给继承者的说明 在派生类中重写 ProcessDialogKey 方法时,控件应返回 true 以指示它已处理该键。对于未由该控件处理的键,应返回调用基类的 ProcessDialogChar 方法所得的结果。控件很少需要重写此方法(即使有的话)。

    它的返回值表示

    返回值

    如果键已由控件处理,则为 true;否则为 false

    所以想捕获方向键 要加上如下重载方法

    protected override bool ProcessDialogKey(Keys keyData)
            {
                if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData == Keys.Right)
                    return false;
                else
                    return base.ProcessDialogKey(keyData);
            }

    在keydown里就能接收到方向键的信息了

    其实,在ProcessDialogKey重写的时候,就可以做信息处理的操作了

    而不必再keydown方法里写

    这样也可以

    namespace writing
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    protected override bool ProcessDialogKey(Keys keyData)
    {
    if (keyData == (Keys.Insert | Keys.Shift))
    {
    IDataObject data = Clipboard.GetDataObject();
    string text = (string)data.GetData(DataFormats.UnicodeText);
    MessageBox.Show(text);
    }
    return base.ProcessDialogKey(keyData);
    }
    }
    }

  • 相关阅读:
    使用android-ndk官方ndkbuild例子
    小米8如何root
    Ubuntu点击dash home就崩溃
    Python自定义排序
    adb命令
    sqoop数据导出导入命令
    Docker命令详解
    如何输出第二列相同的行
    如何使用Xmanager及VNC登录远程桌面
    搭建GoldenGate的单向复制环境
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/5106500.html
Copyright © 2011-2022 走看看