You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击GridEl按钮获取其在Grid二维数组中的行列位置?

解决方案

要实现点击GridEl按钮时输出它在二维数组中的行列位置,你可以通过以下步骤完成:

1. 给GridEl类添加行列属性

首先,在你的GridEl类中新增专属属性,用来存储每个按钮对应的数组位置:

public class GridEl : Button
{
    // 存储按钮所在的行号
    public int Row { get; set; }
    // 存储按钮所在的列号
    public int Column { get; set; }
}

2. 创建按钮时绑定位置与点击事件

在CreateGrid方法中,每创建一个GridEl实例,就给它赋值对应的行列号,并绑定点击事件处理方法。这里我把原来的while循环换成了更直观的嵌套for循环(逻辑更清晰,也能避免边界条件出错):

void CreateGrid() 
{
    GridEl[,] Grid = new GridEl[4, 6];
    
    // 遍历行
    for (int r = 0; r < Grid.GetLength(0); r++)
    {
        // 遍历列
        for (int c = 0; c < Grid.GetLength(1); c++)
        {
            Grid[r, c] = new GridEl();
            
            // 给当前按钮绑定行列位置
            Grid[r, c].Row = r;
            Grid[r, c].Column = c;
            
            // 按钮基础样式设置
            Grid[r, c].Size = new System.Drawing.Size(64, 64);
            Grid[r, c].Location = new System.Drawing.Point(21 * 3 * c, 21 * 3 * r);
            
            // 绑定点击事件
            Grid[r, c].Click += GridEl_Click;
            
            MainForm.Controls.Add(Grid[r, c]);
        }
    }
}

3. 实现点击事件处理方法

添加一个事件处理方法,当按钮被点击时,读取它的行列属性并输出到控制台:

private void GridEl_Click(object sender, EventArgs e)
{
    // 将触发事件的控件转换为GridEl类型
    if (sender is GridEl clickedButton)
    {
        Console.WriteLine($"Row: {clickedButton.Row}; Column: {clickedButton.Column}");
    }
}

补充说明

  • 给GridEl添加专属行列属性的好处是,每个按钮能直接记住自己的位置,避免了闭包陷阱(如果直接在循环中捕获r/c变量,可能会因为变量引用问题输出错误的位置)。
  • 如果你坚持要用原来的while循环,只需要在创建Grid[r,c]后添加行列赋值和点击事件绑定即可,核心逻辑完全一致。

内容的提问来源于stack exchange,提问作者Nazarii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:24:49