0

我想要做的是,例如,如果我传递了 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);
        }

现在的问题是:

  1. 我的函数对所有生成的字段填充相同的数字(不知道原因),实际上它必须是随机的
  2. 外观必须与数学中的矩阵完全相同,我的意思是,例如,如果我们传递值 5,则必须有 5 行和 5 列文本框。但我垂直只得到​​ 5 个文本框。

提前谢谢。请帮助弄清楚功能

4

3 回答 3

3
  1. 您正在为Random每次迭代创建一个新实例,并且这些实例在时间上非常接近,这就是值相同的原因。在外部循环之前创建一个实例,然后在内部调用。forNext()

  2. 您的所有Point实例都具有相同的水平位置 172,因此您的所有列都重叠。您需要使用j变量调整 X,例如Point(172 + (j * 28), 32 + (i * 28)).

于 2013-03-16T09:52:51.070 回答
0

对于问题 2:

您将文本框位置设置为:

tb.Location = new Point(172, 32 + (i * 28)

并且永远不会更改 X 坐标 (172),因此您只会得到一列。

于 2013-03-16T10:02:41.663 回答
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;
    }
}
于 2017-10-27T07:36:31.210 回答