динамический вызов элемента управления

#c# #winforms

#c# #winforms

Вопрос:

Допустим, у меня есть 30 элементов управления, все lbl, все называются «lblA» с числом после.

У меня также есть 30 текстовых полей, одно и то же — под названием «txtB» с цифрой после.

Как именно я бы это отформатировал.

 for (i = 1; i < this.controls.count;i  )
{
    if ("lblA" i=null)
    {
        break;
    }
    string A = string A   ("lblA"   i).Text
    string B = string B   ("txtB"   i).Text
}
  

Я пробовал несколько разных вещей, таких как вызов объекта с помощью this.controls[i], но это не совсем то, что я хочу. Что я делаю, так это то, что у меня есть много меток и текстовых полей в форме, которые добавляются во время выполнения. Мне нужно выполнить цикл по форме, чтобы получить их все. Я записываю это как a для каждого с довольно большим количеством «если», но мне любопытно, есть ли динамический способ сделать это.

Я искал в Интернете около 1-1: 30 часов и не нашел ничего похожего на, спасибо всем за помощь.

Комментарии:

1. Этот вопрос о ASP.NET ?

2. Это просто программа Windows form C #.

Ответ №1:

 var labels = new Dictionary<int, string>();
for (i = 1; i < this.controls.count;i  )
{
    var label = FindControl("lblA"   i) as Label;
    if (label == null)
    {
        break;
    }
    labels.Add(i, label.Text);
}
  

Ответ №2:

То, что вы хотите использовать, — это метод FindControl.

Пример в VB:

  Dim txtMileage As TextBox = CType(cphLeft.FindControl("txtMileage" amp; iControlCountDays.ToString()), TextBox)
  

Ответ №3:

Возможно, это решит то, что вам нужно:

 void GetSpecialControls() {
  const string TXT_B = "txtB";
  const string LBL_A = "lblA";
  List<TextBox> textBoxList = new List<TextBox>();
  List<Label> labelList = new List<Label>();
  foreach (Control ctrl in this.Controls) {
    Label lbl = ctrl as Label;
    if (lbl != null) {
      if (lbl.Text.IndexOf(LBL_A) == 0) {
        labelList.Add(lbl);
      }
    } else {
      TextBox txt = ctrl as TextBox;
      if (txt != null) {
        if (txt.Text.IndexOf(TXT_B) == 0) {
          textBoxList.Add(txt);
        }
      }
    }
  }
  Console.WriteLine("Found {0} TextBox Controls.", textBoxList.Count);
  Console.WriteLine("Found {0} Label Controls.", labelList.Count);
}