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

如何将按sXvY规则命名的TextBox控件便捷存入二维数组

简化实现方案

以下两种方案均可以替代手动逐个声明的写法,大幅减少冗余代码:

方案1:控件容器查找(适用于WinForm/ASP.NET Web Forms)

直接通过控件名称在当前窗体的控件集合中递归查找,不需要依赖反射,性能更高:

// 定义12行7列的二维数组
TextBox[,] girdiler = new TextBox[12, 7];
for (int s = 1; s <= 12; s++)
{
    for (int v = 1; v <= 7; v++)
    {
        string ctrlName = $"s{s}v{v}";
        // 第二个参数为true表示递归查找所有子容器内的控件,适配TextBox放在Panel、GroupBox等容器的场景
        girdiler[s - 1, v - 1] = Controls.Find(ctrlName, true).FirstOrDefault() as TextBox;
    }
}

方案2:反射查找(全平台通用,WinForm/WPF均适用)

直接读取当前类的成员字段获取控件实例,不受控件所在父容器层级限制:

using System.Reflection;

TextBox[,] girdiler = new TextBox[12, 7];
Type currentType = this.GetType();
for (int s = 1; s <= 12; s++)
{
    for (int v = 1; v <= 7; v++)
    {
        string ctrlName = $"s{s}v{v}";
        FieldInfo field = currentType.GetField(ctrlName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
        girdiler[s - 1, v - 1] = field?.GetValue(this) as TextBox;
    }
}

注意事项

  • 数组默认下标从0开始,s1v1对应girdiler[0,0],s12v7对应girdiler[11,6],如果需要1开头的下标可以调整数组初始化长度和赋值时的索引计算逻辑
  • 初始化完成后可增加空值校验,避免控件名拼写错误、控件未生成导致的后续空引用异常
  • 代码仅需要执行一次,可放在窗体构造函数、Loaded/Load事件中运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:05