c#如何参考当前按钮

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

我正在尝试使用Windows应用程序制作一个扫雷游戏。我想在方法内部使用一个开关

问题是:

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”不是答案。解释你所做的更改。抱歉省略了解释:引入了一个对切换方法中正在单击的按钮的引用。你手头有很多时间,不是吗?哦,我不喜欢解释如何写出更好的答案。“尝试”不是答案。解释你所做的更改。很抱歉省略了解释:介绍了一个对切换方法中正在单击的按钮的引用。你手头有很多时间,不是吗?哦,我不好解释如何写出更好的答案。