c#如何引用当前按钮

时间:2017-07-19 13:45:20

标签: c# winforms

我正在尝试使用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();      
}

编辑:其中一个答案有效。我对这些事情知之甚少,但我会尝试更多地了解它们!谢谢!

2 个答案:

答案 0 :(得分:3)

您需要完全重构此代码。不要像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);
}

现在,您可以将所有按钮单击事件连接到该单个事件处理程序,并且可以删除x成员,并且可以完全删除该开关。

答案 1 :(得分:1)

在切换器中获取被点击按钮的引用,如下所示:

     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;
    }
     }