我要做的是,例如,如果我将{5}传递给matrSize
那么它必须生成25个名为MatrixNode [11]的文本框,... MatrixNode [12] ......(就像矩阵一样)在数学上)像这样
文本框只会获取矩阵元素,但默认情况下,随机值将在文本框创建后立即填充。
public partial class Form2 : Form
{
public Form2(int matrSize)
{
InitializeComponent();
int counter=0;
TextBox[] MatrixNodes = new TextBox[matrSize*matrSize];
for (int i = 0; i < matrSize; i++)
{
for (int j = 0; j < matrSize; j++)
{
var tb = new TextBox();
Random r = new Random();
int num = r.Next(1, 1000);
MatrixNodes[counter] = tb;
tb.Name = "Node_" + MatrixNodes[counter];
tb.Text = num.ToString();
tb.Location = new Point(172, 32 + (i * 28));
tb.Visible = true;
this.Controls.Add(tb);
counter++;
}
}
Debug.Write(counter);
}
现在的问题是:
答案 0 :(得分:3)
您正在为每次迭代创建一个Random
的新实例,这些实例非常接近,这就是值相同的原因。在外部for
周期之前创建一个实例,然后在里面调用Next()
。
您的所有Point
个实例都具有相同的水平位置172,因此您的所有列都会重叠。您需要使用j
变量调整X,例如Point(172 + (j * 28), 32 + (i * 28))
。
答案 1 :(得分:0)
问题2:
您将文本框位置设置为:
tb.Location = new Point(172, 32 + (i * 28)
并且永远不会更改X坐标(172),因此您只能获得一列。
答案 2 :(得分:0)
private void button1_Click(object sender, EventArgs e)
{
int matrSize = 4;
int counter = 0;
TextBox[] MatrixNodes = new TextBox[matrSize * matrSize];
for (int i = 0; i < matrSize; i++)
{
for (int j = 0; j < matrSize; j++)
{
var tb = new TextBox();
Random r = new Random();
int num = r.Next(1, 1000);
MatrixNodes[counter] = tb;
tb.Name = "Node_" + MatrixNodes[counter];
tb.Text = num.ToString();
tb.Location = new Point(172 + (j * 150), 32 + (i * 50));
tb.Visible = true;
this.Controls.Add(tb);
counter++;
}
counter = 0;
}
}