繁体   English   中英

如何在c#中更改文本框的文本,同时将它们的引用存储在数组或矩阵中?

[英]How do I change the text of text boxes in c# while storing references of them in an array or matrix?

有没有一种方法可以在将c#文本框的引用存储在数组中的同时更改其文本?

我在C#widows窗体上制作9x9数独游戏时遇到了这个问题,我在数组(tb)中存储了81个文本框,然后将其移动到矩阵中:

        tb[0] = form1.textBox1;
        tb[1] = form1.textBox2;
        tb[2] = form1.textBox3;
        tb[3] = form1.textBox4;
        tb[4] = form1.textBox5;
        tb[5] = form1.textBox6;
        tb[6] = form1.textBox7;
        tb[7] = form1.textBox8;
        tb[8] = form1.textBox9;
        tb[9] = form1.textBox10;
        tb[10] = form1.textBox11;
        tb[11] = form1.textBox12;
        .
        .
        .
        tb[80] = form1.textBox81;

将数组(tb)移动到矩阵(tbmatrix):

        TextBox[,] tbmatrix = new TextBox[9,9];
        int c = 0;
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                tbmatrix[i, j] = tb[c];
                c++;
            }
        }

如果有人想看一下,我将添加一些随机线索以添加代码:

    TextBox[] tb = new TextBox[81];
    Dictionary<int,string> col = new Dictionary<int,string>();
    Dictionary<int, string> row = new Dictionary<int, string>();
    Dictionary<Tuple<int,int>, string> box = new Dictionary<Tuple<int, int>, string>();
        Random initial = new Random();
        int index;
        int jindex;
        int val;
        int k = 0;
        while (k < 20)       //20 is the number of clues
        {
            index = initial.Next(-1, 9);      //a random number from 0-8
            jindex = initial.Next(-1, 9);     //same as above
            if (tbmatrix[index,jindex].Text != "")
            {
                continue;
            }
            t = new Tuple<int, int>(index/3, jindex/3);
            while (true)
            {
                val = initial.Next(0, 10);      //a random number from 1 to 9
                if(box[t].IndexOf(val.ToString()) == -1 && col[jindex].IndexOf(val.ToString()) == -1 && row[index].IndexOf(val.ToString()) == -1)
                {
                    break;
                }
            }
            tbmatrix[index, jindex].Text = val.ToString();
            tbmatrix[index, jindex].Enabled = false;
            k++;
        }

现在这是一个问题,最后一个代码不会更改实际的文本框,它只会更改它们的引用...我遇到的唯一解决方案是像这样将值重新分配给原始文本框:

        form1.textBox1 = tb[0];
        form1.textBox2 = tb[1];
        form1.textBox3 = tb[2];
        form1.textBox4 = tb[3];
        .
        .
        .
        form1.textBox81 = tb[80]

那么,有什么帮助吗?

tbmatrix[index, jindex].Text = val.ToString();

似乎对我来说很好!

另外,更改initial.Next(-1, 9); initial.Next(0, 9); 因为(-1,9)从-1(含)生成一个随机整数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM