Как изменить свойство элемента управления из панели Flowlayout? - PullRequest
3 голосов
/ 08 октября 2010

Как изменить свойство элемента управления в панели Flowlayout, предполагая, что вы добавляете элементы управления программно, и предполагая, что имена каждого элемента управления совпадают?

Например, это изображение показывает, что есть 2 текстовых поля и две кнопки, Как бы я изменил цвет спины кнопки 2? Предполагая, что элементы управления были добавлены во время выполнения.

alt text

foreach(Controls ctrl in flowlayoutpanel1.Controls)
{
//What should I put here?
}

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Вы можете попробовать Control.ControlCollection.Find .

flowLayoutPanel1.Controls.Add(new Button() { Text = "button 1", Name = "btn1" });
Button btn1 = flowLayoutPanel1.Controls.Find("btn1", true).FirstOrDefault() as Button;
btn1.Text = "found!";
3 голосов
/ 08 октября 2010

Ну, самый простой способ - сохранить явную ссылку на кнопки, которые вы добавляете. В противном случае вы можете добавить тег, чтобы различать их (чтобы быть устойчивым к проблемам с i18n). Например. Вы можете установить тег «button2» на «button2», а затем использовать:

foreach (Control ctl in flp.Controls) {
    if ("button2".Equals(ctl.Tag)) {
        ctl.BackColor = Color.Red;
    }

}

Я предполагаю, что ваша проблема заключается в том, чтобы снова найти нужную кнопку и не устанавливать цвет фона. Вы также можете проверить, является ли элемент управления кнопкой, а ее текст - «button2», но если текст может меняться в зависимости от языка пользовательского интерфейса, это, вероятно, не очень хорошая идея.

ETA: Совершенно забыл, что для этого вы можете использовать свойство Name элемента управления.

Если вы просто хотите изменить цвет фона кнопки в ответ на событие от кнопки, вы можете просто использовать аргумент sender обработчика события.

...