WinForm中快捷鍵與組合按鍵的設(shè)置方法
新建一個(gè)空白窗體

每個(gè)窗體都有這樣3個(gè)事件:KeyDown、KeyPress、KeyUp,KeyDown和KeyPress都是按鍵按下事件,但KeyDown用的是KeyCode跟鍵盤各個(gè)按鍵相對應(yīng),它對應(yīng)Keys枚舉,用起來比較方便;而KeyPress用的是KeyChar,這個(gè)就要找ASC II編碼了,不方便。KeyUp是按鍵彈起事件,不常用,因此我們使用KeyDown事件來設(shè)置窗體的快捷鍵,雙擊該事件后的空白生成代碼,首先我們設(shè)置單個(gè)按鍵,讓它按下F11最大化,再次按下還原,在事件中加入如下代碼:
if (e.KeyCode == Keys.F11)
{
if (WindowState == FormWindowState.Maximized)
WindowState = FormWindowState.Normal;
else
WindowState = FormWindowState.Maximized;
}
若窗體的WindowState為Maximized則還原,否則最大化,運(yùn)行下試試,很好用 :-)
下面在窗體中加入一個(gè)名為txtInput的TextBox,兩個(gè)名為btnConfirm、btnExit的Button:

再次運(yùn)行窗體,按下F11,不起作用了?這是怎么回事?
因?yàn)檫@時(shí)窗體運(yùn)行后,焦點(diǎn)已不在窗體上,而在控件上了,我們要將KeyPreview設(shè)置為True,向窗體注冊控件上產(chǎn)生的鍵盤事件,再次運(yùn)行,問題解決了。
那么組合按鍵又怎么設(shè)置呢?例如要按下Alt和數(shù)字0,需要這樣:
if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D0)
{
MessageBox.Show("按下了Alt + 0");
}
使用Modifiers可設(shè)置組合鍵,鍵盤數(shù)字區(qū)按鍵的Keys枚舉以D打頭,而小鍵盤上的數(shù)字以NumPad打頭。按下Ctrl與Shift組合鍵的方法與其類似,下面我們看看按下Ctrl + Alt + 數(shù)字0該怎樣設(shè)置:
if ((int)e.Modifiers == ((int)Keys.Control + (int)Keys.Alt) && e.KeyCode == Keys.D0)
{
MessageBox.Show("按下了Control + Alt + 0");
}
將Ctrl和Alt的枚舉轉(zhuǎn)換為int型相加后與Modifiers對比,這樣即可判斷是否按下了該組合鍵。
那么 怎么觸發(fā)按鈕事件呢?
如按F1觸發(fā)confirm按鈕事件
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
/ /如果還有keypress事件,不讓此快捷鍵觸發(fā)其事件可加一句代碼
e.Handled = true; //將Handled設(shè)置為true,指示已經(jīng)處理過KeyPress事件
confirm1.PerformClick();////執(zhí)行單擊confirm1的動(dòng)作
}
}
另外的,與窗體的AcceptButton屬性相關(guān)聯(lián)的按鈕,將與鍵盤上的Enter鍵對應(yīng);與窗體的CancelButton屬性相關(guān)聯(lián)的按鈕,將與鍵盤上的Ecs鍵對應(yīng)。
另外一種簡單快捷鍵的方法
在設(shè)置Button的Text屬性時(shí),在一個(gè)英文字母的前面加上&(and符),例如將btnConfirm的Text屬性設(shè)置為:&Confirm,當(dāng)運(yùn)行窗體,按下Alt + C時(shí),就相當(dāng)于按下該鍵。
- C# Winform 禁止用戶調(diào)整ListView的列寬
- c#中Winform實(shí)現(xiàn)多線程異步更新UI(進(jìn)度及狀態(tài)信息)
- C# Winform下載文件并顯示進(jìn)度條的實(shí)現(xiàn)代碼
- C#中WinForm程序退出方法技巧總結(jié)
- C# WinForm中禁止改變窗口大小的方法
- C#,winform,ShowDialog,子窗體向父窗體傳值
- WinForm中DataGridView添加,刪除,修改操作具體方法
- c# winform多線程的小例子
- WinForm窗體間傳值的方法
- WinForm中的登錄實(shí)現(xiàn)
- .NET WinForm實(shí)現(xiàn)在listview中添加progressbar的方法
相關(guān)文章
C#實(shí)現(xiàn)頁面GZip或Deflate壓縮的方法
這篇文章主要介紹了C#實(shí)現(xiàn)頁面GZip或Deflate壓縮的方法,涉及C#通過GZipStream與DeflateStream實(shí)現(xiàn)頁面壓縮的相關(guān)技巧,需要的朋友可以參考下2015-06-06WindowsForm實(shí)現(xiàn)警告消息框的實(shí)例代碼
這篇文章主要介紹了WindowsForm如何實(shí)現(xiàn)警告消息框,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07