国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# WinForm快捷鍵設置技巧

2019-10-29 21:36:48
字體:
來源:轉載
供稿:網友

這篇文章主要給大家介紹C# winform快捷鍵設置技巧,涉及到C winform快捷鍵相關知識,對C winform知識感興趣的朋友可以參考下本篇文章

1、Alt+*(按鈕快捷鍵)

按鈕快捷鍵也為最常用快捷鍵,其設置也故為簡單。在大家給button、label、menuStrip等其他控件的Text屬性指定名稱時,在其后面加上‘&'然后在加上一個指定字母即可。如:確定(&D),(Alt+D)調用。

如指定多個字母,則第一個為快捷鍵。如:確定(&OK),(Alt+O)調用;文件(&Fill),(Alt+F)調用。

2、Ctrl+*及其他組合鍵

把 Form 的 KeyPreview 屬性設為 True

使用Modifiers可設置組合鍵,鍵盤數字區按鍵的Keys枚舉以D打頭,而小鍵盤上的數字以NumPad打頭。按下Ctrl與Shift組合鍵的方法與其類似,將Ctrl和Alt的枚舉轉換為int型相加后與Modifiers對比,這樣即可判斷是否按下了該組合鍵。
 

  1. private void frmMain_KeyDown(object sender, KeyEventArgs e) 
  2. //比如你的窗體名是frmMain,確定按鈕btnOK,保存按鈕btnSave 
  3. //單鍵 
  4. switch (e.KeyCode) 
  5. case Keys.F1: 
  6. btnOK_Click(this, EventArgs.Empty); 
  7. break
  8. case Keys.F2: 
  9. btnSave_Click(this, EventArgs.Empty);  
  10. break;  
  11. // 組合鍵 
  12. if (e.KeyCode == Keys.F1 && e.Modifiers == Keys.Control) //Ctrl+F1 
  13. btnShouYi_Click(this, EventArgs.Empty); 
  14. if ((int)e.Modifiers == ((int)Keys.Control + (int)Keys.Alt) && e.KeyCode == Keys.D0) //Ctrl + Alt + 數字0 
  15. MessageBox.Show("按下了Control + Alt + 0"); 

另外的,與窗體的AcceptButton屬性相關聯的按鈕,將與鍵盤上的Enter鍵對應;與窗體的CancelButton屬性相關聯的按鈕,將與鍵盤上的Ecs鍵對應。

}

======================================================

鍵 代碼

BACKSPACE {BACKSPACE}、{BS} 或 {BKSP}

BREAK {BREAK}

CAPS LOCK {CAPSLOCK}

DEL 或 DELETE {DELETE} 或 {DEL}

DOWN ARROW(下箭頭鍵) {DOWN}

END {END}

ENTER {ENTER} 或 ~

ESC {ESC}

HELP {HELP}

HOME {HOME}

INS 或 INSERT {INSERT} 或 {INS}

LEFT ARROW(左箭頭鍵) {LEFT}

NUM LOCK {NUMLOCK}

PAGE DOWN {PGDN}

PAGE UP {PGUP}

PRINT SCREEN {PRTSC}(保留供將來使用)

RIGHT ARROW(右箭頭鍵) {RIGHT}

SCROLL LOCK {SCROLLLOCK}

TAB {TAB}

UP ARROW(上箭頭鍵) {UP}

F1 {F1}

F2 {F2}

F3 {F3}

F4 {F4}

F5 {F5}

F6 {F6}

F7 {F7}

F8 {F8}

F9 {F9}

F10 {F10}

F11 {F11}

F12 {F12}

F13 {F13}

F14 {F14}

F15 {F15}

F16 {F16}

數字鍵盤加號 {ADD}

數字鍵盤減號 {SUBTRACT}

數字鍵盤乘號 {MULTIPLY}

數字鍵盤除號 {DIVIDE}

**********************************************************************篇3**************************************************************************************************

#region 快捷鍵相關

///

/// 記錄快捷鍵

///

 

 
  1. private void txtHotKey_KeyDown(object sender, KeyEventArgs e) 
  2.   int HotKeyValue = 0; 
  3.   string HotKeyString = ""
  4.   e.SuppressKeyPress = false
  5.   e.Handled = true
  6.   if (e.Modifiers != Keys.None) 
  7.   { 
  8.     switch (e.Modifiers) 
  9.     { 
  10.       case Keys.Control: 
  11.         HotKeyString += "Ctrl + "
  12.         HotKeyValue = (int)e.Modifiers; 
  13.         break
  14.       case Keys.Alt: 
  15.         HotKeyString += "Alt + "
  16.         HotKeyValue = (int)e.Modifiers; 
  17.         break
  18.       case Keys.Shift: 
  19.         HotKeyString += "Shift + "
  20.         HotKeyValue = (int)e.Modifiers; 
  21.         break
  22.       case Keys.Control | Keys.Alt: 
  23.         HotKeyString += "Ctrl + Alt + "
  24.         HotKeyValue = (int)e.Modifiers; 
  25.         break
  26.       case Keys.Control | Keys.Shift: 
  27.         HotKeyString += "Ctrl + Shift + "
  28.         HotKeyValue = (int)e.Modifiers; 
  29.         break
  30.       case Keys.Alt | Keys.Shift: 
  31.         HotKeyString += "Alt + Shift + "
  32.         HotKeyValue = (int)e.Modifiers; 
  33.         break
  34.       case Keys.Control | Keys.Alt | Keys.Shift: 
  35.         HotKeyString += "Ctrl + Alt + Shift + "
  36.         HotKeyValue = (int)e.Modifiers; 
  37.         break
  38.     } 
  39.     if (e.KeyCode != Keys.None && e.KeyCode != Keys.ControlKey && e.KeyCode != Keys.Menu && e.KeyCode != Keys.ShiftKey) 
  40.     { 
  41.       HotKeyString += KeyCodeToString(e.KeyCode); 
  42.       HotKeyValue += (int)e.KeyCode; 
  43.     } 
  44.   } 
  45.   else 
  46.   { 
  47.     if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) 
  48.     { 
  49.       HotKeyString = "無"
  50.       HotKeyValue = -1; 
  51.     } 
  52.     else if (e.KeyCode != Keys.None) 
  53.     { 
  54.       HotKeyString = KeyCodeToString(e.KeyCode); 
  55.       HotKeyValue = (int)e.KeyCode; 
  56.     } 
  57.   } 
  58.   if (HotKeyValue == 0) 
  59.     HotKeyValue = -1; 
  60.   TextBox txtHotKey = (TextBox)sender; 
  61.   txtHotKey.Text = HotKeyString; 
  62.   txtHotKey.Tag = HotKeyValue; 
  63.   txtHotKey.SelectionStart = txtHotKey.Text.Length; 
  64. /// 
  65. /// 將按鍵轉換成相應字符 
  66. /// 
  67. /// 按鍵 
  68. /// 字符 
  69. private string KeyCodeToString(Keys KeyCode) 
  70.   if (KeyCode >= Keys.D0 && KeyCode <= Keys.D9) 
  71.   { 
  72.     return KeyCode.ToString().Remove(0, 1); 
  73.   } 
  74.   else if (KeyCode >= Keys.NumPad0 && KeyCode <= Keys.NumPad9) 
  75.   { 
  76.     return KeyCode.ToString().Replace("Pad"""); 
  77.   } 
  78.   else 
  79.   { 
  80.     return KeyCode.ToString(); 
  81.   } 
  82. /// 
  83. /// 設置按鍵不響應 
  84. /// 
  85. private void txtHotKey_KeyPress(object sender, KeyPressEventArgs e) 
  86.   e.Handled = true
  87. /// 
  88. /// 釋放按鍵后,若是無實際功能鍵,則置無 
  89. /// 
  90. private void txtHotKey_KeyUp(object sender, KeyEventArgs e) 
  91.   CheckHotkey(sender); 
  92. /// 
  93. /// 失去焦點后,若是無實際功能鍵,則置無 
  94. /// 
  95. private void txtHotKey_LostFocus(object sender, EventArgs e) 
  96.   CheckHotkey(sender); 
  97. /// 
  98. /// 檢查是否無實際功能鍵,是則置無 
  99. /// 
  100. private void CheckHotkey(object sender) 
  101.   TextBox txtHotKey = (TextBox)sender; 
  102.   if (txtHotKey.Text.EndsWith(" + ") || String.IsNullOrEmpty(txtHotKey.Text)) 
  103.   { 
  104.     txtHotKey.Text = "無"
  105.     txtHotKey.Tag = -1; 
  106.     txtHotKey.SelectionStart = txtHotKey.Text.Length; 
  107.   } 

#endregion

#實現快捷鍵(系統熱鍵)響應

在應用中,我們可能會需要實現像Ctrl+C復制、Ctrl+V粘貼這樣的快捷鍵,本文簡單介紹了它的實現,并給出了一個實現類。

(1)建立一個類文件,命名為HotKey.cs,代碼如下:
 

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Runtime.InteropServices; 
  4. using System.Windows.Forms; 
  5. namespace KoalaStudio.BookshopManager 
  6. class HotKey 
  7. //如果函數執行成功,返回值不為0。 
  8. //如果函數執行失敗,返回值為0。要得到擴展錯誤信息,調用GetLastError。 
  9. [DllImport("user32.dll", SetLastError = true)] 
  10. public static extern bool RegisterHotKey( 
  11. IntPtr hWnd, //要定義熱鍵的窗口的句柄 
  12. int id, //定義熱鍵ID(不能與其它ID重復)  
  13. KeyModifiers fsModifiers, //標識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效 
  14. Keys vk //定義熱鍵的內容 
  15. ); 
  16. [DllImport("user32.dll", SetLastError = true)] 
  17. public static extern bool UnregisterHotKey( 
  18. IntPtr hWnd, //要取消熱鍵的窗口的句柄 
  19. int id //要取消熱鍵的ID 
  20. ); 
  21. //定義了輔助鍵的名稱(將數字轉變為字符以便于記憶,也可去除此枚舉而直接使用數值) 
  22. [Flags()] 
  23. public enum KeyModifiers 
  24. None = 0, 
  25. Alt = 1, 
  26. Ctrl = 2, 
  27. Shift = 4, 
  28. 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號可任意設置,但要保證不被重復。

 

 
  1. private void Form_Activated(object sender, EventArgs e) 
  2. //注冊熱鍵Shift+S,Id號為100。HotKey.KeyModifiers.Shift也可以直接使用數字4來表示。 
  3. HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S); 
  4. //注冊熱鍵Ctrl+B,Id號為101。HotKey.KeyModifiers.Ctrl也可以直接使用數字2來表示。 
  5. HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B); 
  6. //注冊熱鍵Alt+D,Id號為102。HotKey.KeyModifiers.Alt也可以直接使用數字1來表示。 
  7. HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D); 

在FormA的Leave事件中注銷熱鍵。

 

  1. private void FrmSale_Leave(object sender, EventArgs e) 
  2. //注銷Id號為100的熱鍵設定 
  3. HotKey.UnregisterHotKey(Handle, 100); 
  4. //注銷Id號為101的熱鍵設定 
  5. HotKey.UnregisterHotKey(Handle, 101);// http://ike.126.com 
  6. //注銷Id號為102的熱鍵設定 
  7. HotKey.UnregisterHotKey(Handle, 102); 

重載FromA中的WndProc函數

 

 
  1. ///  
  2. /// 監視Windows消息 
  3. /// 重載WndProc方法,用于實現熱鍵響應 
  4. ///  
  5. ///  
  6. protected override void WndProc(ref Message m) 
  7. const int WM_HOTKEY = 0x0312; 
  8. //按快捷鍵  
  9. switch (m.Msg) 
  10. case WM_HOTKEY: 
  11. switch (m.WParam.ToInt32()) 
  12. case 100: //按下的是Shift+S 
  13. //此處填寫快捷鍵響應代碼  
  14. break
  15. case 101: //按下的是Ctrl+B 
  16. //此處填寫快捷鍵響應代碼 
  17. break
  18. case 102: //按下的是Alt+D 
  19. //此處填寫快捷鍵響應代碼 
  20. break
  21. break
  22. base.WndProc(ref m); 

完成代碼后,我們在窗體中按下Shift+S、Ctrl+B、Alt+D這三組快捷鍵中的任意一組時,程序都會做出響應的反應。

以上內容是小編給大家介紹的C# WinForm快捷鍵設置技巧,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐清市| 六盘水市| 贵德县| 班戈县| 泊头市| 北海市| 万荣县| 白朗县| 遵义市| 科技| 轮台县| 赣州市| 石城县| 长治市| 长乐市| 杨浦区| 静乐县| 郑州市| 秦皇岛市| 漯河市| 三都| 龙岩市| 阿坝县| 富锦市| 原阳县| 清新县| 会理县| 南溪县| 眉山市| 潼关县| 含山县| 沙田区| 科技| 南川市| 新郑市| 马尔康县| 长春市| 龙海市| 莆田市| 紫阳县| 古田县|