我想知道如何通过触摸键盘上的箭头键使按钮向上,向下,向右或向左移动。我试过了:
button1.Location.X += 1;
但是,我得到一个错误,说它不是一个变量。所以,我也试过了:
public int xPos, yPos;
然后,在form1_keydown下点了一下:
xPos = Convert.ToInt32(button1.Location.X);
yPos = Convert.ToInt32(button1.Location.Y);
if (e.KeyData == Keys.Up)
{
xPos += 1;
}
但是,它只是不起作用。请帮忙。谢谢!
答案 0 :(得分:2)
我过分简化了一点以表明它(我跳过你必须做的所有检查)但它可能是这样的:
switch (e.KeyData)
{
case Keys.Right:
button1.Location = new Point(button1.Left + 1, button1.Top);
break;
case Keys.Left:
button1.Location = new Point(button1.Left - 1, button1.Top);
break;
case Keys.Up:
button1.Location = new Point(button1.Left, button1.Top - 1);
break;
case Keys.Down:
button1.Location = new Point(button1.Left, button1.Top + 1);
break;
}
答案 1 :(得分:0)
你应该这样做:
button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
答案 2 :(得分:0)
您需要为按钮创建新位置,因为Point
(Location
属性类型)是struct
,所以不能仅修改X或Y.
例如,您可以在表单的KeyUp
事件中执行此操作(不要忘记实际连接事件,而不仅仅是复制/粘贴):
private void OnKeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);
}
}
重要说明:如果您这样做,请不要忘记在表单上设置KeyPreview = true;
,否则密钥事件永远不会触发。