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

C#动态循环生成按钮后,点击特定按钮批量隐藏符合条件按钮的问题

动态按钮批量隐藏的解决方案

这里提供两种简单可行的实现方式,解决你点击按钮后批量隐藏符合坐标条件按钮的需求:

方案一:利用Tag存储按钮坐标(快速改造)

这种方式不需要额外维护全局数组,只需在生成按钮时把对应的横纵序号存入Tag属性,后续通过标签匹配找到目标按钮:

1. 改造按钮生成代码

for (int i = 0; i < poz; i++)
{
    for (int j = 0; j < pion; j++)
    {
        Button button = new Button();
        button.Size = new Size(30, 30);
        button.Location = new Point(30 * (i + 1), 30 * (j + 1) + 50);
        button.Click += button_Click;
        // 将当前按钮的横纵序号(i,j)存入Tag,用Tuple方便读取
        button.Tag = new Tuple<int, int>(i, j);
        Controls.Add(button);
    }
}

2. 重写点击事件逻辑

在点击事件中,先收集所有需要隐藏的坐标,再遍历控件找到匹配的按钮并设置隐藏:

protected void button_Click(object sender, EventArgs e)
{
    // 收集所有需要隐藏的目标坐标
    var targetCoords = new List<Tuple<int, int>>();
    for (int k = 0; k < m; k++)
    {
        targetCoords.Add(new Tuple<int, int>(x[k], y[k]));
    }

    // 遍历所有按钮,匹配坐标后隐藏
    foreach (Control ctrl in Controls)
    {
        if (ctrl is Button btn && btn.Tag is Tuple<int, int> btnCoord)
        {
            if (targetCoords.Contains(btnCoord))
            {
                btn.Visible = false;
            }
        }
    }
}

方案二:维护二维按钮数组(高效实现)

如果按钮数量较多,遍历控件的效率偏低,可以在生成按钮时直接存入二维数组,后续通过坐标直接索引:

1. 声明全局二维数组

在窗体类中添加类级别的变量:

private Button[,] buttonGrid;

2. 改造按钮生成代码

// 初始化数组,大小与按钮网格一致
buttonGrid = new Button[poz, pion];

for (int i = 0; i < poz; i++)
{
    for (int j = 0; j < pion; j++)
    {
        Button button = new Button();
        button.Size = new Size(30, 30);
        button.Location = new Point(30 * (i + 1), 30 * (j + 1) + 50);
        button.Click += button_Click;
        // 将按钮存入对应坐标的数组位置
        buttonGrid[i, j] = button;
        Controls.Add(button);
    }
}

3. 重写点击事件逻辑

直接通过数组索引找到目标按钮,无需遍历整个控件集合:

protected void button_Click(object sender, EventArgs e)
{
    for (int k = 0; k < m; k++)
    {
        int targetI = x[k];
        int targetJ = y[k];
        // 先检查坐标是否在有效范围内,避免索引越界报错
        if (targetI >= 0 && targetI < poz && targetJ >= 0 && targetJ < pion)
        {
            buttonGrid[targetI, targetJ].Visible = false;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:04:56