c#如何参考当前按钮
我正在尝试使用Windows应用程序制作一个扫雷游戏。我想在方法内部使用一个开关 问题是:c#如何参考当前按钮,c#,winforms,C#,Winforms,我正在尝试使用Windows应用程序制作一个扫雷游戏。我想在方法内部使用一个开关 问题是: public void switcher() { switch (x) { case 0: A1.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1 break; case 1: A1.BackgroundImage
public void switcher()
{
switch (x)
{
case 0:
A1.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1
break;
case 1:
A1.BackgroundImage = Image.FromFile("1.jpg");
break;
case 2:
A1.BackgroundImage = Image.FromFile("2.jpg");
break;
case 3:
A1.BackgroundImage = Image.FromFile("3.jpg");
break;
case 4:
A1.BackgroundImage = Image.FromFile("4.jpg");
break;
case 5:
A1.BackgroundImage = Image.FromFile("5.jpg");
break;
case 6:
A1.BackgroundImage = Image.FromFile("6.jpg");
break;
case 7:
A1.BackgroundImage = Image.FromFile("7.jpg");
break;
case 8:
A1.BackgroundImage = Image.FromFile("8.jpg");
break;
}
}
正如你所看到的,每个按钮上都写着“A1……”A1是我的第一个按钮的名字,但是还有很多其他的按钮。是否有一种方法可以引用按钮的属性,例如背景图像,而不必使用其名称?这将使编程变得更加容易
下面是按钮的简化部分(如果有帮助):
private void A1_Click(object sender, EventArgs e) // < - I want to refer to this without using A1 name.
{
x = bombcount[0, 0];
switcher();
}
private void A1\u单击(object sender,EventArgs e)//<-我想引用此内容,但不使用A1名称。
{
x=炸弹数量[0,0];
切换器();
}
编辑:其中一个答案有效。我对这些事情了解不多,但我会努力了解更多!谢谢大家!您需要完全重构此代码。不要像那样依赖私人成员,如
x
,请使用方法参数:
private void SetButtonImage(Button button, int number)
{
string imagePath;
if (number == 0)
{
imagePath = "empty.jpg";
}
else
{
imagePath = number + ".jpg";
}
button.BackgroundImage = Image.FromFile(imagePath);
}
那么就这样称呼它:
private void Button_Click(object sender, EventArgs e)
{
var button = sender as Button;
int number = bombcount[0, 0];
SetButtonImage(button, number);
}
private void A1_Click(object sender, EventArgs e)
{
Button myB = (Button) sender;
x = bombcount[0,0];
switcher(myB);
}
private void switcher(Button button)
{
switch (x)
{
case 0:
button.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1
break;
case 1:
button.BackgroundImage = Image.FromFile("1.jpg");
break;
case 2:
button.BackgroundImage = Image.FromFile("2.jpg");
break;
case 3:
button.BackgroundImage = Image.FromFile("3.jpg");
break;
case 4:
button.BackgroundImage = Image.FromFile("4.jpg");
break;
case 5:
button.BackgroundImage = Image.FromFile("5.jpg");
break;
case 6:
button.BackgroundImage = Image.FromFile("6.jpg");
break;
case 7:
button.BackgroundImage = Image.FromFile("7.jpg");
break;
case 8:
button.BackgroundImage = Image.FromFile("8.jpg");
break;
}
}
现在,您可以将所有按钮单击事件连接到单个事件处理程序,您可以删除
x
成员,您可以完全删除开关。您需要完全重构此代码。不要像那样依赖私人成员,如x
,请使用方法参数:
private void SetButtonImage(Button button, int number)
{
string imagePath;
if (number == 0)
{
imagePath = "empty.jpg";
}
else
{
imagePath = number + ".jpg";
}
button.BackgroundImage = Image.FromFile(imagePath);
}
那么就这样称呼它:
private void Button_Click(object sender, EventArgs e)
{
var button = sender as Button;
int number = bombcount[0, 0];
SetButtonImage(button, number);
}
private void A1_Click(object sender, EventArgs e)
{
Button myB = (Button) sender;
x = bombcount[0,0];
switcher(myB);
}
private void switcher(Button button)
{
switch (x)
{
case 0:
button.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1
break;
case 1:
button.BackgroundImage = Image.FromFile("1.jpg");
break;
case 2:
button.BackgroundImage = Image.FromFile("2.jpg");
break;
case 3:
button.BackgroundImage = Image.FromFile("3.jpg");
break;
case 4:
button.BackgroundImage = Image.FromFile("4.jpg");
break;
case 5:
button.BackgroundImage = Image.FromFile("5.jpg");
break;
case 6:
button.BackgroundImage = Image.FromFile("6.jpg");
break;
case 7:
button.BackgroundImage = Image.FromFile("7.jpg");
break;
case 8:
button.BackgroundImage = Image.FromFile("8.jpg");
break;
}
}
现在,您可以将所有按钮单击事件连接到该单个事件处理程序,并且可以删除
x
成员,您可以完全删除开关。在switcher中获取被单击按钮的引用,如下所示:
private void Button_Click(object sender, EventArgs e)
{
var button = sender as Button;
int number = bombcount[0, 0];
SetButtonImage(button, number);
}
private void A1_Click(object sender, EventArgs e)
{
Button myB = (Button) sender;
x = bombcount[0,0];
switcher(myB);
}
private void switcher(Button button)
{
switch (x)
{
case 0:
button.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1
break;
case 1:
button.BackgroundImage = Image.FromFile("1.jpg");
break;
case 2:
button.BackgroundImage = Image.FromFile("2.jpg");
break;
case 3:
button.BackgroundImage = Image.FromFile("3.jpg");
break;
case 4:
button.BackgroundImage = Image.FromFile("4.jpg");
break;
case 5:
button.BackgroundImage = Image.FromFile("5.jpg");
break;
case 6:
button.BackgroundImage = Image.FromFile("6.jpg");
break;
case 7:
button.BackgroundImage = Image.FromFile("7.jpg");
break;
case 8:
button.BackgroundImage = Image.FromFile("8.jpg");
break;
}
}
在switcher中获取被单击按钮的引用,如下所示:
private void Button_Click(object sender, EventArgs e)
{
var button = sender as Button;
int number = bombcount[0, 0];
SetButtonImage(button, number);
}
private void A1_Click(object sender, EventArgs e)
{
Button myB = (Button) sender;
x = bombcount[0,0];
switcher(myB);
}
private void switcher(Button button)
{
switch (x)
{
case 0:
button.BackgroundImage = Image.FromFile("empty.jpg"); // look at A1
break;
case 1:
button.BackgroundImage = Image.FromFile("1.jpg");
break;
case 2:
button.BackgroundImage = Image.FromFile("2.jpg");
break;
case 3:
button.BackgroundImage = Image.FromFile("3.jpg");
break;
case 4:
button.BackgroundImage = Image.FromFile("4.jpg");
break;
case 5:
button.BackgroundImage = Image.FromFile("5.jpg");
break;
case 6:
button.BackgroundImage = Image.FromFile("6.jpg");
break;
case 7:
button.BackgroundImage = Image.FromFile("7.jpg");
break;
case 8:
button.BackgroundImage = Image.FromFile("8.jpg");
break;
}
}
switcher()
应具有Button类型的参数。这样你就可以在你想要的任何按钮上使用逻辑。只需根据需要传入A1、B1、C1等switcher(A1)
它就在参数中-sender
是导致调用事件处理程序的实际控件。只需将其转换为按钮
,将其传递给切换器
,您就完成了(顺便说一句,您也不需要开关)。切换器()
应该有一个类型为Button的参数。这样你就可以在你想要的任何按钮上使用逻辑。只需根据需要传入A1、B1、C1等switcher(A1)
它就在参数中-sender
是导致调用事件处理程序的实际控件。只需将它投射到按钮
,传递到切换器
,您就完成了(顺便说一句,您也不需要切换器)。“try”不是答案。解释你所做的更改。抱歉省略了解释:引入了一个对切换方法中正在单击的按钮的引用。你手头有很多时间,不是吗?哦,我不喜欢解释如何写出更好的答案。“尝试”不是答案。解释你所做的更改。很抱歉省略了解释:介绍了一个对切换方法中正在单击的按钮的引用。你手头有很多时间,不是吗?哦,我不好解释如何写出更好的答案。