Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
kspower92
0 / 0 / 0
Регистрация: 06.02.2014
Сообщений: 13
1

Как сериализовать и десериализовать значения элементов управления из всех диалогов через MainForm

06.02.2014, 12:27. Просмотров 812. Ответов 7
Метки нет (Все метки)

Здравствуте! Подскажите способ решения такой проблемы: есть главная форма MainForm на которой имеется dataToolStripMenuItem из которого вызываются диалоги (Form1, Form2...и т.д.). В каждом из диалогов присутствуют элементы управления (в основном это textbox), в которые вводятся значения. Вопрос такой: Как сериализовать и десериализовать значения элементов управления из всех диалогов через MainForm?

Пока что получилось сериализовать значения элементов управления одного отдельного диалога, которые записываются в один файл. Пожалуйста подскажите как лучше реализовать сериализацию через главную форму всех диалогов программы в один файл. Заранее благодарен!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2014, 12:27
Ответы с готовыми решениями:

Как сериализовать и десериализовать объекты классов?
Имеются классы Pozition.cs using System; using...

Как сериализовать/десериализовать экземпляры классов в файл
Проблема следующая: Имеется три класcа: class Class1 { // Список полей и...

Как правильно сериализовать и десериализовать коллекцию объектов разных типов?
имеются классы, допустим private abstract class Shape { ...

Можно ли сериализовать в консоли, а десериализовать в ASP.NET
Доброго времени суток, уважаемый форум! Пишу я на C# давно (относительно, я...

Сериализовать/десериализовать объекты, одним из членов которого является SolidBrush
Мне нужно сериализовать/десериализовать объекты типа SomeType, одним из членов...

7
агерон
274 / 281 / 58
Регистрация: 12.10.2009
Сообщений: 1,112
06.02.2014, 15:52 2
это таки попытка сохранить состояние программы?
0
kspower92
0 / 0 / 0
Регистрация: 06.02.2014
Сообщений: 13
06.02.2014, 16:12  [ТС] 3
Не совсем, программа предназначена для расчетов, и те данные которые вводились в формы должны сохраняться в файл и соответственно нужна возможность загрузить эти данные обратно

Добавлено через 5 минут
Попробовал реализовать так: создал класс типа static в него передаю значения из форм, а затем кажое поле класса записываю в один файл. Но хотелось бы использовать сериализацию, т.к объктов в программе достаточно много, а с классом static реализация сериализации не очень хороший вариант
0
агерон
274 / 281 / 58
Регистрация: 12.10.2009
Сообщений: 1,112
06.02.2014, 19:55 4
у вас неверно выстроена архитектура, четко разделяйте логику программы и отображение данных, код покажите или так и будем переливать из пустого в порожнее?
0
kspower92
0 / 0 / 0
Регистрация: 06.02.2014
Сообщений: 13
06.02.2014, 20:50  [ТС] 5
Один из классов проекта:

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
public class Information 
    {
        static string _fillingDate;
        static string _buildingAddress;
        static string _developer;
        static string _developerAddress;
        static string _shifr;
 
        public static string FillingDate
        {
            get { return _fillingDate; }
            set { _fillingDate = value; }        
        }
 
        public static string BuildingAddress
        {
            get { return _buildingAddress; }
            set { _buildingAddress = value; }
        }
 
        public static string Developer
        {
            get { return _developer; }
            set { _developer = value; }
        }
 
        public static string DeveloperAddress
        {
            get { return _developerAddress; }
            set { _developerAddress = value; }
        }
 
        public static string Shifr
        {
            get { return _shifr; }
            set { _shifr = value; }
        }
Код диалога:

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
 public partial class InformationForm : Form
    {
        public InformationForm()
        {
            InitializeComponent();
        }
 
        private void OKbutton_Click(object sender, EventArgs e)
        {
            Information.FillingDate = textBox1.Text;
            Information.BuildingAddress = textBox2.Text;
            Information.Developer = textBox3.Text;
            Information.DeveloperAddress = textBox4.Text;
            Information.Shifr = textBox5.Text;
 
            Close();
        }
 
        private void InformationForm_Load(object sender, EventArgs e)
        {
            textBox1.Text = Information.FillingDate;
            textBox2.Text = Information.BuildingAddress;
            textBox3.Text = Information.Developer;
            textBox4.Text = Information.DeveloperAddress;
            textBox5.Text = Information.Shifr;
 
        }
    }
Так сохраняю данные с диалога Information в MainForm:
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
public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
       
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "dat файлы (*.dat)|*.dat";
            openFileDialog1.FileName = "";
 
            if (openFileDialog1.ShowDialog() == DialogResult.OK && openFileDialog1.FileName.Length > 0)
            {
                System.IO.FileStream fs = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
                System.IO.BinaryReader rd = new System.IO.BinaryReader(fs);
 
                Information.FillingDate = rd.ReadString();
                Information.BuildingAddress = rd.ReadString();
                Information.Developer = rd.ReadString();
                Information.DeveloperAddress = rd.ReadString();
                Information.Shifr = rd.ReadString();
 
                rd.Close();
                fs.Close();
            }
        }
 
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }
 
        private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "dat файлы (*.dat)|*.dat";
 
            if (saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName.Length > 0)
            {
                System.IO.FileStream fs = new System.IO.FileStream(saveFileDialog1.FileName, System.IO.FileMode.Create);
                System.IO.BinaryWriter wr = new System.IO.BinaryWriter(fs);               
 
                wr.Write(Information.FillingDate);
                wr.Write(Information.BuildingAddress);
                wr.Write(Information.Developer);
                wr.Write(Information.DeveloperAddress);
                wr.Write(Information.Shifr);
 
                wr.Close();
                fs.Close();
            }
        }
 
        private void informationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            InformationForm informationForm = new InformationForm();
            informationForm.ShowDialog();
        }
    }
}
0
kspower92
0 / 0 / 0
Регистрация: 06.02.2014
Сообщений: 13
06.02.2014, 21:02  [ТС] 6
Диалогов в меню Data будет несколько
0
Миниатюры
Как сериализовать и десериализовать значения элементов управления из всех диалогов через MainForm  
агерон
274 / 281 / 58
Регистрация: 12.10.2009
Сообщений: 1,112
07.02.2014, 13:18 7
Лучший ответ Сообщение было отмечено kspower92 как решение

Решение

Повторяю еще раз сперва логика программы потом ее интерфейс и никак иначе
1) реализуется объект бизнес логики Information с реализацией интерфейса INotifyPropertyChanged
2) реализуется механизм сериализации/десериализации состояния объекта бизнес - логики Information
3) реализуется интерфейс куда будет отображаться состояние объекта бизнес - логики Information
4) через механизм DataBindings и режим обновления источника данных DataSourceUpdateMode.OnPropertyChanged связываются поля бизнес объекта и интерфейсные элементы в двух стороннем порядке
5) через механизм сериализации/десериализации сохраняем/загружаем состояние источника с/на диск
6) Бинго!!!

P. S. программа писалась в MS Visual Studio 2010
1
Вложения
Тип файла: rar 1090575.rar (27.4 Кб, 18 просмотров)
kspower92
0 / 0 / 0
Регистрация: 06.02.2014
Сообщений: 13
07.02.2014, 13:39  [ТС] 8
Спасибо!!!
0
07.02.2014, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 13:39

Как сериализовать и десериализовать xml файл
Как сериализовать и десериализовать такой файл. Будет считвааться файл, в...

Как сериализовать/десериализовать одновременно список, элемент своего класса и переменную?
Здравствуйте! В моей программе есть примерно следующие переменные ...

Сериализовать и десериализовать ArrayList<T>
Подскажите пожалуйста , как можно сериализовать и десериализовать ArrayList&lt;T&gt;....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru