网站首页 > 文章精选 正文
在C#Winform编程中,合理的设计程序热键,使视障用户更加便捷使用
我们都知道,视障人士使用电脑主要是借助屏幕阅读器的朗读和操作,这种辅助操作基本都是通过键盘操作来完成的
在程序设计中,一款优秀的软件,不仅要有好的功能,可以解决用户的实际问题,而且也需要考虑如何能让用户更加高效便捷的使用
例如,窗口界面上有许多控件,那么我们不仅要考虑这些控件视障用户是否可以操作,而且也需要考虑如何能让视障用户更高效便捷的使用这些控件功能
在C#winform程序开发中,我们可以通过合理设计程序的热键,通过按下对应热键,执行相应的功能,让键盘操作更加便捷,可使操作的时间大大减少
这种操作尤其对于现如今许多视障人士通过互联网进行办公的场景,可起到事半功倍的作用
提升工作效率,使工作更加高效
下面总结了c#winform编程中四种常用的设置热键的方式
一、Alt + *(按钮快捷键)
在button、label、menuStrip,ToolStripMenuItem等控件设置Text属性时在名称后边加(&键名(,例如button1.text= "用户登陆(&L)"
就可为button1设置快捷键,这时候按Alt+L就可执行用户登陆事件
二、窗体的按键事件
在WinForm中设置要使用组合键的窗体的KeyPreview(向窗体注册键盘事件)属性为True
然后使用窗体的KeyDown事件(在首次按下某个键时发生)
实例代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.S | Keys.Alt))//按下alt+s键
{
e.Handled = true;//将Handled设置为true,指示已经处理过KeyPress事件
textBox1.Focus();//将键盘焦点聚焦到textBox1控件上。
}
else if (e.KeyData == (Keys.X | Keys.Alt))//按下alt+x
{
e.Handled = true;
this.showMsg("hello world!");//执行showMsg方法
}
else if (e.KeyData == Keys.Escape)//按下esc键
this.Close(); //关闭窗口
}
//注:可以参考 ”Keys”的枚举参数,以实现自己需要的按键
三、ToolStripMenuItem控件的ShortcutKeys属性
在ToolStripMenuItemShortcutKeys属性中也可设置快捷键
在窗体工具箱添加一个contextMenuStrip1,将其邦定到ListView1上,给contextMenuStrip1的items添加一个ToolStripMenuItem
然后设置ToolStripMenuItem的ShortcutKeys属性
例如设置为“Ctrl+L”,此时按下Ctrl+L就可激活ToolStripMenuItem的click事件
四、全局快捷键
实例代码:
public class HotKey//定义注册和卸载热键的类
{
[DllImport("kernel32.dll")]
public static extern uint GetLastError();
//如果函数执行成功,返回值不为0。
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
int fsModifiers, //辅助键,不设置=0,Alt=1、Ctrl=2、Shift=4、Windows=8
Keys vk //定义的热键
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
);
}
//定义消息相关的常量
private const int WM_HOTKEY = 0x312; //窗口消息-热键
private const int WM_CREATE = 0x1; //窗口消息-创建
private const int WM_DESTROY = 0x2; //窗口消息-销毁
private const int keyID = 0x3572; //热键ID
//重写窗体的WndProc函数,在窗口创建的时候注册热键,窗口销毁时销毁热键
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_HOTKEY: //窗口消息-热键ID
switch (m.WParam.ToInt32())
{
case keyID: //热键ID
this.openMsg();//按下Ctrl+alt+m执行的方法
break;
default:
break;
}
break;
case WM_CREATE: //窗口消息-创建
HotKey.RegisterHotKey(Handle, keyID, 3, Keys.M);//设置Ctrl+alt+m热键
break;
case WM_DESTROY: //窗口消息-销毁
HotKey.UnregisterHotKey(Handle, keyID); //销毁热键
break;
default:
break;
}
}
本次文章分享结束,希望程序员们在程序设计中能更多的融入无障碍因素,让每个软件都能有更好的无障碍体验。
猜你喜欢
- 2025-04-08 基本语法 - C#入门教程(c#基础语法汇总pdf)
- 2025-04-08 C#_sqlserver数据库操作(c#sql数据库连接代码)
- 2025-04-08 自学C#编程三天后的感受:跟VB真像、比Java舒服、学习资料丰富
- 2025-04-08 C# 并行和多线程编程——认识和使用Task
- 2025-04-08 一个完整的C#程序(5-1)-C#编程零基础到入门学习
- 2025-04-08 C#编程的仪器控制系统界面案例:智能操作与高效用户体验
- 2025-04-08 C#编程实现和威纶通触摸屏的Modbus-Rtu通讯, 没想到如此简单
- 2025-04-08 C#并发编程经典实例,中文版高清PDF资源
- 2025-04-08 C#编程技巧:在运行时检查和动态编译.cs为.dll并调用的方法
- 2025-04-08 C#编程实现和威纶通触摸屏的Modbus-Rtu通讯
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)