s.k.paul
s.k.paul

Reputation: 7291

handle Control + enter in a multiline textbox in c#

I am trying to handle Ctrl+Enter keydown event in my winapp project.

  private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode==Keys.Enter && e.KeyCode==Keys.Control)
        {
            //Some statements.
        }
    }

But, it's not working. Any help?

Upvotes: 1

Views: 3266

Answers (2)

jmcilhinney
jmcilhinney

Reputation: 54417

If you want to detect a key and modifiers then you test e.KeyData, not e.KeyCode. In this case:

if (e.KeyData == (Keys.Control | Keys.Enter))

Note that that is a bitwise OR of the Control modifier key and the Enter key.

EDIT:

If the point is to prevent a line break being added on Ctrl+Enter then this is what you should do:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = (e.KeyData == (Keys.Control | Keys.Enter));
}

Upvotes: 7

Vishal Suthar
Vishal Suthar

Reputation: 17193

It should be Control.ModifierKeys as below: Ctrl + Enter

private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter && Control.ModifierKeys == Keys.Control)
    {
        e.Handled = false;
        MessageBox.Show("Ok KeyDown");
    }
}

EDIT: To prevent the newline:

private bool keydowncalled = false;
private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
{
    keydowncalled = false;

    if (e.KeyData == (Keys.Control | Keys.Enter))
    {
        keydowncalled = true;
        MessageBox.Show("Ok KeyDown");
    }
}

private void txtAnswer_KeyPress(object sender, KeyPressEventArgs e)
{
    if (keydowncalled == true)
    {
        // Stop the newline from being entered into the control.
        e.Handled = true;
    }
}

Upvotes: 2

Related Questions