将数组中的按钮颜色更改为刚刚在另一个数组中按下的不同按钮的颜色

Change a button color within an array to that of a different button that was just pressed in another array

如果您能帮助我将按钮的颜色更改为刚刚按下的另一个按钮的颜色,我将不胜感激。我有两个按钮数组,定义如下:

 public partial class Form1 : Form
{
    Button[,] btn = new Button[8, 8];
    Button[,] btn2 = new Button[10, 20];

    public Form1()
    {
        InitializeComponent();

        for (int x = 0; x < btn.GetLength(0); x++)
        {
            for (int y = 0; y < btn.GetLength(1); y++)
            {
                btn[x, y] = new Button();
                btn[x, y].SetBounds(40 * x, 40 * y, 40, 40);
                btn[x, y].Click += new EventHandler(this.btnEvent_click);
                Controls.Add(btn[x, y]);
                btn[x, y].BackColor = Color.Empty;
            }
        }

        for (int v = 0; v < btn2.GetLength(0); v++)
        {
            for (int w = 0; w < btn2.GetLength(1); w++)
            {
                btn2[v, w] = new Button();
                btn2[v, w].SetBounds(40 * v, 40 * w, 40, 40);
                btn2[v, w].Click += new EventHandler(this.btn2Event_click);
                Controls.Add(btn2[v, w]);
                btn2[v, w].BackColor = Color.Empty;

            }
        }

我可以使用以下方法更改 btn2 中任何按钮的颜色(从 btn 中选择一个按钮后):

void btnEvent_click(object sender, EventArgs e)
    {
        ((Control)sender).BackColor = Color.FromName(buttonColor.colorResult);
    }

void btn2Event_click(object sender, EventArgs e)
    {
        string selectedColor = "";

        selectedColor = btn2[0,0].BackColor.ToString();

        int pFrom = selectedColor.IndexOf("[") + "[".Length;
        int pTo = selectedColor.LastIndexOf("]");

        buttonColor.colorResult = selectedColor.Substring(pFrom, pTo - pFrom);

    }

但如您所见,只有 btn2[0,0]。我正在寻找一种方法来使 我在 btn2.

中按下的任何 按钮都能正常工作

在控件的事件中,sender 通常是您刚与之交互的确切控件。在你的情况下,没有迹象表明 i 不会总是你刚刚点击的按钮。然后您需要做的就是将对象转换回您知道的类型。因此,在没有任何异常检查的情况下,这是一个可行的示例

void btn2Event_click(object sender, EventArgs e)
{
    // get the sender as a button
    Button button = ((Button)sender);

    string selectedColor = button.BackColor.ToString();        

    int pFrom = selectedColor.IndexOf("[") + "[".Length;
    int pTo = selectedColor.LastIndexOf("]");

    buttonColor.colorResult = selectedColor.Substring(pFrom, pTo - pFrom);

}