2016-12-04 2 views
-1

В настоящее время я создаю небольшое приложение, в котором я создаю несколько элементов управления TextBox для панели в зависимости от того, сколько пользователь хочет создать. Впоследствии я хочу получить текст этих текстовых полей, но для этого мне нужно имя Contoll. Возможно, один из вас может рассказать мне, как я могу узнать имена элементов управления каждого созданного TextBox.Получение Controll.Name динамического созданного текстового поля

Спасибо за помощь.

+0

Почему бы не указать имена текстовых полей при их создании? Хотя, я не уверен, почему вам нужно будет обращаться к ним по имени, когда вы даже не знаете, сколько их там. Просто перечислите дочерние элементы панели, чтобы получить текстовые поля. Или сохраните их в массиве при их создании и получите доступ к ним через массив. – itsme86

ответ

0

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

public Form1() 
{ 
    InitializeComponent(); 

    for (int i = 0; i < 5; i++) 
    { 
     var txtBox = new TextBox(); 
     txtBox.Name = "TextBox" + i; 
     txtBox.TextChanged += TxtBox_TextChanged; 
     this.tableLayoutPanel1.Controls.Add(txtBox); 
    } 
} 

private void TxtBox_TextChanged(object sender, EventArgs e) 
{ 
    var txtBox = sender as TextBox; 
    string firstName = string.Empty; 
    string lastName = string.Empty; 
    switch (txtBox.Name) 
    { 
     case "TextBox1": 
      firstName = txtBox.Text; 
      break; 
     case "TextBox2": 
      lastName = txtBox.Text; 
      break; 
     // more cases here but you get the point... 
     default: 
      break; 
    } 
} 
0

Этот код выбирает textbox1 из tableLayoutPanel1, брось от контроля к TextBox и принимает Text недвижимость:

string s = ((TextBox)tableLayoutPanel1.Controls["TxtBox1"]).Text; 

, если вам нужно их всех, а затем перебрать текстовые поля:

string[] t = new string[4]; 
for(int i=0; i<4; i++) 
    t[i] = ((TextBox)tableLayoutPanel1.Controls["TxtBox"+(i+1).ToString()]).Text; 
Смежные вопросы