Как сохранить элементы в текстовых полях для одного выбранного индекса в списке в формате XML и загрузить эти данные? C # - PullRequest
1 голос
/ 01 июня 2019

Я относительно новичок в c #, у меня было требование, чтобы данные текстового поля из набора 5 сохранялись для одного элемента в списке. Элемент в списке будет добавляться во время выполнения. Для каждого элемента в окне списка должен быть сохранен набор из 5 данных. И снова, если мы щелкнули элемент в списке, данные должны отобразиться. Это требование. здесь я кодировал, что неудовлетворительно. поэтому, пожалуйста, помогите мне, в которой я могу упростить программу. Способ, который я передал, может быть немного запутанным, пожалуйста, извините за это. ** Конечная цель: для выбранного элемента в окне списка данные должны быть сохранены в формате XML, а если щелкнуть мышью, данные должны быть загружены в эти текстовые поля **

 namespace WindowsFormsApplication20
 public partial class Form1 : Form
{
    TextBox[] tb = new TextBox[5];
    TextBox[] t = new TextBox[5];
    TextBox[] t1 = new TextBox[5];
    int[] tblist = new int[5];

    public struct Tblist
    {
        string text; 

    }
    public Form1()
    {
        InitializeComponent();
        tb[0] = new TextBox();
        tb[1] = new TextBox();
        tb[2] = new TextBox();
        tb[3] = new TextBox();
        tb[4] = new TextBox();
        t[0] = new TextBox();
        t[1] = new TextBox();
        t[2] = new TextBox();
        t[3] = new TextBox();
        t[4] = new TextBox();
        t1[0] = new TextBox();
        t1[1] = new TextBox();
        t1[2] = new TextBox();
        t1[3] = new TextBox();
        t1[4] = new TextBox();

    }

 here for every new text box I need to define an new object how can i simplify this?

вот что происходит при нажатии кнопки: он сохраняет все данные в текстовом поле для выбранного индекса в списке

    private void button1_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == 0)
        {
            tb[0].Text = textBox1.Text;
            tb[1].Text = textBox2.Text;
            tb[2].Text = textBox3.Text;
            tb[3].Text = textBox4.Text;
            tb[4].Text = textBox5.Text;
        }
        if (listBox1.SelectedIndex == 1)
        {
            t[0].Text = textBox1.Text;
            t[1].Text = textBox2.Text;
            t[2].Text = textBox3.Text;
            t[3].Text = textBox4.Text;
            t[4].Text = textBox5.Text;
        }
        if (listBox1.SelectedIndex == 2)
        {
            t1[0].Text = textBox1.Text;
            t1[1].Text = textBox2.Text;
            t1[2].Text = textBox3.Text;
            t1[3].Text = textBox4.Text;
            t1[4].Text = textBox5.Text;
        }
    }

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

    private void listBox1_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == 0)
        {
           /* textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = textBox5.Text = " ";*/
            /*TextBox[] tb = new TextBox[5];*/
             textBox1.Text = tb[0].Text;
            textBox2.Text = tb[1].Text;
            textBox3.Text = tb[2].Text;
            textBox4.Text = tb[3].Text;
            textBox5.Text = tb[4].Text;
        }

       if (listBox1.SelectedIndex == 1)
        {
           /* textBox1.Text = textBox2.Text = textBox3.Text= textBox4.Text = textBox5.Text = " ";*/
          /*TextBox[] t = new TextBox[5];*/
            textBox1.Text = t[0].Text;
            textBox2.Text = t[1].Text;
            textBox3.Text = t[2].Text;
            textBox4.Text = t[3].Text;
            textBox5.Text = t[4].Text;
        }
        if (listBox1.SelectedIndex == 2)
        {
            /* textBox1.Text = textBox2.Text = textBox3.Text= textBox4.Text = textBox5.Text = " ";*/
            /*TextBox[] t = new TextBox[5];*/
            textBox1.Text = t1[0].Text;
            textBox2.Text = t1[1].Text;
            textBox3.Text = t1[2].Text;
            textBox4.Text = t1[3].Text;
            textBox5.Text = t1[4].Text;
        }
    }

1 Ответ

1 голос
/ 01 июня 2019

Сначала дайте нормальные имена вашим переменным. Что означают эти 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

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