即使在设置e.Handled = true

时间:2016-06-08 09:35:34

标签: c# winforms

我为KeyPreview = true;设置了Form。我基本上想要使用箭头键转到下一个和上一个图像,而不是将焦点更改为不同的控件。我已将Handled属性设置为true,但仍然按箭头键按下更改焦点。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Delete)
    {
        // Do stuff
    }
    else if (e.KeyCode == Keys.Left)
    {
        // Do stuff
        e.Handled = true;
    }
    else if (e.KeyCode == Keys.Right)
    {
        // Do stuff
        e.Handled = true;
    }
}

编辑

我想要实现的行为如下。

Left Arrow Key -> Previous Image
Right Arrow Key -> Next Image

现在,我的TextBox上还有一些Form es因此我不希望转到下一张和之前的图片,如果那些Textbox是焦点,因为它应该在文本中导航。

1 个答案:

答案 0 :(得分:1)

这对我有用。

  1. 请勿为KeyPreview = true;设置Form
  2. 覆盖ProcessCmdKey并根据需要处理TextBox es中没有任何焦点。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    
        if (textBox1.ContainsFocus || textBox2.ContainsFocus || textBox3.ContainsFocus)
        {
            return base.ProcessCmdKey(ref msg, keyData);
        }
    
        if (keyData == Keys.Delete)
        {
            removeRect();
            return true;
        }
        else if (keyData == Keys.Left)
        {
            previousImg();
            return true;
        }
        else if (keyData == Keys.Right)
        {
            nextImg();
            return true;
        }
    
        else
        {
            return base.ProcessCmdKey(ref msg, keyData);
        }
    }