给Button定义快捷键

whowhen21 2009-03-27 09:34:58
我想实现这样的一个功能,就是一个按钮(Button),我想通过一个快捷键,来实现它的单击事件,如何实现呀?
或者重写一个Button?请教了,给点参考,谢谢。
...全文
511 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
POWER_WONG 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 POWER_WONG 的回复:]
用消息,在窗体上定义一个函数protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Form.Keys keyData)
{
//用Alt+S键
if (keyData==(Keys.Alt | Keys.S))
{
btnOK_Click(null, null);
return true;
}

//或才用Enter键
if (keyData == Keys.Enter)
{
btnOK_Click(null, null);
return true;

[/Quote]

将上面的Keys.Alt改为Keys.Control就行了。
成都慢生活 2009-03-30
  • 打赏
  • 举报
回复
Right, 用api注册热键才能保证form没有焦点也能执行


[Quote=引用 19 楼 mykelly6 的回复:]
注册一个热键好了。
keydown的话可能要焦点在那个控件上吧
C# code

[DllImport("user32")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);

[DllImport("user32")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

protected override void WndProc(ref Message m)
{
switch (m.Msg)

[/Quote]
mykelly6 2009-03-30
  • 打赏
  • 举报
回复
注册一个热键好了。
keydown的话可能要焦点在那个控件上吧

[DllImport("user32")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);

[DllImport("user32")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312:
if (m.WParam.ToString() == "123")
{
this.Hide();
}
else if (m.WParam.ToString() == "456")
{
this.Visible = true;
}
break;
}
base.WndProc(ref m);
}

private void BookShelf_Load(object sender, EventArgs e)
{
//register:press [H] key to hide,and press [S] key to show
RegisterHotKey(this.Handle, 123, 1, Keys.H);
RegisterHotKey(this.Handle, 456, 1, Keys.S);
//这里1是shift,2是ctrl,0是两个都不要
}

private void BookShelf_FormClosed(object sender, FormClosedEventArgs e)
{
UnregisterHotKey(this.Handle, 123);
UnregisterHotKey(this.Handle, 456);
}
liu4545533 2009-03-29
  • 打赏
  • 举报
回复
利用keydowm事件就可以实现了
wenblue7 2009-03-29
  • 打赏
  • 举报
回复
js试试吧
fanbo 2009-03-29
  • 打赏
  • 举报
回复
窗体上写上触发事件
  • 打赏
  • 举报
回复
给所有窗体加上按键事件 一旦按键就判断不就好了
C_sdnElf 2009-03-29
  • 打赏
  • 举报
回复
up
jqrr00 2009-03-29
  • 打赏
  • 举报
回复
文同志 做MyQQ 发消息用啊!呵呵
whowhen21 2009-03-29
  • 打赏
  • 举报
回复
我想用Ctrl 加上某个键呀,
lhs0403 2009-03-29
  • 打赏
  • 举报
回复
button1&B 设B为button1的快捷键
whowhen21 2009-03-29
  • 打赏
  • 举报
回复
可是我是在C#WinForm里面啊,请教了
IamHandsomeman 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pt1314917 的回复:]
打掉了。在asp.net里面。需要js
[/Quote]

对的!
whowhen21 2009-03-29
  • 打赏
  • 举报
回复
我想这个意思啦,就是比如一个按钮(btnOK),我想通过按快捷键:Ctrl + O来执行,怎么实现呀?

楼上有的(&O)这个我知道,只能用Alt的,我想用Ctrl组合的,请教如何实现?
pt1314917 2009-03-27
  • 打赏
  • 举报
回复
打掉了。在asp.net里面。需要js
pt1314917 2009-03-27
  • 打赏
  • 举报
回复
如二楼,如果是winform里面。就可以了
在.net里面。写js
贫僧又回来了 2009-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Chawind 的回复:]
Buttion1的属性里找text属性。。
为其赋值,名称+(&快捷键)
例如ok(&F)就好了。。单击F 执行button单击事件
[/Quote]



protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.F2))
{
button1_Click(null, null);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
这样也行
POWER_WONG 2009-03-27
  • 打赏
  • 举报
回复
用消息,在窗体上定义一个函数protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Form.Keys keyData)
{
//用Alt+S键
if (keyData==(Keys.Alt | Keys.S))
{
btnOK_Click(null, null);
return true;
}

//或才用Enter键
if (keyData == Keys.Enter)
{
btnOK_Click(null, null);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

假如果你的按钮的单击事件如下:

private void btnOK_Click(object sender, EventArgs e)
{
//要执行的操作
}
Chawind 2009-03-27
  • 打赏
  • 举报
回复
Buttion1的属性里找text属性。。
为其赋值,名称+(&快捷键)
例如ok(&F)就好了。。单击F 执行button单击事件
xixuan_sky 2009-03-27
  • 打赏
  • 举报
回复
没有做过,up

111,126

社区成员

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

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

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