Winform 使用热键功能实现Ctrl+C和Ctrl+V复制粘贴功能
当我们使用winform控件的时候,会发现这些控件(比如Label)不支持Ctrl+c 复制和Ctrl+v 快捷键复制粘贴功能,如果我们需要实现这个功能改怎么做呢?
1. 首先我们创建一个winform项目。
在项目中我们在form上添加三个控件,两个label和一个textBox
我们将要实现的功能是在Copy me这个label上使用Ctrl + C可以将这个label显示的内容“Copy me”复制到剪贴板中,当我们在textbox控件里面使用 Ctrl + V的时候可以将剪贴板的字符串复制到textbox控件,然后我们在textBox里面修改字符串使用Ctrl + C 复制字符串,然后选中Copy me label使用 Ctrl + V可以把textbox的值复制到Copy me这个label里面,但是选中Can not copy这个label使用Ctrl + C和Ctrl+V都没有任何效果。
2. 我们添加一个新类HotKeysManager,这个类会使用DllImport特性引入user32.dll,然后封装里面的两个方法 RegisterHotKey和UnregisterHotKey,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace HotKey
{
public class HotKeysManager
{
//如果函数执行成功,返回值不为0。
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
Keys vk //定义热键的内容
); [DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
); //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
[Flags()]
public enum KeyModifiers
{
None = ,
Alt = ,
Ctrl = ,
Shift = ,
WindowsKey =
}
}
}
3, 在Form中我们在鼠标进入Copy me 时来注册热键Ctrl + C和Ctrl + V在鼠标离开Copy me时我们注销热键Ctrl + C和Ctrl + V,然后重载WndProc方法捕获热键消息,如果是Ctrl + C就复制Copy me里面的值到剪贴板,如果Ctrl + V就把剪贴板的内容复制到Copy me label里面。
请看代码:
/// 重载FromA中的WndProc函数
/// 监视Windows消息
/// 重载WndProc方法,用于实现热键响应 protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case :
Clipboard.SetText(this.labelTest.Text);
break;
case :
this.labelTest.Text = Clipboard.GetText();
break;
}
break;
}
base.WndProc(ref m);
} private void labelTest_MouseLeave(object sender, EventArgs e)
{ //注销Id号为100的热键设定
HotKeysManager.UnregisterHotKey(Handle, );
//注销Id号为101的热键设定
HotKeysManager.UnregisterHotKey(Handle, );
} private void labelTest_MouseEnter(object sender, EventArgs e)
{
//注册热键Ctrl+C,Id号为100。。
HotKeysManager.RegisterHotKey(Handle, , HotKeysManager.KeyModifiers.Ctrl, Keys.C);
//注册热键Ctrl+V,Id号为101。
HotKeysManager.RegisterHotKey(Handle, , HotKeysManager.KeyModifiers.Ctrl, Keys.V);
}
这样我们就实现了Ctrl + C和Ctrl + V 复制粘贴label中内容的功能。
Winform 使用热键功能实现Ctrl+C和Ctrl+V复制粘贴功能的更多相关文章
- ubuntu18.04下取消中键复制粘贴功能
Q: armlinux开发,主机采用ubuntu18.04操作系统,使用过程中关于鼠标中键有如下操作现象, 操作: 1.选中文本, 2.将鼠标光标定位到要插入的位置 3.按下鼠标中键 现象:将自动复制 ...
- Vbox中unbuntu15.10与win10共享文件 及开启复制粘贴功能
学习linux,一直使用的是VMware虚拟机,虽然功能很强大,但总感觉页面切换很麻烦.所以转入Vbox的使用,下面介绍下unbuntu15.10与win10共享文件. 一 共享文件夹 步骤1:启动u ...
- Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)
在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...
- 在CMD命令行和PowerShell中实现复制粘贴功能
在CMD命令行和PowerShell中实现复制粘贴功能 常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...
- 仿复制粘贴功能,长按弹出tips的实现
方案分析: 方案一:监听长按事件弹出PopupWindow[可行,缺点布局是固定的,小语种下会出现菜单截断现象] 方案二:弹出ContextMenu[不可行,因为ContextMenu的菜单是上下排列 ...
- iOS开发之--复制粘贴功能
复制粘贴功能,代码如下: 1.复制功能 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = ...
- Java io流完成复制粘贴功能
JAVA 中io字节输入输出流 完成复制粘贴功能: public static void main(String[] args) throws Exception{ // 创建输入流要读 ...
- Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿
Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿,解决办法: 更改打开代码超链接按键Ctrl为Alt: Window -> Preferences -> General -& ...
- js实现复制粘贴功能
在项目中使用到复制粘贴功能,虽然网上有很多大牛封装了很多的插件,但是还是想不去使用插件,就像自己来实现这个功能. 另一篇是禁止复制粘贴 前端er怎样操作剪切复制以及禁止复制+破解等 初步想法: 1. ...
随机推荐
- P3396 哈希冲突(思维+方块)
题目 P3396 哈希冲突 做法 预处理模数\([1,\sqrt{n}]\)的内存池,\(O(n\sqrt{n})\) 查询模数在范围里则直接输出,否则模拟\(O(m\sqrt{n})\) 修改则遍历 ...
- 【BIEE】报表导出数据只显示500行,如何解决?
BIEE报表展示的时候每页只显示500行,进而导致导出的时候也只能导出500行,客户抱怨:每次只能导出500行,导出后还得自己合并! 解决思路: 1.找到路径$BIEE_HOME\instances\ ...
- GO语言GIN框架入门
Gin框架介绍 Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 中文文档 Gin框架安装与使用 ...
- EXCEL复制可见单元格
Excel筛选后,复制筛选后的单元格 1, 首先还是复制这一部分内容. 2, CTRL+G打开 "定位"窗口. 3, 在 "定位"窗口中选择"定位条件 ...
- Spring Boot 面试,一个问题就干趴下了!(下)
前些天栈长在Java技术栈微信公众号分享一篇文章:Spring Boot 面试,一个问题就干趴下了!,看到大家的留言很精彩,特别是说"约定大于配置"的这两个玩家. 哈哈,上墙的朋友 ...
- EduSoho之插件开发(脚手架搭建)
本文主要参考官方文档,地址为:http://developer.edusoho.com/plugin/start.html 插件开发的目的,一方面为了更好的扩展,另外一方面为了更好的维护. 关于这方面 ...
- k8s 新加节点
拷贝原来的内容过去,删除 cd /opt/kubernetes/ssl/ 1. 删除 kubelet-crt key kube-proxy-key.pem 相关的这些key是,根据too ...
- 025批量删除mac文件名中的空格
一. 在准备王陆语料库资料时发现给的录音文件好多带有空格,不喜欢这样的,而且不方面mac下搜索和查找,所以想把它全部删掉,命令如下: find . -name "* *"| whi ...
- python初级(302) 2 easygui简单使用
一.复习之前的两个练习,巩固计数循环和条件循环 1.系统生成一个随机数1到5,然后让用户的猜测,若猜对了,提示恭喜你,猜对了,否则提示,对不起,你猜错了(提示,1到5的随机数为:secret = ra ...
- Pytorch 类别平衡化处理
采用 WeightedRandomSampler: def make_weights_for_balanced_classes(images, nclasses): count = [0] * nc ...