Для Loop через PictureBoxes БЕЗ массива на c # - PullRequest
1 голос
/ 04 ноября 2019
char SideA = 'A';
char SideB = 'B';
int CPUPlayer = 1;
Test.Text = x.ToString();

if (difficulty == 1)
{ 
    if (CPUPlayer == 1)
    {

        string targetString = "";
        for (int side = 1; side <= 1; side++)
        {

            targetString = SideA.ToString();
            Test.Text = targetString.ToString();
            for (int game = 1; game < 25; game++)
            {
                targetString = game.ToString();
                for (int tile = 1; tile < 10; tile++)
                {
                    targetString = tile.ToString();
                    PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];
                    if (target.BackgroundImage == null)
                    {
                        target.BackgroundImage = Properties.Resources.smallo;
                        Test.Text = targetString.ToString();
                    }
                }
            }

        }
    }
}

Таким образом, я пытаюсь перебрать предварительно названные PictureBox (например: A11, A12, A13 .... и т. Д.), Чтобы они меняли фоновые изображения, используя петлю через строку для подключения к картинкам, но я продолжаюполучить Index is out of range от PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];

Я не уверен, что делать, чтобы это исправить. Я очень новичок в c # и программировании в целом, поэтому было бы приятно узнать, чего мне не хватает!

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Чтобы помочь вам найти проблему, измените

PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];

на

var found = this.Controls.Find(targetString, true);

if(found == null || found.Length < 1 ) {
  throw new Exception("Picture not found")
}

После этого установите точку останова в строке throw и выясните, почему изображение не было найдено.

0 голосов
/ 04 ноября 2019

Получается, что это была просто моя .ToString(); логика, которая была совершенно неправильной, а строка выходила в виде графического окна, которого не было. Это код, который работает:

            if (difficulty == 1)
        { 
            if (CPUPlayer == 1)
            {

                string targetString = "";
                for (int side = 1; side <= 1; side++)
                { 
                    for (int game = 1; game < 25; game++)
                    {

                        for (int tile = 1; tile < 10; tile++)
                        {
                            targetString = SideA;
                            targetString += game.ToString();
                            targetString += tile.ToString();
                            Test.Text = targetString.ToString();
                            PictureBox target = (PictureBox)(this.Controls.Find(targetString, true))[0];
...