Объединить строки, чтобы сделать имя Picturebox - PullRequest
0 голосов
/ 05 марта 2012

У меня есть много картинок, названных так: PBr1_1, PBr1_2, ... PBr1_9

Я бы хотел сделать петлю

        for (int i = 0; i < 10; i++)
        {
            if (Textbox.Text[i].ToString() == "1"){ "PBr1_"+"i".Tag = "cb.png";}
        }

так for i=0 => PBr1_0, i=10 => Pbr1_10.

Пример. У меня есть значение в текстовом поле: 0001011101 - тогда, если значение в текстовом поле равно "1", я бы хотел изменить тег picturebox.

Как автоматизировать этот процесс, используя, например, цикл «for»?

Ответы [ 4 ]

1 голос
/ 05 марта 2012

Я полагаю, что ваши элементы управления находятся в WinForm (это), а все элементы управления с таким именем - все графические окна.
Если так, то это так ----

for (int i = 0; i < 10; i++) 
{ 
    if (Textbox.Text[i].ToString() == "1")
    {
        Control[] c = this.Controls.Find("PBr1_" + i.ToString(), true);
        if(c != null && c.Length > 0) c[0].Tag = "cb.png";
    }
} 
0 голосов
/ 05 марта 2012

Создайте массив (или список), который содержит графические блоки и используйте их в цикле for.

Вы также можете использовать отражение, но, по моему мнению, лучше не использовать это в этом случае.

0 голосов
/ 05 марта 2012

Если вы используете WinForm, вы можете использовать Control.Find метод, чтобы найти элемент управления по имени

Получив контроль, вы можете легко изменить любое свойство

0 голосов
/ 05 марта 2012

Вы можете поместить графические блоки в List<PicutreBox> и выполнить итерации по списку.

var pictures = new List<PictureBox>();
pictures.Add(pic1);
pictures.Add(pic2);
//...


for (int i = 0; i < 10; i++)
{
     if (Textbox.Text[i].ToString() == "1") 
          pictures[i].Tag = "cb.png";
}

Имена динамических переменных, как в вашем примере, не поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...