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

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); }

于 2013-12-05T03:23:56.537 に答える
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

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 に答える