C#逻辑性问题...转不过来了!

来源:百度知道 编辑:UC知道 时间:2024/05/30 17:14:31
先说明一下意思~就是循环生成TextBox控件~! 为3列N行(形成类似Tbale表,坐标我都调好了,就是没贴上来,只有点小问题,下面说)
n1=要生成的行,n2=重复n1次数,例:n1=3,n2=2就重复添加两次3行
如果重复生成行,txt的Name就不对了(等于数组下标就不对了)
现在是txt[3,n1](n2次)怎么才能让数组下标=txt[3,n1*n2]

n1 = Convert.ToInt32(textBox1.Text.Trim());
n2 = Convert.ToInt32(textBox2.Text.Trim());
TextBox[,] txt = new TextBox[3, n1*n2];

for (int k = 0; k < n2; k++)
{
for (int i = 0; i < n1; i++)
{
for (int j = 0; j < 3; j++)
{
txt[j, i] = new TextBox();
txt[j, i].Name = txt + j.ToString() + i.ToString();
txt[0, i].Text = "" + x;
Controls.Add(txt[j, i]);
}
}
}
txt[j, i].Name = txt + j.ToString() + i.ToString();//这句

之前好像看见过你的问题,好像是删除的时候不能完全删除
我加了一句txt[j, i].text = txt[j,i],name看了下,认为你对动态数组的理解有问题(我记得动态数组是通过指针来寻找存放的对象的),你的希望是为textbox[n,m]申请足够的空间,以让所有生成的textbox都能放入数组中,这本来没问题,但是你做了一个外围的循环,让textbox[n,m]生成了k遍,这就有问题了,对于2维数组来说,应该在for (int i = 0; i < n1; i++) 这里就为每一个元素分配了唯一的标识,应该说数组的作用到此为止,到了for (int k = 0; k < n2; k++)的时候电脑就认为是将前面的步骤重新的再来一次,这样的话,前面指向textbox的指针取而代之重新指向了新生成的textbox,这就是为什么你删除的时候只能删除最后一批生成的textbox,因为这时候数组的指针已经不再指向前几次循环产生的textbox了,我觉得你最好是用3维的数组或者手动为每一个新生成的textbox分配个指针。

我自己感觉的就是这样了,才学C#,语言表述很混乱,不知道对你有帮助没。

坐标掉了哦!这样出来的都跌加在一起