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

Как сохранить настройки на форме?

02.07.2017, 21:15. Показов 13612. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В приложении на форме могу изменять размеры DataGridView с помощью полосок Split и ширину колонок. Как сохранить сделанные изменения, чтобы при следующем запуске программы иметь уже однажды настроенный вид формы? Проект прикрепил.
Вложения
Тип файла: zip NoteBookForum.zip (29.8 Кб, 38837 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2017, 21:15
Ответы с готовыми решениями:

Как сохранить настройки dataGridView?
Программа выводит таблицу БД в dataGridView. Пользователь может менять размеры колонок, очередность, подписи колонок и т.п. Какие есть...

Как сохранить свои настройки в форме
1-й пример. Мне нужно чтоб ширина столбика в табличной форме была уже или шире, я меняю ширину, потом выхожу из формы, захожу в нее снова и...

Как сохранить настройки?
Всем привет, это снова я) У меня очень важный вопрос! я врубил комп и он сам все нашел, но просит перезагрузку, после которой все станет...

14
6 / 6 / 4
Регистрация: 02.06.2017
Сообщений: 20
02.07.2017, 21:22
При закрытии программы сохранять настройки программы в системный реестр или в файл. При открытии считывать эти настройки.
0
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
03.07.2017, 12:53  [ТС]
А какие классы (функции) C# нужны для этого? Чтобы не сохранять каждую настройку, а сохранить все настройки на форме с минимальным количеством кода? Хорошо бы примерчик сохранения - считывания настроек формы
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.07.2017, 14:02
Лучший ответ Сообщение было отмечено spirid1990 как решение

Решение

Цитата Сообщение от spirid1990 Посмотреть сообщение
Как сохранить сделанные изменения, чтобы при следующем запуске программы иметь уже однажды настроенный вид формы?
Смотрите в сторону настроек приложения (файл Settings.Settings в папке Properties) и привязку этих настроек к контролам (свойство ApplicationSettings).

NoteBook.zip
1
3 / 3 / 3
Регистрация: 02.07.2015
Сообщений: 35
04.07.2017, 03:31
Смотрите в сторону настроек приложения...
Сохранение ширины колонки, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.Columns[0].Width = Convert.ToInt32(Properties.Settings.Default.width);
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Properties.Settings.Default.width = this.dataGridView1.Columns[0].Width.ToString();
            Properties.Settings.Default.Save();
        }
    }
}
Добавлено через 22 минуты
Немного ерунду написал постом ранее, в настройках Properties.Settings (проект > свойства проекта > параметры) ширина width должна быть int, тогда код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.Columns[0].Width = Properties.Settings.Default.width;
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Properties.Settings.Default.width = this.dataGridView1.Columns[0].Width;
            Properties.Settings.Default.Save();
        }
    }
}
0
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
04.07.2017, 10:48  [ТС]
kolorogur, а как Вы создавали файл Settings и app. Просто добавили в файл Seggings нужные параметры или можно как-то на форме указать, какие контролы и их параметры будут сохраняться? А параметр UpgradeRequred относится только к вышестоящему параметру или по всем параметрам?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
04.07.2017, 11:04
Цитата Сообщение от spirid1990 Посмотреть сообщение
как Вы создавали файл Settings...
можно как-то на форме указать, какие контролы и их параметры будут сохраняться?
В панели свойств у каждого контрола есть отдельный пункт ApplicationSettings. И вот в этом пункте в разделе PropertyBindings ты сопоставляешь свойство контрола и соответствующую настройку.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.07.2017, 11:15
Цитата Сообщение от spirid1990 Посмотреть сообщение
а как Вы создавали файл Settings и app.
Они автоматически создаются когда вы создаете проект.

Цитата Сообщение от spirid1990 Посмотреть сообщение
Просто добавили в файл Seggings нужные параметры или можно как-то на форме указать, какие контролы и их параметры будут сохраняться?
Сначала открыл файл Settings.settings и добавил туда необходимые настройки, которые надо сохранять.
Потом привязал эти настройки к элементам управления на форме методом, указанным выше товарищем ViterAlex.

Цитата Сообщение от spirid1990 Посмотреть сообщение
А параметр UpgradeRequred относится только к вышестоящему параметру или по всем параметрам?
Эту настройку я добавил "забегая вперед", чтобы настройки не терялись между апгрейдами на новые версии приложения.
Непосредственно к вашей проблеме эта настройка отношения не имеет, можете ее удалить, если не планируете выпускать несколько версий софта.
0
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
05.07.2017, 07:35  [ТС]
Я попробовал внести в настройки изменение ширины splitter2. К сожалению, ничего не получилось. Возможность установить изменение этого параметра не нашел в ApplicationSettings для splitter2. Не все параметры формы можно сохранять, а только те, которые появляются в поле выбора ApplicationSettings, например Size?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.07.2017, 08:07
spirid1990, можно пользоваться файлом конфигурации и своей кастомной секцией настроек.
Создали класс для хранения, пометили его атрибутами, создали секцию в файле конфигурации и там храним/считываем/перезаписываем когда требуется.
0
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
05.07.2017, 16:08  [ТС]
А как создавать кастомную секцию настроек? Можно какой-нибудь простенький пример, например для моего проекта (или др.). Думаю, не мне одному это будет интересно.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.07.2017, 02:36
Цитата Сообщение от spirid1990 Посмотреть сообщение
Я попробовал внести в настройки изменение ширины splitter2.
Ширина сплиттера — скорее всего не то, что вам нужно. Изменяется ширина контрола слева или справа от сплиттера. Ее и надо биндить.

Цитата Сообщение от spirid1990 Посмотреть сообщение
Возможность установить изменение этого параметра не нашел в ApplicationSettings для splitter2.
Справа от (Property Bindings) есть кнопка, нажав на которую можно просмотреть все свойства элемента.
Тип привязываемого свойства должен соответствовать типу настройки. В данном случае это свойство и тип Size.

По поводу секций — не заморачивайтесь пока с ними. Это очень удобная вещь, но используется для организации настроек. Вам там пока организовывать нечего.
0
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
08.07.2017, 09:14  [ТС]
Мне не очень нравится пользоваться мастерами, я плохо понимаю код, который они создают, и в случае проблем вряд ли в нем разберусь. Когда что-либо делаю вручную, то лучше понимаю, за что отвечает та или иная конструкция. В моем случае DataGridView изначально не содержит колонок, я их создаю сам. Поэтому наверняка в будущем понадобится устанавливать ширину колонок в DataGridView и запоминать другие настройки контролов формы, которые будут не только создаваться в конструкторе формы, но и создаваться вручную. В этом случае, как я понимаю, использование кнопки Property Bindings в конструкторе невозможно. Поэтому все-таки хочется знать, как делаются пользовательские секции, желательно на каком-нибудь интересном примере.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
09.07.2017, 09:51
Лучший ответ Сообщение было отмечено spirid1990 как решение

Решение

Цитата Сообщение от spirid1990 Посмотреть сообщение
Когда что-либо делаю вручную, то лучше понимаю, за что отвечает та или иная конструкция.
Верный подход, на мой взгляд.
Цитата Сообщение от spirid1990 Посмотреть сообщение
хочется знать, как делаются пользовательские секции
Это просто. Например, нам нужно сохранить, а потом загрузить имя и возраст пользователя. Итак, вот код простой формы (две кнопки, два текстовых поля, две метки). Мы определяем свой класс, унаследованный от ConfigurationSection, и в нем определяем свои свойства, помеченные атрибутом ConfigurationProperty.
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
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.Configuration;
 
namespace ConfigSectionDemo {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
            loadBtn.Click += new EventHandler(loadBtn_Click);
            saveBtn.Click += new EventHandler(saveBtn_Click);
        }
 
        void saveBtn_Click(object sender, EventArgs e) {
            Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            CustomSection section = cfg.GetSection("customSection") as CustomSection;
            if (section != null) {
                section.Name = userNameTxt.Text;
                section.Age = int.Parse(userAgeTxt.Text);
                cfg.Save();
            }
        }
 
        void loadBtn_Click(object sender, EventArgs e) {
            Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            CustomSection section = cfg.GetSection("customSection") as CustomSection;
            if (section != null) {
                userNameTxt.Text = section.Name;
                userAgeTxt.Text = section.Age.ToString();
            }
        }
    }
    public class CustomSection : ConfigurationSection {
        [ConfigurationProperty("name", IsRequired=false)]
        public string Name {
            get { return (string)base["name"]; }
            set { base["name"] = value; }
        }
        [ConfigurationProperty("age", IsRequired=false)]
        public int Age {
            get { return (int)base["age"]; }
            set { base["age"] = value; }
        }
    }
}
Далее добавляем в проект файл конфигурации и прописываем в нем нашу секцию, как в примере ниже.
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="customSection" type="ConfigSectionDemo.CustomSection, ConfigSectionDemo"/>
  </configSections>
  <customSection name="" age=""/>
</configuration>
Вот, собственно, и все. Теперь мы можем, когда нужно, записать или прочитать из нашей секции данные. Как это делается, показано в коде обработчиков кнопок. Хочу обратить внимание, что в отладке запись не срабатывает, так что для проверки проект нужно запускать через Ctrl+F5 (ну или просто сам исполняемый файл из папки приложения).
В прикрепленном архиве сам проект, код которого я показал выше.
Вложения
Тип файла: rar ConfigSectionDemo.rar (41.1 Кб, 64 просмотров)
3
1 / 1 / 1
Регистрация: 02.07.2017
Сообщений: 18
15.07.2017, 13:11  [ТС]
Спасибо большое за ответ и проект!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.07.2017, 13:11
Помогаю со студенческими работами здесь

Как сохранить настройки в программе
Допустим я сделал программу состоящую из одного exe, на форме только один компонент Label1 После первого запуска Label1.Caption:='1';...

Как сохранить настройки среды
В меню File-&gt;Change dir... изменяю текущий каталог, но после перезапуска среды текущим опять выбирается папка BIN. Как сделать так, чтобы...

Как сохранить настройки iptables?
дайте ссылку на свежую инфу про iptabes . Вот это http://www.opennet.ru/docs/RUS/iptables/ читаю, но там , кажется, старое. Например,...

Как сохранить пользовательские настройки?
Здрасте. В частности, нужно сохранить TextBox, то есть - при запуске приложения - загружает сохраненный текст. Пытался что-то...

Как сохранить настройки в приложении?
Как сохранить настройки в приложении?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru