Значения текстового поля в массив

#c# #arrays #loops #textbox

#c# #массивы #циклы #текстовое поле

Вопрос:

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

Текстовые поля называются txtText1, txtText2 ….txtText12. Это то, что я получил до сих пор:

 for (int i = 1; i < 13; i  )
{
   if(txtText[i] != String.Empty)
    {
        TextArray[i] = Convert.ToString(txtText[i].Text);
    }
}
  

..но txtText [i] не допускается.

Как я могу перебирать эти поля?

Ответ №1:

В идеале, для начала поместив их в массив, вместо использования нескольких отдельных переменных. По сути, вам нужна коллекция текстовых полей, верно? Поэтому используйте тип коллекции.

Вы могли бы использовать

 TextBox tb = (TextBox) Controls["txtText"   i];
  

предполагая, что их идентификаторы были указаны правильно, но лично я бы использовал коллекции, предназначенные для такого рода вещей.

Ответ №2:

Предполагая, что массив txtText содержит ссылки на объекты текстового поля, вы можете сделать это

 var textArray=txtText.Where(t=>!string.IsNullOrEmpty(t.Text)).Select(t=>t.Text).ToArray();
  

Ответ №3:

Я не думаю, что вы можете создавать подобные объекты массива в конструкторе.

В любом случае, что вы можете сделать: вы можете создать переменную класса IEnumerable<Textbox> _textboxes и заполнить ее всеми текстовыми полями в конструкторе.

затем позже в вашем коде вы можете просто сделать

 foreach(var textbox in _textboxes)
{
    Console.WriteLine(textbox.Text); // just an example, idk what you want to do with em
}
  

Ответ №4:

вы можете попробовать вот так….

 List<string> values = new List<string>();
    foreach(Control c in this.Controls)
    {
        if(c is TextBox)
        {

            TextBox tb = (TextBox)c;
            values.Add(tb.Text);
        }
     }
     string[] array = values.ToArray();
  

Ответ №5:

Попробуйте создать список текстовых полей вместо массива, подобного этому:

 List<TextBox> myTextboxList = new List<TextBox>();
myTextBoxList.Add(TextBox1);
myTextBoxList.Add(TextBox2);
mytextBoxList.Add(TextBox3);
  

Затем используйте foreach для одновременного доступа к каждому элементу следующим образом:

 Foreach (TextBox item in myTextboxList) {
    // Do something here, for example you can:
    item.Text = "My text goes here";
}