在C#中如何通过数组/矩阵存储TextBox引用并修改文本?
嘿,我之前做WinForm数独项目的时候也这么存控件,其实核心就是你存的是TextBox的引用,所以不管是一维数组还是二维矩阵,直接通过数组元素访问Text属性就能改文本,根本不需要复杂操作!我给你分两种情况讲明白:
一、用一维数组修改TextBox文本
假设你已经把81个TextBox都存入了一维数组tb,并且每个元素都正确指向了对应的控件(比如tb[0] = textBox1,tb[1] = textBox2...),那修改指定位置的文本超级简单:
// 比如修改第1个TextBox(对应数组索引0)的文本为"3" tb[0].Text = "3"; // 再比如修改第50个TextBox(索引49)的文本为"8" tb[49].Text = "8";
原理很直白:数组里存的不是控件的副本,而是指向原TextBox对象的引用,所以你修改数组元素的Text属性,就是直接修改原控件的显示内容。
二、转成二维矩阵后修改文本
如果把一维数组转成9×9的二维矩阵(更贴合数独的行列逻辑),操作也差不多,先给你说怎么转矩阵,再讲修改方法:
第一步:把一维数组转成二维矩阵
// 初始化9×9的二维TextBox数组 TextBox[,] sudokuMatrix = new TextBox[9, 9]; // 循环把一维数组的元素映射到二维矩阵里 for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { // 一维数组的索引 = 行号×9 + 列号 sudokuMatrix[row, col] = tb[row * 9 + col]; } }
第二步:通过二维矩阵修改TextBox文本
现在你就可以用行号+列号来定位数独里的单元格了(注意索引从0开始,比如第1行第1列对应row=0, col=0):
// 修改第3行第4列(索引row=2, col=3)的文本为"7" sudokuMatrix[2, 3].Text = "7"; // 清空第5行第5列的文本 sudokuMatrix[4, 4].Text = string.Empty;
小提醒
不管用哪种方式,都要确保数组/矩阵里的TextBox引用不是null,不然会抛出空引用异常!另外如果是在非UI线程里修改(比如后台计算完更新界面),记得用Invoke切换到UI线程操作,比如:
if (tb[0].InvokeRequired) { tb[0].Invoke(new Action(() => tb[0].Text = "5")); } else { tb[0].Text = "5"; }
内容的提问来源于stack exchange,提问作者Ahmad Alshaib
相关产品推荐
相关产品推荐

