получить имя для динамических созданных меток с помощью существующей кнопки в форме

#c# #winforms

#c# #winforms

Вопрос:

Я создаю Label динамическую форму в своей форме Windows следующим образом:

 for (int i = 0; i < 3; i  )
{
  tableLayoutPanel1.Controls.Add(new Label() { 
    Text = dr["name"].ToString(),
    Name = string.Format("test_{0}", i) 
  }, 1, i);
}

 

теперь то, что у меня есть Button в моей форме, когда я нажимаю на нее, я хочу, чтобы она отображала Text в Label :

 private void button3_Click(object sender, EventArgs e)
{
    MessageBox.Show(test_1.Text); // <- Compile time error here
}
 

но он говорит, test_1 что не существует.
И я понимаю, почему, поскольку это сделано динамически; но возможно ли для меня добиться этого?

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

1. Табличная панель. GetControlFromPosition()

2. Вы должны найти Label , например Label myLabel = tableLayoutPanel1.Controls.Find("test_1", true).OfType<Label>().FirstOrDefault();

Ответ №1:

В случае создания среды Control выполнения ( Label в вашем случае) вы должны ее найти. Вы можете сделать это с помощью Linq:

  using System.Linq;

 ... 

 private void button3_Click(object sender, EventArgs e)
 {
   Label testLabel = tableLayoutPanel1
     .Controls
     .Find("test_1", true)
     .OfType<Label>()
     .FirstOrDefault();

   MessageBox.Show(testLabel?.Text ?? "Label not found");
 }
 

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

1. tableLayoutPanel1. Элементы управления [«test_1»].Text