窗体加载时无法设置窗体焦点?

时间:2013-04-12 13:43:40

标签: c# winforms

我在搜索谷歌之前先问过这个问题。基本上我已经尝试过一个小蛇游戏。我的游戏开始按箭头键。当焦点窗口形成时,此箭头键工作。如果我们删除每种类型的按钮和控件然后焦点转到窗体窗体,其他明​​智的焦点设置在窗体上。我刚刚在按钮上添加了按钮焦点设置。任何人的帮助和提前感谢..

enter image description here

 private void Key_down(object sender, KeyEventArgs e)
    {
        int xx = pictureBox1.Location.X;
        int yy = pictureBox1.Location.Y;
        i = xx;
        ii = yy;

        if (e.KeyCode == Keys.Right)
        {
          //  x = x + 1;
           // MessageBox.Show("Test");
       //     pictureBox1.DisplayRectangle = Rectangle.
           cr = true;
           cl = false;
           cu = false;
           cd = false;
         // pictureBox1.Location = new Point(x, y);

        }
        else if (e.KeyCode == Keys.Left)
        {
            cl = true;
            cr = false;
            cu = false;
            cd = false;
        }
        else if (e.KeyCode == Keys.Up)
        {
            cu = true;
            cl = false;
            cr = false;
            cd = false;
        }

        else if (e.KeyCode == Keys.Down)
        {
            cd = true;
            cu = false;
            cr = false;
            cl = false;
        }
      //  pictureBox1.Location = new Point(x, y);

    }

3 个答案:

答案 0 :(得分:1)

当我输入Form的Load事件时,此行对我不起作用

    this.Focus();

仅当我将其放在Form的Shown中时才起作用。 我相信必须在表单加载完成后调用Focus()方法。

答案 1 :(得分:0)

添加this.Focus();作为表单加载过程的最后一行

如果你想防止它失去焦点,请添加一个计时器并在.tick过程中添加this.Focus();并将间隔设置为1000,以便每秒检查一次表单是否具有焦点

希望这有帮助

答案 2 :(得分:0)

JamesB在评论中添加了正确的答案:您只需将表单的KeyPreview属性设置为true,然后您的KeyDown方法将接收所有关键事件,无论表格上的哪个控件有焦点。请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx