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

WinForm动态生成TextBox矩阵时遭遇NullReferenceException问题求助

解决动态生成TextBox矩阵时的NullReferenceException错误

嘿,我一眼就看出问题出在哪啦!你创建的是一个交错二维数组,只初始化了第一维的长度(100),但第二维的每个元素(也就是每一行的数组)都还是null。当你尝试给textbox[i][j]赋值时,textbox[i]本身都还没被实例化成一个TextBox数组,这不就触发空引用异常了嘛!

给你修正后的代码,顺便加了几个实用细节:

// 建议用number_columns来定义数组长度,比固定的100更贴合你的需求
TextBox[][] textbox = new TextBox[number_columns][];
int x_point = 70; 
int y_point = 70; 
int h = 30; 
int w = 40;

for (int i = 0; i < number_columns; i++) {
    // 关键!先初始化当前行的TextBox数组,不然textbox[i]就是null
    textbox[i] = new TextBox[number_columns];
    
    for (int j = 0; j < number_columns; j++) {
        textbox[i][j] = new TextBox();
        // 注意:Size的构造参数是(width, height),你之前写反h和w啦
        textbox[i][j].Size = new Size(w, h); 
        textbox[i][j].Location = new Point(x_point, y_point);
        // 别忘了把控件加到Form的Controls里,不然界面上看不到哦
        this.Controls.Add(textbox[i][j]);
        
        // 调整下一个控件的X坐标,加个小间距避免挤在一起
        x_point += w + 5;
    }
    // 换行后重置X坐标,更新Y坐标到下一行
    x_point = 70;
    y_point += h + 5;
}

再给你划几个重点:

  • 必须初始化第二维数组:在外层循环(i的循环)里,一定要先执行textbox[i] = new TextBox[number_columns];,这样textbox[i]才是一个有效的数组,才能访问textbox[i][j]。
  • Size参数别搞反:Size(int width, int height),你之前把高度和宽度写反了,控件的形状会不符合预期。
  • 添加到Controls集合:生成的TextBox默认不会显示在Form上,必须手动添加到this.Controls里。
  • 合理调整位置:如果不更新坐标,所有控件都会重叠在一起,加个小间距会让矩阵看起来更整齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:41:47