设置快捷键是哪个属性或方法?

Mr_Pang_China 2009-04-22 10:08:00
我做菜单栏的时候想把一些菜单设置一下快捷键 应该怎么弄?
最近比赛需要做一个针对数据库的增删改查软件 我想加一些比较新颖的功能 加哪些比较好推荐一下!
...全文
265 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdc123 2009-04-22
  • 打赏
  • 举报
回复
ShortCutKeys属性

如果是想菜单有个字母带有下划线,可以这样设置文本为 文件(&F) ,那么F就是带下划线的

顶 是这样设置的。。。
whyabc 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 blestcc 的回复:]
text中直接加&+快捷鍵就行了,比如“打開&O”快捷鍵就是alt+O
[/Quote]
up
hm020 2009-04-22
  • 打赏
  • 举报
回复
好帖,占个位,慢慢看
jietuan 2009-04-22
  • 打赏
  • 举报
回复
帮顶,收藏
blestcc 2009-04-22
  • 打赏
  • 举报
回复
text中直接加&+快捷鍵就行了,比如“打開&O”快捷鍵就是alt+O
abcfy2 2009-04-22
  • 打赏
  • 举报
回复
找到很多这样的例子,这就是一个
http://blog.sina.com.cn/s/blog_53864cba0100ch2j.html
zzxap 2009-04-22
  • 打赏
  • 举报
回复
[code=C#]
要设置快捷键必须使用user32.dll下面的两个方法。

BOOL RegisterHotKey(
 HWND hWnd,
 int id,
 UINT fsModifiers,
 UINT vk
);

  和

BOOL UnregisterHotKey(
 HWND hWnd,
 int id
);
转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:

[DllImport("user32.dll", SetLastError=true)]
public static extern bool RegisterHotKey(
 IntPtr hWnd, // handle to window
 int id, // hot key identifier
 KeyModifiers fsModifiers, // key-modifier options
 Keys vk // virtual-key code
);

[DllImport("user32.dll", SetLastError=true)]
public static extern bool UnregisterHotKey(
 IntPtr hWnd, // handle to window
 int id // hot key identifier
);


[Flags()]
public enum KeyModifiers
{
 None = 0,
 Alt = 1,
 Control = 2,
 Shift = 4,
 Windows = 8
}

  这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。

  于是有了:

private void Form1_Load(object sender, System.EventArgs e)
{
 label2.AutoSize = true;

 Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
 RegisterHotKey(Handle, 100, 0, Keys.F10);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
 UnregisterHotKey(Handle, 100);//卸载快捷键
}

  那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?

  那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:

protected override void WndProc(ref Message m)//监视Windows消息
{
 const int WM_HOTKEY = 0x0312;//按快捷键
 switch (m.Msg)
 {
  case WM_HOTKEY:
   ProcessHotkey();//调用主处理程序
   break;
 }
 base.WndProc(ref m);
}

  这样我的程序就完成了。
[/CODE]
bw555 2009-04-22
  • 打赏
  • 举报
回复
利用api创建系统热键
Public Declare Auto Function RegisterHotKey Lib "user32.dll" Alias _
"RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean

Public Declare Auto Function UnRegisterHotKey Lib "user32.dll" Alias _
"UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'注册全局热键
RegisterHotKey(Handle, 0, 7, Keys.C)
RegisterHotKey(Handle, 1, Nothing, Keys.L)
' 0=nothing 1 -alt 2-ctrl 3-ctrl+alt 4-shift 5-alt+shift 6-ctrl+shift 7-ctrl+shift+alt
End Sub

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed

UnRegisterHotKey(Handle, 0)
UnRegisterHotKey(Handle, 1)
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = 786 Then

If m.WParam.ToInt32 = 1 Then
MsgBox(m.Msg)
ElseIf m.WParam.ToInt32 = 0 Then
MsgBox(m.Msg)
End If

TextBox1.Text &= " " & m.Msg
End If
'If m.Msg = WM_HOTKEY Then
'End If

MyBase.WndProc(m)
End Sub
yangqidong 2009-04-22
  • 打赏
  • 举报
回复
ShortCutKeys属性

如果是想菜单有个字母带有下划线,可以这样设置文本为 文件(&F) ,那么F就是带下划线的

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧