Jones
Jones

Reputation: 11

C# textbox disable shortcuts

i use a textbox inside my windows form application and i need to disable the shortcuts CTRL+I and CTRL+H. I tried many different solutions i found via google but it won't work.

I use CTRL+I already as a custom shortcut in my app and i do not want to have a tabstop inserted by this command inside my textbox. For whatever reason CTRL+H acts like pressing delete?

If i set "Shortcuts enabled" to false in the properties of the control CTRL+I and CTRL+H are still working. CTRL+C or CTRL+V is disabled then. I would expect that all shortcuts are turned off if i set "Shortcuts enabled" to false.

I tried the following code i found somewhere but it also does not prevent CTRL+I or CTRL+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;
            }
        }
    }

Upvotes: 1

Views: 4802

Answers (4)

mathys
mathys

Reputation: 51

This could help. I have ToolStripMenu with few items, which have ShorcutKeys. I wanted to stop their functionality while any TextBox has focus. This worked for me

    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);
    }

Upvotes: 1

King King
King King

Reputation: 63327

Try adding e.SuppressKeyPress = true also:

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;
        }
    }
}

Upvotes: 1

FeliceM
FeliceM

Reputation: 4199

Use the shortcutsenabled property so you can be more selective in excluding shortcuts from mouse and from keyboard.

TextBox.ShortcutsEnabled = false;

Reference msdn Use the ShortcutsEnabled property to enable or disable the following shortcut key combinations and the control’s shortcut menu: CTRL+Z CTRL+E CTRL+C CTRL+Y CTRL+X CTRL+BACKSPACE CTRL+V CTRL+DELETE CTRL+A SHIFT+DELETE CTRL+L SHIFT+INSERT CTRL+R

Upvotes: 0

VladL
VladL

Reputation: 13033

Try overriding ProcessCmdKey function:

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);
}

Upvotes: 1

Related Questions