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);
    }
    }
    }

  • 相关阅读:
    win8/10 bcdboot引导修复命令的原理和使用方法
    DD命令做备份和恢复
    基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
    工资计算方式
    什么样的辞职理由能让面试官满意
    使用sql删除数据库中的重复数据,只保留分组后的第一条数据
    mysql实现row_number()和row_number() over(partition by)
    c# dev Gridcontrol绑定多层list
    窗体高度获取,随机调整窗体展示的位置
    consul下载地址
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/5106500.html
Copyright © 2011-2022 走看看