C# 我如何解决这个问题';pictureBox_1与委托';System.Event.Handler'';
我一直试图通过教程和这个网站自学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,因此这是正确的” 然后,如果我点击错误,它会将我发送到这行代码,如果我编辑,它会抛出错误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 这是我复制的代码(我确
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);
}