以编程方式移动按钮

本文关键字:按钮 移动 方式 编程 | 更新日期: 2023-09-27 17:58:03

我在C#中移动按钮时遇到问题。我想了很多次。我还没有弄清楚我的代码有什么问题。如果你们能发现我的错误在哪里,请帮帮我。谢谢你们。

这是我的方法,应该在按下箭头键时移动按钮。

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (e.KeyValue == 39)
    {
        button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
    }
    else if (e.KeyValue == 37)
    {
        button1.Location = new Point(button1.Location.X - 1, button1.Location.Y);
    }
}

以编程方式移动按钮

问题是箭头键是一种由控件自动处理的特殊键。因此,您可以通过以下方式之一处理按下箭头键:

第一种方式

我建议您在不处理任何key事件的情况下使用ProcessCmdKey

    public Form1()
    {
        InitializeComponent();
    }
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Left)
        {
            pad.Location = new Point(pad.Location.X - 1, pad.Location.Y);
            return true; 
        }
        else if (keyData == Keys.Right)
        {
            pad.Location = new Point(pad.Location.X + 1, pad.Location.Y);
            return true; 
        }
        else if (keyData == Keys.Up)
        {
            return true; 
        }
        else if (keyData == Keys.Down)
        {
            return true; 
        }
        else
            return base.ProcessCmdKey(ref msg, keyData);
    }

第二种方式:

但是,如果要使用事件来解决此问题,可以使用KeyUp事件而不是KeyDown事件。

public Form1()
{
    InitializeComponent();
    this.BringToFront();
    this.Focus();
    this.KeyPreview = true;
    this.KeyUp += new KeyEventHandler(Form1_KeyUp);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
 {
    if (e.KeyValue == 39)
    {
        pad.Location = new Point(pad.Location.X + 1, pad.Location.Y);
    }
    else if (e.KeyValue == 37)
    {
        pad.Location = new Point(pad.Location.X - 1, pad.Location.Y);
    }
}   
    public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

        }
   void Form1_KeyDown(object sender, KeyEventArgs e)
  {
         if (e.KeyValue == 39)
    {
        button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
    }
    else if (e.KeyValue == 37)
    {
        button1.Location = new Point(button1.Location.X - 1, button1.Location.Y);
    }
 }

试试这个