Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15

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

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

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

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

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

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

12
 Аватар для hi-tech
6 / 6 / 3
Регистрация: 23.05.2015
Сообщений: 45
13.08.2015, 09:56
SniF, Можно сохранять в параметрах Проект, Свойства name где name название проекта, Параметры, а можно сохранять в файл и потом считывать файл и менять значение стандартные на те что в файле, только считывание файла должно быть при Form_load
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
13.08.2015, 10:02  [ТС]
hi-tech, Мне нужен вариант со считыванием из файла, я так полагаю это реализуется только сохранением в XML в файл? И как понимать считывание файла должно быть при Form_load, оно же сразу при открытии будет запускать сохранённый файл? А мне нужно отдельно на кнопку загрузка.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
13.08.2015, 11:54
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  [ТС]
Andreyip, Просто у меня что-то вроде редактора сценариев, т.е. настройки форм это и есть сценарий который будет воспроизводиться, поэтому их может быть много и удобнее загружать разные с файла чем каждый раз менять. Поэтому мне и нужно , загрузка и сохранение, на кнопки.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
13.08.2015, 14:11
SniF, не важно как сохранять по кнопки или при загрузке. считывайте с файла как при загрузке, пишите как при завершении, для каждого сценария можно сделать разные файлы, при этом класс для хранения переменных будет 1.
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 15
13.08.2015, 14:27  [ТС]
Andreyip, это Я понимаю что, код который вы написали при загрузке и завершении,можно назначить на кнопки. Дело в том что у вас в коде заранее задан файл, т.е. если я нажму сохранить, я не создам файл сохранения, не задам ему путь и имя. Я так полагаю что написав вручную создавать , вы это и имели ввиду. Если возможно опишите немного и про создание вручную.
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
13.08.2015, 20:50
Цитата Сообщение от SniF Посмотреть сообщение
опишите немного и про создание вручную
когда то разбирался с сериализацией и видел видео, как раз по вашему вопросу.

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

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

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  [ТС]
Zhavoronkov5, не совсем, есть главная форма , на ней еще одна(она может быть и не одна,она динамически создается на кнопку), а вот уже значения контролов этой формы надо сохранить.
Вложения
Тип файла: rar WindowsFormsApplication4.rar (141.2 Кб, 10 просмотров)
0
 Аватар для Zhavoronkov5
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
17.08.2015, 18:10
То же самое, в принципе. Только меняешь 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  [ТС]
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
 Аватар для Zhavoronkov5
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
19.08.2015, 22:33
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2015, 22:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru