簡體   English   中英

在C#中保存或編輯記錄的快捷鍵

[英]Shortcut Keys for Saving or Editing Record in C#

我正在Windows窗體應用程序上工作,在這里我有一些文本框值和兩個按鈕,一個是SAVE ,另一個是EDIT 用於在單擊時保存記錄的按鈕代碼工作得很好。 但是現在我想通過按CTRL + S代表SAVECTRL + E代表EDIT鍵盤快捷鍵添加到SAVE和EDIT記錄中。 請幫我解決一下這個。 我是該編程領域的新手,因此請准確非常清楚地在程序中的哪里編寫我的代碼。

謝謝

首先,應將FormForm.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM