Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用按键时按键不起作用。向下(或向上、向左、向右)_C#_Winforms - Fatal编程技术网

C# 使用按键时按键不起作用。向下(或向上、向左、向右)

C# 使用按键时按键不起作用。向下(或向上、向左、向右),c#,winforms,C#,Winforms,我是C C夏普的初学者,我不明白为什么我的箭头键不起作用。有人能帮我吗?注:我是一个初学者,我已经在这方面工作了一段时间,我无法理解它。我试过研究它,但运气不好,我希望我不会打扰你。当我尝试移动它时,它不起作用 这是我的表格 public partial class Form1 : Form { Graphics paper; Snake snake = new Snake(); bool left = false; bool right = false;

我是C C夏普的初学者,我不明白为什么我的箭头键不起作用。有人能帮我吗?注:我是一个初学者,我已经在这方面工作了一段时间,我无法理解它。我试过研究它,但运气不好,我希望我不会打扰你。当我尝试移动它时,它不起作用

这是我的表格

public partial class Form1 : Form
{
    Graphics paper;
    Snake snake = new Snake();

    bool left = false;
    bool right = false;
    bool down = false;
    bool up = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        paper = e.Graphics;
        snake.drawSnake(paper);
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Down && up == false)
        {
            down = true;
            up = false;
            right = false;
            left = false;
        }
        if (e.KeyData == Keys.Up && down == false)
        {
            down = false;
            up = true;
            right = false;
            left = false;
        }
        if (e.KeyData == Keys.Right && left == false)
        {
            down = false;
            up = false;
            right = true;
            left = false;
        }
        if (e.KeyData == Keys.Left && right == false)
        {
            down = false;
            up = false;
            right = false;
            left = true;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (down) { snake.moveDown(); }
        if (up) { snake.moveUp(); }
        if (right) { snake.moveRight(); }
        if (left) { snake.moveLeft(); }

        this.Invalidate();
    }
 }
} 这是我的蛇课,如果你需要的话

{


}

我试过你的代码,效果很好,所以我只能想到这一点:

private void Form1_Load(object sender, EventArgs e)
{
   timer1.Enabled = true;
}

确保启用了big guy。

我尝试了你的代码,效果很好,所以这是我唯一能想到的:

private void Form1_Load(object sender, EventArgs e)
{
   timer1.Enabled = true;
}

确保“大人物”已启用。

不要像那样保留绘画活动中的图形。只需将e.Graphics直接传递到绘图方法,如下所示:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        snake.drawSnake(e.Graphics);
    }

此外,请确保窗体的绘制事件已连接。选择表单。现在,默认情况下,单击“属性”窗格右下角的闪电图标。找到绘制条目并将下拉列表更改为右侧,以形成1_Paint。

不要像那样保留绘制事件中的图形。只需将e.Graphics直接传递到绘图方法,如下所示:

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        snake.drawSnake(e.Graphics);
    }


此外,请确保窗体的绘制事件已连接。选择表单。现在,默认情况下,单击“属性”窗格右下角的闪电图标。找到绘制条目并将下拉列表更改为右侧的Form1_Paint。

正如我所说,我确实是一个初学者,我通过观察来学习,你有什么方法可以告诉我吗?你尝试过调用moveDown吗?没有,我没有,你能用代码告诉我什么不起作用吗?执行代码时可以控制snake。我认为在调试器中,窗口没有重新绘制,因此代码可以正常工作,但您无法看到进度。这是WinFormUI的一个陷阱,调试窗口没有重新绘制。首先尝试不使用调试器的程序。可能会有帮助-它解决了这个问题。正如我说的,我真的是一个初学者,我通过观察来学习,你有什么方法可以告诉我吗?你试过调用moveDown吗?没有,你能用代码告诉我什么不起作用吗?执行代码时可以控制snake。我认为在调试器中,窗口没有重新绘制,因此代码可以正常工作,但您无法看到进度。这是WinFormUI的一个陷阱,调试窗口没有重新绘制。首先尝试不使用调试器的程序。可能会有帮助-它解决了这个问题。我也有同样的想法,但它可能是直接从属性开始的。:P我已经启用了它。还是不行。当我单击箭头键时,它不会移动。@user3002617我知道该方法可以在勾号事件中更改窗体的文本,您将看到标题栏的更改。所以也许它画得不对?@user3002617对我来说很好。确保您的所有事件都已正确绑定。重新绘制蛇和所有内容,实际上都很酷:D@HanletEsca尼诺,谢谢!确保所有事件都正确绑定是什么意思?我也这么想,但可能是直接从属性开始的。:P我已经启用了它。还是不行。当我单击箭头键时,它不会移动。@user3002617我知道该方法可以在勾号事件中更改窗体的文本,您将看到标题栏的更改。所以也许它画得不对?@user3002617对我来说很好。确保您的所有事件都已正确绑定。重新绘制蛇和所有内容,实际上都很酷:D@HanletEsca尼诺,谢谢!你说的确保所有事件都正确绑定是什么意思?