Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995

Как сериализовать значение listBox-а

07.01.2012, 12:33. Показов 5896. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
       
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_Closing(object sender, FormClosingEventArgs e)
        {
           
        }
 
        public class Katalogizator
        {
            public string org {get; set;}
            public string kom {get; set;}
            public int id {get; set;}
 
           
            }
 
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(textBox1.Text);
        }
        }
 
        public class Serializer
        {
            //Конвертация в массив байтов
            public byte[] ConvertToByteArray<T>(T serializableObject)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                using (MemoryStream stream = new MemoryStream())
                {
                    formatter.Serialize(stream, serializableObject);
                    return stream.ToArray();
                }
            }
 
            //Деконвертация:
            public T ConvertFromByteArray<T>(byte[] binaryData)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                using (MemoryStream ms = new MemoryStream(binaryData))
                {
                    return (T)formatter.Deserialize(ms);
                }
            }
        }
  
    }
в него куском добавлена часть с сериализхацией и дисериализацией.

Как сериализовать значение listBox-а? Не могу понять логику написания. Покажите пожалуйста примером. Спасибо
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2012, 12:33
Ответы с готовыми решениями:

Как получить значение ListBox?
Как получить значение ListBox? Пробовал, но в selectedBook не помещается ничего.. var selectedBook = (string)...

Как добавить в listbox значение k в строку n?
Заранее спасибо.

Как прочитать значение флажка в ListBox?
Устанавливаю Style=1 ('CheckBox') А как к этим флажкам обращаться-то? Вроде все свойства пересмотрел...

24
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.01.2012, 17:38
Студворк — интернет-сервис помощи студентам
я не совсем понимаю твоих проблем по твоим описаниям. поэтому не могу сказать, что и где исправлять.
не хочешь выкладывать проект - выложи код всех своих .cs файлов (только не забудь их под CUT тег засунуть)
0
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
09.01.2012, 18:07  [ТС]
С панели куда то изчкзла кнопка CSHARP...... - Туплю, нашёл. А вот cut не нашёл..... ну благо не велик код.

Вот весь Forma1.cs тут вринципе всё и есть необходимое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Xml.Serialization;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            spisok.LoadspisokOfQuerys("katOrg.xml");
            for (int i = 0; i < spisok.Count(); i++) listBox1.Items.Add(spisok.ReturnQuerys(i).org);
         
        }
              
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_Closing(object sender, FormClosingEventArgs e)
        {
            spisok.SaveSpisokOfQuerys("katOrg.xml");          
 
        }
              
 
        //Добавление строки из текстбокса в листбокс и сохранение в нём, так же создание запроса Query
        private void button1_Click(object sender, EventArgs e)
        {
            Query newQuery = new Query();
            newQuery.org = textBox1.Text;
            spisok.AddQuery(newQuery);
            listBox1.Items.Add(spisok);
            textBox1.Text = null;
        
        }
 
        //удаление запроса из списка spisok
        private void button2_Click(object sender, EventArgs e)
        {
            spisok.RemoveQuery(spisok.ReturnQuerys(listBox1.SelectedIndex));
            
        }
 
        //сохраняем коллекцию с помощью сериализации
        private void button3_Click(object sender, EventArgs e)
        {
            spisok.SaveSpisokOfQuerys("katOrg.xml");
        }
 
        [Serializable]
        public class Query
        {
            public string org;
            public string kom;
            public int id;
        }
 
          public class spisokOfQuerys
          {
        
              private List<Query> Queryspisok = new List<Query>();        
              //количество запросов в нашем списке
              public int Count()
              {
                  return Queryspisok.Count;
              }
              //цепляем один конкретный запрос, если он нам нужен
              public Query ReturnQuerys(int i)
              {
                  return Queryspisok.ElementAt(i);
              }
              //добавляем запрос в список
              public void AddQuery(Query query)
              {
                  Queryspisok.Add(query);
              }
        //удаляем запрос из списка
              public void RemoveQuery(Query query)
              {
                  Queryspisok.Remove(query);
              }
        //сохраняем с помощью сериализации
              public void SaveSpisokOfQuerys(string path)
              {
                  FileStream filestream = new FileStream("katOrg.xml", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                  XmlSerializer xmls = new XmlSerializer(typeof(List<Query>));
                  xmls.Serialize(filestream, Queryspisok);
                  filestream.Close();
              }
              //загружаем с помощью сериализации
              public void LoadspisokOfQuerys(string path)
              {
                  FileStream filestream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                  XmlSerializer xmls = new XmlSerializer(typeof(List<Query>));
                  Queryspisok = (List<Query>)xmls.Deserialize(filestream);
                  filestream.Close();
              }
              //ищем конкретный запрос среди всех
              
              public Query FindQueryInspisok(string org)
              {
                  for (int i = 0; i < Queryspisok.Count; i++)
                  {
                      if (Queryspisok.ElementAt(i).org == org)
                      {
                          return Queryspisok.ElementAt(i);
                      }
                  }
                  return null;
              }
          }
        spisokOfQuerys spisok = new spisokOfQuerys();
                
         //загружаем с помощью сериализации        
        private void button7_Click(object sender, EventArgs e)
        {
            spisok.LoadspisokOfQuerys("katOrg.xml");
                for (int i =0; i<spisok.Count(); i++) listBox1.Items.Add(spisok.ReturnQuerys(i).org);
        }
 
        //удаляем из коллекции
        private void button10_Click(object sender, EventArgs e)
        {
            spisok.RemoveQuery(spisok.ReturnQuerys(listBox1.SelectedIndex));
        }
 
        //ищем конкретный запрос
        private void button8_Click(object sender, EventArgs e)
        {
           // Query query = list.FindQueryInList(textBox5.Text);
            //if (query != null) MessageBox.Show(query.name + " " + query.scheme);
            //else MessageBox.Show("Not found");
        }
        }
 
    }
в чём сложность:
1. При нажатии на перваую кнопку(добавление запроса из текст бокса в листбокс) вместо текста или цифры появляется слово WindowsFormsAplication, но при повтроном открытии программы(тоесть при загрузке файла с сохранёнными данными) текст внесённый отражается корректно, тоесть то, что и было написанно.
2. При использовании второй конпки, удаления, удаление происходит из списка запросов, поэтому в листбоксе не отображается до следующей загрузки формы. Вот и спрашиваю, как корректно прописать, чтобы при удалении, обновлялся листбокс.
3. В таком виде я не могу удалить из листбокса несколько значений одновременно, без перезапуска формы.

ну и вот остатки из других .cs-ок:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Код, автоматически созданный конструктором форм Windows
 
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button3 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // listBox1
            // 
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(12, 73);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(130, 420);
            this.listBox1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(12, 12);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "Добавить";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(93, 12);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 2;
            this.button2.Text = "Удалить";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(12, 41);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(156, 20);
            this.textBox1.TabIndex = 3;
            // 
            // button3
            // 
            this.button3.Location = new System.Drawing.Point(174, 12);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(75, 23);
            this.button3.TabIndex = 4;
            this.button3.Text = "Сохранить";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(657, 509);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.listBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_Closing);
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button3;
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
0
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.01.2012, 18:32
у себя не пробовал, не компилил, могут быть ошибки, думаю сможешь исправить.
плюс это далеко не самый оптимальный код. совсем неоптимальный, я бы сказал. но переколбашивать для оптимизации надо даже не форму, а класс spisokOfQuerys (кстати, атата такое именование делать )

пункт 1
C#
1
2
3
4
5
6
7
8
9
        private void button1_Click(object sender, EventArgs e)
        {
            Query newQuery = new Query();
            newQuery.org = textBox1.Text;
            spisok.AddQuery(newQuery);
            listBox1.Items.Clear();
            listBox1.Items.AddRange(spisok.Select(s => s.org).ToArray());
            textBox1.Text = null;
        }


пункт 2, 3
C#
1
2
3
4
5
6
7
8
9
        private void button2_Click(object sender, EventArgs e)
        {
            foreach(int ind in listBox1.listBox1.SelectedIndices)
            {
               spisok.RemoveQuery(spisok.ReturnQuerys(ind));
            }
            listBox1.Items.Clear();
            listBox1.Items.AddRange(spisok.Select(s => s.org).ToArray());
        }
1
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
09.01.2012, 19:49  [ТС]
я его специально переименовал, чтобы лучше понимать что и откуда =) на практике я не смешиваю транслит с инглишом и т.д. =)

Попробую позже варианты и отпишусь. Я пока не ориентируюсь на "самый оптимальный код", пока просто пытаюсь понять суть =)

Добавлено через 36 минут
Не осилил =(

на первый же вариант следующее:
1. "WindowsFormsApplication1.Form1.spisokOf Querys" не содержит определения для "Select" и не был найден метод расширения "Select", принимающий тип "WindowsFormsApplication1.Form1.spisokOf Querys" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
Хотя в сборке есть Linq.....
2. Аргумент "1": преобразование типа из "S[]" в "object[]" невозможно
3. Наиболее подходящий перегруженный метод для "System.Windows.Forms.ListBox.ObjectColl ection.AddRange(object[])" имеет несколько недопустимых аргументов
0
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.01.2012, 21:49
все должно работать
оу. ад.
в класс spisokOfQuerys добавляешь метод:
C#
1
2
3
4
            public string[] GetQueryNames()
            {
                return Queryspisok.Select(qs => qs.org).ToArray();
            }
в класс Form1 добавляешь метод:
C#
1
2
3
4
5
        private void ReloadQueryListInListBox()
        {
            listBox1.Items.Clear();
            listBox1.Items.AddRange(spisok.GetQueryNames());
        }
в классе Form1 обработчик нажатия кнопки2 делаешь таким:
C#
1
2
3
4
5
6
        private void button2_Click(object sender, EventArgs e)
        {
            foreach (int index in listBox1.SelectedIndices)
                spisok.RemoveQuery(spisok.ReturnQuerys(index));
            ReloadQueryListInListBox();
        }
в классе Form1 в конструктор вместо своего
C#
1
for (int i = 0; i < spisok.Count(); i++) listBox1.Items.Add(spisok.ReturnQuerys(i).org);
кидаешь
C#
1
ReloadQueryListInListBox();
ну и там же обработчик нажатия кнопки1 делаешь таким:
C#
1
2
3
4
5
6
7
8
        private void button1_Click(object sender, EventArgs e)
        {
            Query newQuery = new Query();
            newQuery.org = textBox1.Text;
            spisok.AddQuery(newQuery);
            ReloadQueryListInListBox();
            textBox1.Text = null;
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2012, 21:49

Как из ListBox загнать значение в массив?
Ребят, как из listBox загнать значение в массив?

Как в ListBox увеличить значение RowSource
Имеются две формы одна которая отображает Listbox и кнопку, а вторая форма которая запускается с первой формы для добавления значений в...

Как вставить выбраное значение из ListBox в Label
Я создал список в ListBox, моя цель при нажатии на значение из ListBox'a поместить его в Label

Как в listBox поменять значение выбранного элемента
В ListBox выбран элемент, и есть некоторая строка как этому выбранному элементу присвоить значение имеющейся строки

Как вывести значение из ListBox по его индексу?
Подскажите. 1. Если в WindowsForm есть ListBox с несколькими значениями как можно по индексу вывести значение в TextBox. 2. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru