我该如何解决这个“pictureBox_1 没有重载匹配委托 'System.Event.Handler'”的问题
How do I fix this 'no overload for pictureBox_1 matches delegate 'System.Event.Handler''
我一直在尝试通过教程和这个网站自学 C#,但我不知道如何使用箭头键让我的 "character" 移动,所以我从这里复制了代码,希望它能正常工作。很好,直到我 运行 然后它抛出这个错误
Error 1 No overload for 'pictureBox1_Click' matches delegate
'System.EventHandler' c:\users\collin\documents\visual studio
2013\projects\my_rpg\my_rpg\form1.designer.cs 80 39 My_RPG
这是我复制的代码(我确实将名称从原来的名称更改为 pictureBox1,所以这是正确的
public MainScreen()
{
InitializeComponent();
KeyDown += new KeyEventHandler(MainScreen_KeyDown);
if (characterCreated == false)
{
playGameBtn.ForeColor = Color.Gray;
}
}
private void pictureBox1_Click(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);
}
然后,如果我单击错误,它会将我发送到这行代码,如果我进行编辑,它就会抛出错误
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
PictureBox Click 事件的签名需要一个接收对象和 EventArgs
参数的方法。
您的代码使用对象和 KeyEventArgs
声明了 pictureBox_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
我一直在尝试通过教程和这个网站自学 C#,但我不知道如何使用箭头键让我的 "character" 移动,所以我从这里复制了代码,希望它能正常工作。很好,直到我 运行 然后它抛出这个错误
Error 1 No overload for 'pictureBox1_Click' matches delegate 'System.EventHandler' c:\users\collin\documents\visual studio 2013\projects\my_rpg\my_rpg\form1.designer.cs 80 39 My_RPG
这是我复制的代码(我确实将名称从原来的名称更改为 pictureBox1,所以这是正确的
public MainScreen()
{
InitializeComponent();
KeyDown += new KeyEventHandler(MainScreen_KeyDown);
if (characterCreated == false)
{
playGameBtn.ForeColor = Color.Gray;
}
}
private void pictureBox1_Click(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);
}
然后,如果我单击错误,它会将我发送到这行代码,如果我进行编辑,它就会抛出错误
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
PictureBox Click 事件的签名需要一个接收对象和 EventArgs
参数的方法。
您的代码使用对象和 KeyEventArgs
声明了 pictureBox_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