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
相关产品推荐
相关产品推荐

