[英]Shortcut Keys for Saving or Editing Record in C#
我正在Windows窗體應用程序上工作,在這里我有一些文本框值和兩個按鈕,一個是SAVE ,另一個是EDIT 。 用於在單擊時保存記錄的按鈕代碼工作得很好。 但是現在我想通過按CTRL + S代表SAVE和CTRL + E代表EDIT將鍵盤快捷鍵添加到SAVE和EDIT記錄中。 請幫我解決一下這個。 我是該編程領域的新手,因此請准確且非常清楚地在程序中的哪里編寫我的代碼。
謝謝
首先,應將Form
的Form.KeyPreview
屬性設置為true
。 導致Form.KeyPreview
屬性( 如MSDN所說 ):
獲取或設置一個值,該值指示在事件傳遞給具有焦點的控件之前,表單是否將接收鍵事件。
然后有必要為Form
KeyDown
事件創建一個事件處理程序:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.S)
{
buttonSave_Click(null, null);
}
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.S)
{
buttonEdit_Click(null, null);
}
}
將MenuStrip
添加到您的窗體。 添加兩個ToolStripMenuItem
保存並編輯,將它們附加到您的EventHandler按鈕單擊上。 將所需的值(Ctrl + S,Ctrl + E)分配給ShortcutKeys
屬性。
如果您的應用程序不需要主菜單,則可以將其隱藏( Visible
=否)。
您也可以嘗試為您的Form覆蓋ProcessDialogKey()。
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = keyData & Keys.KeyCode;
bool contrloIsPressed = (keyData & Keys.Control) == Keys.Control ? true : false;
switch (key)
{
case Keys.S:
if (contrloIsPressed)
Save();
break;
case Keys.E:
if (contrloIsPressed)
Edit();
break;
}
return base.ProcessDialogKey(keyData);
}
可能是為了幫助您。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.Q | Keys.Control:
Close();
return false;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
protected override bool ProcessCmdKey(ref Message message, Keys keys)
{
switch (keys)
{
case Keys.A | Keys.Control:
// ... Process Shift+Ctrl+Alt+B ...
adding = true;
updating = false;
EnableText();
ClearText();
AutoNo();
return true; // signal that we've processed this key
case Keys.S | Keys.Control:
// ... Process Shift+Ctrl+Alt+B ...
SaveUpdate();
return true; // signal that we've processed this key
case Keys.E | Keys.Control:
// ... Process Shift+Ctrl+Alt+B ...
updating = true;
adding = false;
EnableText();
return true; // signal that we've processed this key
case Keys.D | Keys.Control:
// ... Process Shift+Ctrl+Alt+B ...
DeleteRecord();
return true; // signal that we've processed this key
}
// run base implementation
return base.ProcessCmdKey(ref message, keys);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.