通过单击将按钮位置放入数组中

时间:2018-05-13 11:23:20

标签: c# arrays loops button

我有一个由代码中命名为GridEl的修改按钮构成的网格。每个GridEl都在名为Grid[,]的数组中,我想通过点击它来获取GridEl在数组中的位置,我该怎么做?

例如,它必须在控制台中写入行和列,这就是它在控制台中的外观:“Row:2; Column:5”。当然每个按钮都必须写自己的位置。*

void CreateGrid()
{
            GridEl[,] Grid = new GridEl[4, 6];
            int c, r, gcount; // c = Column, r = Row, gcount = GridEls count
            c = 0; r = 0; gcount = 0;

            while ((c < 7)&&(r < 5) && (gcount != 24)) //Loop that creates grid
            {
                if ((c == 6) && (r < 4))
                {
                    r++;
                    c = 0;
                }
                Grid[r, c] = new GridEl();
                Grid[r, c].Size = new System.Drawing.Size(64, 64);
                Grid[r, c].Location = new System.Drawing.Point(21 * 3 * c, 21 * 3 * r);
                MainForm.Controls.Add(Grid[r,c]);
                c++;
                gcount++;
            }
        }


    public class GridEl : Button
    {
//here is the code of GridEl
    }

1 个答案:

答案 0 :(得分:0)

将此用于GridEl按钮类定义

    public class GridEl : Button
    {
        public int R { get; set; }
        public int C { get; set; }
    }

将此添加到您的while循环

    Grid[r, c].R = r;
    Grid[r, c].C = c;
    Grid[r, c].Click += OnClick;

最后是按钮的Click事件处理程序

    private void OnClick(object sender, EventArgs eventArgs)
    {
        GridEl thisButton = sender as GridEl;
        Console.WriteLine($"Row: {thisButton.R}; Column: {thisButton.C}");
    }

您在此处所做的只是在网格按钮本身上设置行和列值,因此它始终知道值是什么,并且在需要时可以访问。