如何在C#中使用箭头禁用WinForm上的导航?

时间:2009-08-23 10:23:43

标签: c# winforms focus

我需要禁用使用表单上的箭头更改焦点。有一种简单的方法可以做到吗?

谢谢

4 个答案:

答案 0 :(得分:16)

有些事情:

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach (Control control in this.Controls)
        {
            control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
        }
    }

    void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
        {
            e.IsInputKey = true;
        }
    }

答案 1 :(得分:4)

我最终得到了下面的代码,该代码将功能设置为对窗体的每个控制:

(代码基于andynormancx中的代码)



private void Form1_Load(object sender, EventArgs e)
{
    SetFeatureToAllControls(this.Controls);    
}

private void SetFeatureToAllControls(Control.ControlCollection cc)
{
    if (cc != null)
    {
        foreach (Control control in cc)
        {
            control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
            SetFeatureToAllControls(control.Controls);
        }
    }
}

void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
    {
        e.IsInputKey = true;
    }
}

答案 2 :(得分:1)

您应该在表单上将KeyPreview设置为true。处理KeyDown/KeyUp/KeyPress事件并将eventhandler中的e.Handled设置为true,以便您想要忽略这些键。

答案 3 :(得分:0)

我试过这个方法,表单处理预览事件一次。它生成的代码少于其他选项。

只需将此方法添加到表单的PreviewKeyDown事件中,然后将KeyPreview属性设置为true

private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
        case Keys.Down:
        case Keys.Left:
        case Keys.Right:
            e.IsInputKey = true;
            break;
        default:
            break;
    }
}