【问题标题】:How to make a button move by touching an arrow key on the form?如何通过触摸表单上的箭头键来移动按钮?
【发布时间】:2013-11-27 19:22:53
【问题描述】:

我想知道如何通过触摸键盘上的箭头键来使按钮向上、向下、向右或向左移动。我试过了:

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

但是,它只是不起作用。请帮忙。谢谢!

【问题讨论】:

  • 你试过button1.Location = new Point(button1.Left + 1, button1.Top);吗?
  • 没关系,确实如此。谢谢!

标签: c# winforms button


【解决方案1】:

为了清楚起见,我稍微简化了一点(我跳过了你必须做的所有检查),但可能是这样的:

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

【讨论】:

  • 当我按下一个键时它不动:(
  • 嗯,这取决于你把这段代码放在哪里。此外,不要忘记在选择可聚焦的控制时,表单将无法通知按下键(除非启用键预览)。 span>
  • 好的。我究竟会在哪里启用keypreview? :D @阿德里亚诺
  • 它是KeyPreview的属性(详见链接)。您甚至可以使用它来移动具有焦点的控件(但这会干扰“正常”事件,因为在箭头、制表符、ESC 和其他几个键是特殊)。另请参阅IsInputKey 了解更多详细信息(以及完整的示例)。如果您在处理键盘事件时遇到任何问题,请不要避免发布关于此的另一个问题
【解决方案2】:

你应该这样做:

button1.Location = new Point(button1.Location.X + 1, button1.Location.Y);

【讨论】:

    【解决方案3】:

    您需要为按钮创建一个新位置,不能只修改 X 或 Y,因为 PointLocation 属性类型)是 struct

    例如,您可以在表单的 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;,否则 Key 事件将永远不会触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多