Сначала дайте нормальные имена вашим переменным. Что означают эти tb
, t
, t1
?
Предположим, некоторая информация о людях хранится в этих массивах. Тогда давайте назовем их firstnames
, lastnames
, nicknames
. Выглядит намного лучше, а?
для каждого нового текстового поля мне нужно определить новый объект, как я могу упростить это?
Используйте петли.
const int size = 5; // form field
TextBox[] firstnames = new TextBox[size];
TextBox[] lastnames = new TextBox[size];
TextBox[] nicknames = new TextBox[size];
for (int i = 0; i < size; i++)
{
firstnames[i] = new TextBox();
lastnames[i] = new TextBox();
nicknames[i] = new TextBox();
}
Насколько я понимаю, вы используете массивы текстовых полей просто для хранения текста. Это абсолютно неправильно.
Просто создайте массивы строк.
string[] firstnames = new string[size];
string[] lastnames = new string[size];
string[] nicknames = new string[size];
Нет необходимости инициализировать их начальными значениями.
Для удобной работы с текстовыми полями, помещенными в форму, поместите их в массив.
TextBox[] textBoxes; // form field
textBoxes = this.Controls.OfType<TextBox>().ToArray();
Или прямо их установить:
textBoxes = new TextBox[] { textBox1, textBox2, textBox3, textBox4, textBox5 };
Теперь вы можете работать с этим массивом в цикле:
private void buttonSave_Click(object sender, EventArgs e)
{
if (listBoxPeople.SelectedIndex == 0)
{
for (int i = 0; i < size; i++)
{
firstnames[i] = textBoxes[i].Text;
}
}
//...
Запишите дружественные имена listBoxPeople
, buttonSave
(разумеется, дайте им имена).
Давайте сохраним данные с помощью сериализации.
XmlSerializer xmlSerializer = new XmlSerializer(typeof(string[]));
using (var stream = new FileStream("data.xml", FileMode.Create))
{
xmlSerializer.Serialize(stream, firstnames);
}
Очень просто и лаконично.
Загрузка данных:
using (var stream = new FileStream("data.xml", FileMode.Open))
{
firstnames = (string[])xmlSerializer.Deserialize(stream);
}
Ссылка на документацию: XmlSerializer