簡體   English   中英

C# 文本框禁用快捷方式

[英]C# textbox disable shortcuts

我在 Windows 窗體應用程序中使用了一個文本框,我需要禁用快捷鍵CTRL + ICTRL + H 我嘗試了通過谷歌找到的許多不同的解決方案,但它不起作用。

我已經在我的應用程序中使用CTRL + I作為自定義快捷方式,我不想在我的文本框中通過此命令插入制表位。 無論出於何種原因CTRL + H就像按下刪除鍵一樣?

如果我在控件CTRL + ICTRL + H的屬性中將“啟用快捷方式”設置為 false 仍然有效。 CTRL + CCTRL + V然后被禁用。 如果我將“啟用快捷方式”設置為 false,我希望所有快捷方式都關閉。

我嘗試了在某處找到的以下代碼,但它也不能阻止CTRL + ICTRL + H

    private void textBoxComment_KeyDown(object sender, KeyEventArgs e)
    {
        if ( e.Modifiers == Keys.Control )
        {
            switch(e.KeyCode)
            {
                case Keys.C:
                case Keys.X:
                case Keys.V:
                case Keys.Z:
                case Keys.I:
                case Keys.H:
                e.Handled = true;
                break;
                default:
                break;
            }
        }
    }

嘗試覆蓋ProcessCmdKey函數:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
   if ((keyData & Keys.Control) > 0 && (keyData & Keys.KeyCode) == Keys.V)
   {
       return true;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}

這可能會有所幫助。 我的 ToolStripMenu 有幾個項目,其中有快捷鍵。 我想在任何 TextBox 獲得焦點時停止它們的功能。 這對我有用

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (ActiveControl is TextBox)
        {
            foreach (ToolStripMenuItem item in menu.DropDownItems)
            {
                if (item.ShortcutKeys == Keys.None) continue;

                if (item.ShortcutKeys == keyData)
                {
                    item.ShortcutKeys = Keys.None;

                    var ret = base.ProcessCmdKey(ref msg, keyData);

                    item.ShortcutKeys = keyData;

                    return ret;
                }
            }
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }

使用shortcutsenabled 屬性,這樣您就可以更有選擇性地從鼠標和鍵盤中排除快捷方式。

TextBox.ShortcutsEnabled = false;

參考msdn使用 ShortcutsEnabled 屬性啟用或禁用以下快捷鍵組合和控件的快捷菜單: CTRL+Z CTRL+E CTRL+C CTRL+Y CTRL+X CTRL+BACKSPACE CTRL+V CTRL+DELETE CTRL+A SHIFT+刪除 CTRL+L SHIFT+插入 CTRL+R

嘗試添加e.SuppressKeyPress = true也:

private void textBoxComment_KeyDown(object sender, KeyEventArgs e)
{
    if ( e.Modifiers == Keys.Control )
    {
        switch(e.KeyCode)
        {
            case Keys.C:
            case Keys.X:
            case Keys.V:
            case Keys.Z:
            case Keys.I:
            case Keys.H:
            e.Handled = true;
            e.SuppressKeyPress = true;
            break;
            default:
            break;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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