C# 我如何解决这个问题';pictureBox_1与委托';System.Event.Handler'';

C# 我如何解决这个问题';pictureBox_1与委托';System.Event.Handler'';,c#,event-handling,keydown,C#,Event Handling,Keydown,我一直试图通过教程和这个网站自学c#,但我不知道如何使用箭头键移动我的“角色”,所以我从这里复制代码,希望它能工作,一切正常,直到我运行,然后它抛出这个错误 错误1“pictureBox1\u Click”没有重载与委托匹配 'System.EventHandler'c:\users\collin\documents\visual studio 2013\projects\my\u rpg\my\u rpg\form1.designer.cs 80 39 my\u rpg 这是我复制的代码(我确

我一直试图通过教程和这个网站自学c#,但我不知道如何使用箭头键移动我的“角色”,所以我从这里复制代码,希望它能工作,一切正常,直到我运行,然后它抛出这个错误

错误1“pictureBox1\u Click”没有重载与委托匹配 'System.EventHandler'c:\users\collin\documents\visual studio 2013\projects\my\u rpg\my\u rpg\form1.designer.cs 80 39 my\u rpg

这是我复制的代码(我确实将名称从最初的名称更改为pictureBox1,因此这是正确的”

然后,如果我点击错误,它会将我发送到这行代码,如果我编辑,它会抛出错误

        this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);

PictureBox Click事件的签名需要一个接收对象和
EventArgs
参数的方法

您的代码使用对象和
KeyEventArgs
声明了
pictureBox\u Click
方法。当然,编译器会不高兴,并告诉您有些东西不符合它的要求

从您的代码来看,似乎您希望在表单级别处理KeyDown事件,因此您需要更改代码,以便有一个方法来处理KeyDown事件并恢复图片框的原始签名

public MainScreen()
{
    InitializeComponent();
    KeyDown += new KeyEventHandler(MainScreen_KeyDown);
    if (characterCreated == false)
    {
        playGameBtn.ForeColor = Color.Gray;

    }
}
private void pictureBox1_Click(object sender, EventArgs e)
{
     // REMOVE ALL THE CODE FROM THIS EVENT AND MOVE IT TO MainScreen_KeyDown  event
}
private void MainScreen_KeyDown(object sender, KeyEventArgs e)
{

    int x = pictureBox1.Location.X;
    int y = pictureBox1.Location.Y;

    if (e.KeyCode == Keys.Right)
    {
        x += 2;
    }
    else if (e.KeyCode == Keys.Left) 
    {
        x -= 2;
    }
    else if (e.KeyCode == Keys.Up)
    {
        y += 2;
    }
    else if (e.KeyCode == Keys.Down)
    {
        y -= 2;
    }

    pictureBox1.Location = new System.Drawing.Point(x, y);
}

此外,请记住,要在表单级别接收KeyDown事件,需要将Form.KeyPreview属性设置为true,因为此错误表明,您正在尝试使用签名不符合要求的函数创建事件处理程序。您的函数将与keyeventhandler匹配。然而,
.Click
期望,因此您可能必须将该事件处理程序附加到主窗口,而不是试图从鼠标事件中获取键盘事件参数,这应该会让您走,嗯,这真的有意义吗?
public MainScreen()
{
    InitializeComponent();
    KeyDown += new KeyEventHandler(MainScreen_KeyDown);
    if (characterCreated == false)
    {
        playGameBtn.ForeColor = Color.Gray;

    }
}
private void pictureBox1_Click(object sender, EventArgs e)
{
     // REMOVE ALL THE CODE FROM THIS EVENT AND MOVE IT TO MainScreen_KeyDown  event
}
private void MainScreen_KeyDown(object sender, KeyEventArgs e)
{

    int x = pictureBox1.Location.X;
    int y = pictureBox1.Location.Y;

    if (e.KeyCode == Keys.Right)
    {
        x += 2;
    }
    else if (e.KeyCode == Keys.Left) 
    {
        x -= 2;
    }
    else if (e.KeyCode == Keys.Up)
    {
        y += 2;
    }
    else if (e.KeyCode == Keys.Down)
    {
        y -= 2;
    }

    pictureBox1.Location = new System.Drawing.Point(x, y);
}