在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作。比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上、下、左、右键时,图片控件的滚动条都会上下左右移动,当用户拨动鼠标滚轮时图片总能发大或缩小。如果对每个控 件的键盘或鼠标事件都进行设置,必然会造成很多的重复工作。本文我将介绍如何在winform下对某一个键盘输入或者鼠标事件进行相同的操作。

1、键盘事件的捕捉和重写

首先是键盘操作,为了实现上述功能,现在介绍winform的一个方法。ProcessCmdKey.其msdn说明的地址为:msdn
ProcessCmdKey介绍

从函数名就可以看出,这其实是设置winform的快捷键的函数。

“在消息预处理过程中调用此方法,以处理命令键。命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。此方法必须返回true,以指示它已经处理完命令键,或者false,以指示该键不是命令键。仅当控件承载在
Windows 窗体应用程序中或充当 ActiveX 控件时,才调用此方法。”

上述是msdn对该函数的介绍。其意思是,在该函数中定义的键 盘操作响应事件具有最高的优先权,会在所有的键盘响应时间之前执行。如果想在执行完该事件之后执行与该键盘输入相关的事件则返回false(即认为该输入 事件未处理),如果要屏蔽其它响应时间则返回true(即告诉应用程序这个键盘输入我已经处理过了,后面就不要再处理了)。

因此有了这个函数就可以很好的屏蔽程序中的其他键盘输入响应事件,从而自己定义对每个键盘输入的响应。

下面给一个实例:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData){switch (keyData){case Keys.Right:MessageBox.Show("Right");return true;case Keys.Left:MessageBox.Show("Left");return true;case Keys.Up:MessageBox.Show("up");return true;case Keys.Down:MessageBox.Show("down");return true;case Keys.Space:MessageBox.Show("space");return true;case Keys.Enter:MessageBox.Show("enter");return true;}return false;}

在实际程序中,只需要将上述代码加入winform应用程序的窗体类中,然后替换MessageBox为自己想要实现的功能即可。

2、对于鼠标的事件,有上述要求的主要是鼠标的滚轮滚动事件。因为鼠标的点击双击移动等事件都是与鼠标指针指向有关的,没有必要对所有的都 执行相同的操作,只有鼠标滚轮事件与当前鼠标指针的指向的关系不大,对其执行相同的操作有一定的实际意义。正如前面所说的在处理图片的应用程序中可能需要 无论在何种情况下,鼠标滚轮下拨都对应着放大图片,而上滚都对应着缩小图片。

对于这个功能要求采用的是鼠标事件委托

具体操作为在窗体初始化的时候将鼠标滚轮事件委托到一个自定义函数上,代码如下:

public Form1(){InitializeComponent();this.MouseWheel+= new MouseEventHandler(MyMouseWheel);}

其中第二句语句的意思是将这个程序的鼠标滚轮事件绑定到MyMouseWheel这个函数上,然后后续自己定义一个MyMouseWheel的函数即可

我定义的MyMouseWheel函数如下:

 private void MyMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e){if (e.Delta > 0){MessageBox.Show("滚轮向前滚动");}else{MessageBox.Show("滚轮向后滚动");}}

在具体应用中将MessageBox替换为要实现的功能即可。

转载于:https://www.cnblogs.com/candyzhmm/p/5661434.html

winform中键盘和鼠标事件的捕捉和重写(转)相关推荐

  1. 键盘和鼠标事件中按键的数字是多少呢?event.which

    event.which 针对键盘和鼠标事件,这个属性能确定你到底按的是哪个键. <!DOCTYPE html> <html> <head><script sr ...

  2. Selenium2学习(八)-- 操作元素(键盘和鼠标事件)

    前言 在前面的几篇中重点介绍了一些元素的到位方法,到位到元素后,接下来就是需要操作元素了.本篇总结了web页面常用的一些操作元素方法,可以统称为行为事件 有些web界面的选项菜单需要鼠标悬停在某个元素 ...

  3. Winform中设置ZedGraph鼠标悬浮显示线上的点的坐标并自定义显示的内容

    场景 Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  4. Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题

    场景 Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

  5. android详细解释键盘和鼠标事件

    目的:通过全面的分析Android的鼠标和键盘事件.了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件. 主要学习内容: 1. 接收并处理鼠标事件:按下.弹起.移动.双击.长按 ...

  6. 怎样正确处理WinForm中Listview的ItemCheck事件

    我很少写具体的对象应用心得,这次尝试一下. WinForm中Listview的ItemCheck事件,例子如下:   private void lvwTables_ItemCheck(object s ...

  7. golang调用sdl2,键盘和鼠标事件

    golang调用sdl2,键盘和鼠标事件 win10 x64下测试成功,其他操作系统下不保证成功. 采用的是syscall方式,不是cgo方式. 见地址 代码用golang编写.代码如下: packa ...

  8. html选择按键点击后锁死输入框_js Dom为页面中的元素绑定键盘或鼠标事件

    html鼠标事件 onload 页面加载 onclick 鼠标单击 onmouSEOver 鼠标移入 onmouSEOut 鼠标移出 onfocus 获取焦点 onblur 失去焦点 onchange ...

  9. Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值

    场景 WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

最新文章

  1. android XML解析详解(封装好的工具类)
  2. 如何使用bootstrap实现轮播图?
  3. yii model层操作总结
  4. Maven知识点整理
  5. linux 命令详解 十六
  6. pytorch梯度的计算过程
  7. mysql text字段导出_用命令创建MySQL数据库
  8. linux debian硬盘安装,Debian硬盘安装方法
  9. 2022年考研数据结构_2 线性表
  10. mysql查询当前用户中所有的表空间_查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词等)...
  11. 制定自动化测试实施计划
  12. 最短路径spfa算法
  13. mysql去空格trim_mysql去空格函数trim
  14. 计算机病毒的危害有,电脑病毒有什么危害
  15. golang报错:slice bounds out of range
  16. 《你坏-大冰》阅读笔记
  17. 组合式升降压PFC的分析方法
  18. 使用SQLyog导出导入MySql中的数据
  19. 浅谈简单线性回归(Simple linear regression)part3SEE,MSE,SSE的关系
  20. lightroom 闪退_【Lightroom教程】3种校正白平衡的方法

热门文章

  1. js基础练习---面向对象浅理解分析
  2. 前端知识点梳理(二)
  3. 统计信息自动收集任务失效原因排查
  4. 百年难得一见!阿里园区惊现双月争辉奇观!
  5. setSignVisible的修改
  6. iOS内存管理(ARC,MRC)
  7. linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)
  8. 基于JQuery实现滚动到页面底端时自动加载更多信息
  9. ubuntu网站做图像外链
  10. cant find module express