Form1_KeyDown不按要求工作

时间:2012-12-13 09:03:55

标签: c# winforms

我已经在我的表单和KeyDown事件上采用了一个链接按钮,我按如下方式编写,将链接按钮向左移动

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Left)
        {
            linkLabel1.Left = linkLabel1.Left + 5;
        }
    }

但是这并没有按照要求移动链接标签,有人可以告诉我哪里出错了

这也不起作用

 private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Left:
                linkLabel1.Left = linkLabel1.Left + 5;
                break;
            default:
                return;
        }

    }

4 个答案:

答案 0 :(得分:2)

设置form1的 KeyPreview = true。 它有效。

答案 1 :(得分:0)

我认为它与linklabel拦截事件有关。如果表单上存在链接标签,则按键事件不会被提升到表单。

将KeyPreview设置为true(在表单上)可以解决此问题。然后你应该引发事件,尽管箭头键可能仍有问题。

更新

好的,这应该可行,添加:

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == Keys.Left)
        {
            linkLabel1.Left = linkLabel1.Left + 5;
        }
        return base.ProcessDialogKey(keyData);
    }

答案 2 :(得分:0)

如果要移动控件,则必须重新配置 Control.Location 属性。 所以只需在位置添加或删除一些点。[X / Y] .Property就是这样!

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Left)
        {
            // have we space?
            if(linkLabel1.Location.X >= 4)
                // 5 dots to the left side
                linkLabel1.Location = new Point(linkLabel1.Location.X - 5, linkLabel1.Location.Y);
        }
    }

编辑: msdn

位置是有(x,y) - 坐标。

答案 3 :(得分:0)

protected override bool ProcessCmdKey(ref Message msg,Keys keyData)         {             if(e.KeyCode == Keys.Left)         {             linkLabel1.Left = linkLabel1.Left + 5;         }             return base.ProcessCmdKey(ref msg,keyData);         }