C#winform里界面设计时怎样添加快捷方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform里界面设计时怎样添加快捷方式相关的知识,希望对你有一定的参考价值。

我初学,越全越好。就像shift+E这样的怎样实现。

C#实现快捷键(系统热键)响应

在应用中,我们可能会需要实现像Ctrl+C复制、Ctrl+V粘贴这样的快捷键,本文简单介绍了它的实现,并给出了一个实现类。http://ike.126.com

(1)建立一个类文件,命名为HotKey.cs,代码如下:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace KoalaStudio.BookshopManager

class HotKey

//如果函数执行成功,返回值不为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 = 0,
Alt = 1,
Ctrl = 2,
Shift = 4,
WindowsKey = 8




简单说明一下:
“public static extern bool RegisterHotKey()”这个函数用于注册热键。由于这个函数需要引用user32.dll动态链接库后才能使用,并且

user32.dll是非托管代码,不能用命名空间的方式直接引用,所以需要用“DllImport”进行引入后才能使用。于是在函数前面需要加上

“[DllImport("user32.dll", SetLastError = true)]”这行语句。
“public static extern bool UnregisterHotKey()”这个函数用于注销热键,同理也需要用DllImport引用user32.dll后才能使用。
“public enum KeyModifiers”定义了一组枚举,将辅助键的数字代码直接表示为文字,以方便使用。这样在调用时我们不必记住每一个辅

助键的代码而只需直接选择其名称即可。

(2)以窗体FormA为例,介绍HotKey类的使用

在FormA的Activate事件中注册热键,本例中注册Shift+S,Ctrl+Z,Alt+D这三个热键。这里的Id号可任意设置,但要保证不被重复。
private void Form_Activated(object sender, EventArgs e)

//注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
//注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
//注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);


在FormA的Leave事件中注销热键。
private void FrmSale_Leave(object sender, EventArgs e)

//注销Id号为100的热键设定
HotKey.UnregisterHotKey(Handle, 100);
//注销Id号为101的热键设定
HotKey.UnregisterHotKey(Handle, 101);// http://ike.126.com
//注销Id号为102的热键设定
HotKey.UnregisterHotKey(Handle, 102);


重载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 100: //按下的是Shift+S
//此处填写快捷键响应代码
break;
case 101: //按下的是Ctrl+B
//此处填写快捷键响应代码
break;
case 102: //按下的是Alt+D
//此处填写快捷键响应代码
break;

break;

base.WndProc(ref m);


完成代码后,我们在窗体中按下Shift+S、Ctrl+B、Alt+D这三组快捷键中的任意一组时,程序都会做出响应的反应。
参考技术A button1.text="确定(&S)";//这个代表,alt+s 为快捷键
其他的快捷键都需要写的 例如是非焦点的全局热键 需要调用 user32.dll 的接口类进行实现

下面是一个示例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;
using System.Runtime.InteropServices;
namespace test

public partial class Form1:Form
classHotKey//如果函数执行成功,返回值不为0。//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。[DllImport("user32.dll",SetLastError=true)]publicstaticexternboolRegisterHotKey(IntPtrhWnd,//要定义热键的窗口的句柄intid,//定义热键ID(不能与其它ID重复)KeyModifiersfsModifiers,//标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效Keysvk//定义热键的内容);[DllImport("user32.dll",SetLastError=true)]publicstaticexternboolUnregisterHotKey(IntPtrhWnd,//要取消热键的窗口的句柄intid//要取消热键的ID);//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)[Flags()]publicenumKeyModifiersNone=0,Alt=1,Ctrl=2,Shift=4,WindowsKey=8publicForm1()InitializeComponent();HotKey.RegisterHotKey(this.Handle,100,0,Keys.F1);protectedoverridevoidWndProc(refMessagem)constintWM_HOTKEY=0x0312;//按快捷键switch(m.Msg)caseWM_HOTKEY:switch(m.WParam.ToInt32())case100:MessageBox.Show("ressF1");break;break;base.WndProc(refm);本回答被提问者采纳

向C# winform 的DataDridView 导入数据库文件的步骤是怎样的?(就是把一个信息表添加进去)

1.应该叫做DataGridView 吧,呵呵
2.导入数据就是第一步你要查询数据库;第二步就是要通过查询的数据库得到一个DataSet或者得到一个DataTable,然后赋值给DataGridView 的一个属性,然后运行即可
参考技术A 首先、你得有数据库、然后把数据库里的内容放到datatable里、然后把datatable里的内容、放到DataGridView 就行、一般查是用个类、然后直接在命令里做就行、 参考技术B 设置数据源吗?datasource

以上是关于C#winform里界面设计时怎样添加快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

(C#)winform界面超过屏幕范围的数量,则使用上一页、下一页的分页模式怎样实现?

怎样在桌面建立一个摄像头的快捷方式

怎么把快捷方式添加到启动项里面?

怎样在电脑桌面上建立QQ快捷方式

C#winform 中上传图片保存到数据库中?

C# 测试SQL数据库连接时 winform 界面如何实时刷新控件。