按下另一个按钮后如何使用按钮发送器?

时间:2019-03-13 09:50:54

标签: c# winforms

所以我正在做一个国际象棋游戏(棋盘上有64个具有相同发件人的按钮),我想做的就是在他按下第二个按钮后,如果此举是合法的,它将把第一个按钮的背景图像设置为null第二到第一:

public void button_click(object sender, EventArgs e)
    {
        if (partOfTurn == false)
        {
            for (int x = 0; x <= 7; x++)
            {
                for (int y = 0; y <= 7; y++)
                {
                    if (Buttons[x, y] == ((Button)sender))
                    {
                        Ax = x;
                        Ay = y;
                    }
                }
            }
            place_holder.BackgroundImage = ((Button)sender).BackgroundImage;
            partOfTurn = true;
        }

        else if (partOfTurn == true)
        {
            for (int x = 0; x <= 7; x++)
            {
                for (int y = 0; y <= 7; y++)
                {
                    if (Buttons[x, y] == ((Button)sender))
                    {
                        Bx = x;
                        By = y;
                    }
                }
            }
            click();
            partOfTurn = false;
        }

        void click()
        {
            if (turn == true)
            {
                if (place_holder.BackgroundImage == Properties.Resources.White_Pown)
                {
                    if (Bx == Ax + 1 && By == Ay + 1 || Bx == Ax - 1 && By == Ay + 1)
                    {
                        if (((Button)sender).BackgroundImage == Properties.Resources.Black_Pown||
                            ((Button)sender).BackgroundImage == Properties.Resources.Black_Rook||
                            ((Button)sender).BackgroundImage == Properties.Resources.Black_Knight||
                            ((Button)sender).BackgroundImage == Properties.Resources.Black_Bishop||
                            ((Button)sender).BackgroundImage == Properties.Resources.Black_Queen||
                            ((Button)sender).BackgroundImage == Properties.Resources.Black_King)
                        {
                            //set the background image of the first to null and of the other button to the first.
                        }
                    }
                }
            }
        }
    }

但是,为此,我需要使用第二个按钮的(Button)发送器,也需要使用第一个按钮的发送器来清除它。

我尝试解决此问题,并将背景按钮保存在占位符上,以便可以看到被按下的按钮上的内容,但我仍然需要清除第一个按钮

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要依次识别两个按钮,您需要将对第一个按钮的引用存储为类级别的变量,例如previousButton。在点击代码的末尾分配此代码,以便下次点击时可以引用它。

public partial class Form1 : Form
{
    private Button previousButton = null;

    public Form1()
    {
        InitializeComponent();

        button1.Click += Buttons_Click;
        button2.Click += Buttons_Click;
    }

    private void Buttons_Click(object sender, EventArgs e)
    {
        if (previousButton != null)
        {
            // do something with previousButton
        }

        // code to work with the currently clicked button
        // as (Button)sender

        // remember the current button
        previousButton = (Button)sender;
    }
}

如果按钮序列始终成对出现,则在完成配对序列后,将previousButton设置回null。这告诉您新的“序列”将开始。