2013-08-25 3 views
4

Я пытаюсь использовать цикл для редактирования данных из нескольких текстовых полей, но я не могу понять, как преобразовать строку, содержимое которой является именем моего окна для доступа текстовый элемент каждого окна.Используйте строку для вызова переменной в C#

 private void reset_Click(object sender, EventArgs e) 
    { 
     string cell; 
     for(int i = 0; i < 9; i++) 
     { 
      for (int j = 0; j < 9; j++) 
      { 
       cell = "c" + Convert.ToChar(i) + Convert.ToChar(j); 
       cell.text = ""; 
      } 
    } 

Мои текстовые поля называются «c00, c01, .... C87, C88», которая является то, что содержимое моей переменной «ячейки» будет во время каждой итерации, однако приведенный выше код не работает, потому что он пытается получить доступ к элементу «text» строки, который, очевидно, не имеет смысла.

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

+3

В общем, когда у вас есть переменные (или в данном случае управления) с именем 'item_0',' item_1' ... 'item_N' вы должны остановиться и спросить себя:«Могу ли я использовать массив для этого вместо?" –

+0

И, возможно, более подходящим будет контроль, подобный списку. –

ответ

8

Это гораздо лучше использовать массив. Либо 2D массив так:

TextBox[,] textboxes = ... 

private void reset_Click(object sender, EventArgs e) 
{ 
    for(int i = 0; i < textboxes.GetLength(0); i++) 
    { 
     for (int j = 0; j < textboxes.GetLength(1); j++) 
     { 
      textboxes[i,j].Text = ""; 
     } 
    } 
} 

Или неровный массив так:

TextBox[][] textboxes = ... 

private void reset_Click(object sender, EventArgs e) 
{ 
    for(int i = 0; i < textboxes.Length; i++) 
    { 
     for (int j = 0; j < textboxes[i].Length; j++) 
     { 
      textboxes[i][j].Text = ""; 
     } 
    } 
} 
5

Я рекомендую вам использовать двумерный массив TextBoxes. Это упростит вашу жизнь.

Во всяком случае попробовать этот this.Controls.Find()

1

Вы должны быть в состоянии Linq к нему.

TextBox txtBox = this.Controls.Select(c => c.Name == cell); 
txtBox.Text = ""; 
Смежные вопросы