1

我在我的 Windows 窗体应用程序中使用了一个文本框,我需要禁用快捷键CTRL+ICTRL+ H。我尝试了许多通过谷歌找到的不同解决方案,但它不起作用。

我已经在我的应用程序中使用CTRL+I作为自定义快捷方式,并且我不想在我的文本框中通过此命令插入制表位。无论出于何种原因CTRL+H就像按删除一样?

如果我在控件的属性中将“启用快捷方式”设置为 false,则CTRL+ICTRL+H仍然有效。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;
            }
        }
    }
4

4 回答 4

1

尝试覆盖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);
}
于 2013-09-22T10:21:40.040 回答
1

这可能会有所帮助。我有带有 ShorcutKeys 的几个项目的 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);
    }
于 2020-04-17T10:02:48.480 回答
0

尝试添加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;
        }
    }
}
于 2013-09-22T10:57:50.237 回答
0

使用 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

于 2013-09-22T10:28:15.763 回答