изменение группы элементов управления WinForm с помощью цикла?

Вопрос:

У меня есть группа элементов управления текстовыми полями, которые я бы хотел заполнить массивом удвоений. Названия элементов управления численно увеличиваются так же

Tol1.Text = lineTolFront[0].ToString();
Tol2.Text = lineTolFront[1].ToString();
Tol3.Text = lineTolFront[2].ToString();
Tol4.Text = lineTolFront[3].ToString();
Tol5.Text = lineTolFront[4].ToString();
Tol6.Text = lineTolFront[5].ToString();
//and so on

есть ли более простой способ сделать это, используя цикл без необходимости вручную вводить значения?

Лучший ответ:

Во-первых, получите все те TextBox, которые используют LINQ (обратите внимание: это полезно, особенно если у вас много элементов управления, которые вы не хотите вручную помещать в коллекцию).

var tboxes = this.Controls.Cast<Control>()
                 .OfType<TextBox>()
                 .Where(l => l.Name.Contains("Tol"));

а затем прокрутите их и установите контент.

int i = 0;
foreach(var tb in tboxes)
    tb.Text = lineTolFront[i++].ToString();

Ответ №1

Вы можете сначала добавить TextBoxes в коллекцию. Это немного меньше копировать/вставлять работу по крайней мере.

var textBoxes = new List<TextBox> { Tol1, Tol2, Tol3, Tol4, Tol5, Tol6 };

for (var i = 0; i < lineTolFront.Count; i++)
textBoxes[i].Text = lineTolFront[i].ToString();

Что касается комментария M Patel, убедитесь, что вы добавили TextBoxes в коллекцию в том же порядке, который вы хотите назначить удвоениям из массива lineTolFront.

Ответ №2

Вы можете добавить свои элементы управления в массив и выполнить цикл через него:

var controls = new[] { Tol1, Tol2, Tol3, Tol4, Tol5, }; //etc
for(int i = 0; i < controls.Length; i++)
{
controls[i].Text = lineTolFront[i].ToString();
}

Оцените статью
TechArks.Ru
Добавить комментарий