0

我在表单上使用了一个链接按钮,并且在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

4 回答 4

2

设置 form1 的KeyPreview = true。有用。

于 2012-12-13T09:18:57.927 回答
0

当你想移动一个Control时,你必须重新配置它的Control.Location属性。因此,只需从 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) - 坐标。

于 2012-12-13T09:17:33.050 回答
0

我认为这与链接标签对事件的拦截有关。如果表单上存在链接标签,则不会将按键事件引发到表单。

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

更新:

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

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == Keys.Left)
        {
            linkLabel1.Left = linkLabel1.Left + 5;
        }
        return base.ProcessDialogKey(keyData);
    }
于 2012-12-13T09:16:58.907 回答
0

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

于 2013-12-05T03:23:56.537 回答