0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
1

Сохранение настроек программы

13.08.2015, 09:54. Показов 2206. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, в общим у меня в программе на кнопку создаются формы, на панели главной формы. Я в форме задаю значения TextBox,numericUpDown,ComboBox. Как мне реализовать сохранение данных каждой из созданных форм, а так же их количество?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2015, 09:54
Ответы с готовыми решениями:

Сохранение настроек программы
Необходимо сохранить некоторые настройки у программы при закрытии Напримеру нужно сохранять...

Сохранение настроек программы
Здравствуйте. Есть программа, в которой 3 чекбокса. Как сделать так, что если человек включил...

Сохранение настроек программы
Как сделать файл сохранения настроек программы? Например, что бы он сохранял такие данные, на...

Сохранение настроек программы
Как обычно сохраняют настройки программы(к примеру размеры формы) с помощью файла settings или с...

12
6 / 6 / 3
Регистрация: 23.05.2015
Сообщений: 45
13.08.2015, 09:56 2
SniF, Можно сохранять в параметрах Проект, Свойства name где name название проекта, Параметры, а можно сохранять в файл и потом считывать файл и менять значение стандартные на те что в файле, только считывание файла должно быть при Form_load
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
13.08.2015, 10:02  [ТС] 3
hi-tech, Мне нужен вариант со считыванием из файла, я так полагаю это реализуется только сохранением в XML в файл? И как понимать считывание файла должно быть при Form_load, оно же сразу при открытии будет запускать сохранённый файл? А мне нужно отдельно на кнопку загрузка.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
13.08.2015, 11:54 4
SniF,
сделайте класс серилизации со всеми нужными параметрами, когда приложение закрывается все параметры будете серилизовывать и сохранять в файл. когда загружаться то считывать из файла десерилизовывать в объект класса и спокойно дальше пользовать элементы. Плюсом вы получите гибкую настройку параметров. Можно попробывать вручную создавать ini файл и хранить все параметры там, но это муторно.

как бы я сделал описываем класс с настройками

C#
1
2
3
4
5
 public class settings 
    {
      public  string set1 { get; set; }
     public   int set2 { get; set; }
    }
при завершении
C#
1
2
3
4
5
6
7
var set = new settings();
               set.set1 = "настройка1";
               set.set2=2;
               StreamWriter stremwr = new StreamWriter("sett.xml");
               XmlSerializer xmls = new XmlSerializer(typeof(settings));
 
               xmls.Serialize(stremwr, set);
при загрузке
C#
1
2
3
4
5
XmlSerializer xmlser = new XmlSerializer(typeof(settings));
          StreamReader strerea = new StreamReader("sett.xml");
          settings sett = (settings)ser.Deserialize(strerea);
          var setting1 = sett.set1;
          var setting2 = sett.set2;
так быстрее и проще.
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
13.08.2015, 13:56  [ТС] 5
Andreyip, Просто у меня что-то вроде редактора сценариев, т.е. настройки форм это и есть сценарий который будет воспроизводиться, поэтому их может быть много и удобнее загружать разные с файла чем каждый раз менять. Поэтому мне и нужно , загрузка и сохранение, на кнопки.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
13.08.2015, 14:11 6
SniF, не важно как сохранять по кнопки или при загрузке. считывайте с файла как при загрузке, пишите как при завершении, для каждого сценария можно сделать разные файлы, при этом класс для хранения переменных будет 1.
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
13.08.2015, 14:27  [ТС] 7
Andreyip, это Я понимаю что, код который вы написали при загрузке и завершении,можно назначить на кнопки. Дело в том что у вас в коде заранее задан файл, т.е. если я нажму сохранить, я не создам файл сохранения, не задам ему путь и имя. Я так полагаю что написав вручную создавать , вы это и имели ввиду. Если возможно опишите немного и про создание вручную.
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
13.08.2015, 20:50 8
Цитата Сообщение от SniF Посмотреть сообщение
опишите немного и про создание вручную
когда то разбирался с сериализацией и видел видео, как раз по вашему вопросу.

https://www.youtube.com/watch?v=zv7ZkQwDEqM
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
13.08.2015, 21:14 9
Вопрос я понял так: есть форма, элементы на ней созданы программно, нужно ее сохранить. Правильно?

Я бы разбил задачу на две:

1. Быстро читаем все координаты всех объектов (независимо от типа):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            string[] name = new string[Controls.Count];     //  имя.
            
            int[] location_x = new int[Controls.Count];     //  координаты.
            int[] location_y = new int[Controls.Count];
 
            int[] size_height = new int[Controls.Count];    //  размеры.
            int[] size_width = new int[Controls.Count];
 
            int counter = 0;        //  счетчик.
 
            foreach (Control c in Controls)
            {
                name[counter] = c.Name;
                
                location_x[counter] = c.Location.X;
                location_y[counter] = c.Location.Y;
 
                size_height[counter] = c.Size.Width;
                size_width[counter] = c.Size.Height;
 
                counter++;
            }
2. Сохраняем все в файл. Всяких Reader'ов и Writer'ов в C# много, в простейшем случае можно сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (StreamWriter streamWriter = File.CreateText(saveFileDialog1.FileName)) 
                {
                    string separator = "|";
                    for (int i = 0; i < name.Length; i++)
                    {
                        streamWriter.WriteLine(name[i] + separator
                            + location_x[i] + separator + location_y[i] + separator
                            + size_width[i] + separator + size_height[i]
                            );
                    }
                }
            }
P.S. Возможно, в данном посте изобретен велосипед, и в C# есть штатная функция. Но я ее не знаю.
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
17.08.2015, 09:04  [ТС] 10
Zhavoronkov5, не совсем, есть главная форма , на ней еще одна(она может быть и не одна,она динамически создается на кнопку), а вот уже значения контролов этой формы надо сохранить.
Вложения
Тип файла: rar WindowsFormsApplication4.rar (141.2 Кб, 10 просмотров)
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
17.08.2015, 18:10 11
То же самое, в принципе. Только меняешь Controls на form1.Controls, и делаешь форму 1 доступной для той кнопки, откуда будешь производить сохранение.
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
    public partial class Form2 : Form   //  главная форма, вызываемая при старте программы.
    {
 
        Form1 form1;        //  вторая форма.
 
        public Form2()
        {
            InitializeComponent();
        }
 
        //  Первая кнопка создаст новую форму form1.
        private void button1_Click(object sender, EventArgs e)
        {
            form1 = new Form1();
            form1.Show();
        }
 
        //  Вторая кнопка сохранит форму form1 в файл.
        private void button2_Click(object sender, EventArgs e)
        {
            string[] name = new string[form1.Controls.Count];       //  имя.
 
            int[] location_x = new int[form1.Controls.Count];       //  координаты.
            int[] location_y = new int[form1.Controls.Count];
 
            int[] size_height = new int[form1.Controls.Count];  //  размеры.
            int[] size_width = new int[form1.Controls.Count];
 
            int counter = 0;        //  счетчик.
 
 
            foreach (Control c in form1.Controls)
            {
                name[counter] = c.Name;
 
                location_x[counter] = c.Location.X;
                location_y[counter] = c.Location.Y;
 
                size_height[counter] = c.Size.Width;
                size_width[counter] = c.Size.Height;
 
                counter++;
            }
 
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (StreamWriter streamWriter = File.CreateText(saveFileDialog1.FileName))
                {
                    string separator = "|";
                    for (int i = 0; i < name.Length; i++)
                    {
                        streamWriter.WriteLine(name[i] + separator
                            + location_x[i] + separator + location_y[i] + separator
                            + size_width[i] + separator + size_height[i]
                            );
                    }
                }
            }
 
        }
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
19.08.2015, 09:23  [ТС] 12
Zhavoronkov5, у меня получается что сохраняет координаты только первой созданной формы,

label6|27|107|13|84
textBox1|111|104|20|22
label5|57|41|13|54
label4|-2|41|13|50
numericUpDown4|60|78|20|33
numericUpDown3|60|57|20|33
comboBox1|0|0|21|185
label3|110|80|13|26
label2|108|59|13|28
numericUpDown2|0|78|20|33
numericUpDown1|0|57|20|33
button3|150|73|41|35
button2|150|31|41|35

У меня просто коллекция форм и нужно обратиться к ней, но как?
Я обращаюсь в таком виде formList.ForEach(x => x.timer1.Enabled = !x.timer1.Enabled);
Но нет.
На всякий случай скину как вывожу форму.
C#
1
2
3
4
5
6
7
form1 = new Form1(this);
            form1.TopLevel = false;
            form1.Parent = panel21;
            form1.MaximumSize = new System.Drawing.Size(201, 181);
            form1.Dock = (DockStyle.Top | DockStyle.Left);
            formList.Add(form1);
            form1.Show();
И как мне потом загрузить сохранённый файл, делал через OpenFile тоже не то.
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
19.08.2015, 22:33 13
C#
1
2
3
4
5
6
7
8
9
10
11
12
            foreach (Form1 form in formList)
            {
                foreach (Control control in form.Controls)
                {
                    location_x[counter] = control.Location.X;
                    location_y[counter] = control.Location.Y;
                    
                    //  ...
 
                    counter++;
                }
            }
Вообще эта Ваша идея с массивом форм мне сильно не нравится. Я думал, у Вас там что-то типа пользовательского конструктора форм, а тут просто задаются параметры какой-то мишени.

Я бы создал класс Target, там бы задавал все параметры, сделал бы в нем метод SaveTargetToFile(path) и OpenTargetFromFile(path). Потом бы создал List<Target>. А форма была бы одна и лишь отражала бы параметры каждой мишени.

Хотя глубоко в код не вникал, признаюсь. Тяжело это, когда во всей проге ни одной строки комментариев.
0
19.08.2015, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2015, 22:33
Помогаю со студенческими работами здесь

Сохранение настроек интерфейса программы
Доброго дня, коллеги! Есть такой вопрос, как оптимально сохранить настройки ...

Сохранение настроек программы при выходе
Не работает сохранение настроек программы при выходе, собственно код: p.s. заранее спасибо за...

Сохранение настроек программы (цвет фона формы, в частности)
Создана форма. На ней одна кнопка. Она описана ниже. ColorDialog diag=new ColorDialog(); ...

Сохранение настроек
Добрый день! Подскажите как можно сохранить настройки окна, меню и т.д. и, что бы при запуске...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru