2015-09-07 6 views
3

У меня есть 16-элементный массив int и 16 текстовых полей (textBox1, textBox2 ....), которые выглядят как матрица 4x4. Есть ли способ, чтобы положить значения Textboxes к каждому элементу массива не используя такой код:Значения массива из текстовых полей

array[1] = (int)textBox1.Text; 
array[2] = (int)textBox2.Text; 
+0

Ничего более чистого, чем это. Вы можете использовать '(this.FindControl (" textBox "+ i) как TextBox) .Text', но затем вы теряете безопасность типа – dman2306

+0

Соглашаясь с этим выше. Другой возможностью было бы создать массив элементов управления TextBox, таких как 'Control [] aTextBoxes = new Control [] {textBox1, textBox2, ..};', а затем прокручивать их с помощью 'for (int i = 0 ; i

+0

Вам лучше пойти с правильное обозначение ваших элементов управления или определение поля '' TextBox [] '' в классе формы. Кроме того, есть такие вещи, как [jagged] (https://msdn.microsoft.com/en-US/library/2s05feca.aspx) и [прямоугольный/многомерный] (https://msdn.microsoft.com/en-US /library/s7e8s029(v=VS.80).aspx). –

ответ

2

Один из вариантов будет хранить ссылки на TextBox экземпляров в массиве.

TextBox[] Boxes; 

И затем используйте цикл «для», чтобы заполнить значения.

for (int i = 0; i < 16; i++) 
{ 
    array[i] = (int)Boxes[i].Text; 
} 
0

ИМХО лучший способ дизайна, кстати, это должно быть. В частности, rectangular/multidimensional arrays могут быть полезны в этом случае:

public partial class Form1 : Form { 
    TextBox[,] textBoxes; 
    int[,] values; 

    public Form1() { 
     InitializeComponent(); 
     textBoxes = new TextBox[4, 4]; 
     values = new int[textBoxes.GetLength(0), textBoxes.GetLength(1)]; 
     for(int r = 0; r < textBoxes.GetLength(0); r++) { 
      for(int c = 0; c < textBoxes.GetLength(1); c++) { 
       values[r, c] = int.Parse(textBoxes[r, c].Text); 
      } 
     } 
    } 
} 
1

Вы можете использовать функцию, чтобы получить текст в текстовом поле как целое, используя его «индекс» из коллекции управления формы в:

int GetBoxText(int index) 
{ 
    return Convert.ToInt32(this.Controls["textBox" + i.ToString()].Text); 
} 

Обратите внимание, что это не имеет никакой проверки ошибок. Вы можете добавить некоторые, если хотите. Все это - получить текст элемента управления с именем textBox +, который я из коллекции управления формы, и преобразовать его в целое.

Смежные вопросы