Как установить переменную в имени метки - PullRequest
0 голосов
/ 24 октября 2019

в моем проекте у меня есть 8 dynamic Textbox es и 8 dynamic Label s, которые были созданы в c #. Теперь мне нужно прочитать текст в нем и вставить его в БД.

Мой текущий сценарий выглядит как

Label labelname1 = this.Controls.Find("label1", false).FirstOrDefault() as Label;
Label labelname2 = this.Controls.Find("label2", false).FirstOrDefault() as Label;
Label labelname3 = this.Controls.Find("label3", false).FirstOrDefault() as Label;
.....

Возможно ли создать цикл while с такой переменной, как:

int i = 1;

while (a < 9)
{
    label Labelname+i = this.Controls.Find("label+i" + a, false).FirstOrDefault() as Label;
    i++;
}

Когда я беру "labelname+i", это невозможно , потому что это не string.

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 октября 2019

Метод извлечения , затем

 private T FindControl<T>(string name) where T : Control {
   return this
     .Controls
     .Find(name, false)
     .OfType<T>()
     .FirstOrDefault();
 }

и использование его в цикле (кажется, вы хотите for один):

 for (int i = 1; i < 9; ++i) {
   Label myLabel = FindControl<Label>($"label{i}");

   if (myLabel != null) {
     //TODO: Put relevant code here
   }
 }

Тот же цикл, еслиВы хотите перечислить TextBox es:

 // textBox1..textBox8
 for (int i = 1; i < 9; ++i) {
   TextBox myTextBox = FindControl<TextBox>($"textBox{i}");

   if (myTextBox != null) {
     //TODO: Put relevant code here
   }
 }
2 голосов
/ 24 октября 2019

Вы можете создать список меток и попробовать:

List<Label> labels = new List<Labels>();

for (int i=1;i<9;i++)
{
    Label lbl = this.Controls.Find("label"+i.ToString(), false).FirstOrDefault() as Label;
   labels.Add(lbl);
}

А если вы хотите получить доступ к i Label, вы просто делаете:

labels[i] ...
...