Как я могу изменить текст текстовых полей в C # при сохранении ссылок на них в массиве или матрице? - PullRequest
0 голосов
/ 04 мая 2018

Есть ли способ изменить текст текстовых полей в c # при сохранении ссылок на них в массиве?

Я сталкивался с этой проблемой, когда создавал игру судоку 9x9 в форме вдов на C #, я сохранил 81 текстовое поле в массиве (tb) и затем переместил его в матрицу:

        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]

Так, какая помощь?

1 Ответ

0 голосов
/ 04 мая 2018
tbmatrix[index, jindex].Text = val.ToString();

Кажется, у меня отлично работает!

Кроме того, измените initial.Next(-1, 9); на initial.Next(0, 9); Потому что (-1, 9) сгенерировал случайный int из -1 включительно

...