Вы должны войти, чтобы создавать сообщения и темы.

Сохранение всех данных с контролов на форме

На форме находятся различные контролы: текстбоксы, комбобоксы, радиокнопки и др. Хотелось бы сохранить установленные в них значения для последующей загрузки, чтобы заново не повторять ввод значений после каждой загрузки программы, что-то типа установки типовых параметров программы после ее загрузки. При этом после изменения настроек хотелось бы иметь возможность их сохранения в файле. Читал про сериализацию, но никогда ей не пользовался и опыта сохранения настроек программы не имею. Помогите, пожалуйста, решить эту задачу (сериализацией или может быть есть другие способы сохранения настроек). Проект разместил


Комментарий модератора:
У нас принято здороваться.

Добрый вечер 🖐
Если Вам нужно просто, чтобы программа помнила всё, что Вы в ней делаете, то лучше все настройки хранить в Реестре. Урок на канале есть. Также преимущество в том, что работать будет быстрее.

Здравствуйте!
У меня другая задача. Мне нужно запускать несколько копий программы, причем каждая из копий должна использовать различные настройки программы. Поясню: есть установки, подключенные к одному АЦП. Запускается одна копия программы, выбираются каналы АЦП для первой установки (к каналам подключены датчики), имя файла записи результатов, директория для записи файлов и др. Затем запускается вторая копия программы (при необходимости работы второй установки), выбираются подключенные каналы АЦП для второй установки и другие параметры. Каналов у АЦП 16, каждая установка подключена к 4 каналам, т.е. установок может быть до четырех. Последовательность включения установок заранее не известна. Исходя из условий задачи я решил, что подходит загрузка файлов с настройками для каждой установки. Планировалось так: запускаю программу, настраиваю ее для одной установки, запускаю считывание данных с АЦП, сохраняю настройки. То же для других установок.

Добрый день!

Создаёте класс cо свойствами, которые будут хранить значения контролов и помечаете его атрибутом [Serializable]

Класс

[Serializable]
public class Preset
{
    public bool CheckBox1 { get; set; }
    public bool CheckBox2 { get; set; }
    public bool CheckBox3 { get; set; }
    public bool RadioButton1 { get; set; }
    public bool RadioButton2 { get; set; }
    public bool RadioButton3 { get; set; }
    public decimal NnumericUpDown1 { get; set; }
    public decimal NnumericUpDown2 { get; set; }
    public decimal NnumericUpDown3 { get; set; }
    public string RichTextBox1 { get; set; }
    public string ComboBox1 { get; set; }
    public string TextBox1 { get; set; }
}

Для сохранения данных в файл, создаёте объект этого класса, присваиваете свойствам значения контролов и сериализируете

Сохранение в файл

Stream myStream = saveFileDialog.OpenFile();
BinaryFormatter serializer = new BinaryFormatter();

Preset pres = new Preset
{
    CheckBox1 = checkBox1.Checked,
    CheckBox2 = checkBox2.Checked,
    CheckBox3 = checkBox3.Checked,
    RadioButton1 = radioButton1.Checked,
    RadioButton2 = radioButton2.Checked,
    RadioButton3 = radioButton3.Checked,
    NnumericUpDown1 = numericUpDown1.Value,
    NnumericUpDown2 = numericUpDown2.Value,
    NnumericUpDown3 = numericUpDown3.Value,
    RichTextBox1 = richTextBox1.Text,
    ComboBox1 = comboBox1.Text,
    TextBox1 = textBox1.Text
};

serializer.Serialize(myStream, pres);

Для считывания данных десериализируете объект и присваиваете значения к контролам

Считывание данных

Stream myStream = openFileDialog.OpenFile();
BinaryFormatter deserializer = new BinaryFormatter();

Preset pres = (Preset)deserializer.Deserialize(myStream);

checkBox1.Checked = pres.CheckBox1;
checkBox2.Checked = pres.CheckBox2;
checkBox3.Checked = pres.CheckBox3;
radioButton1.Checked = pres.RadioButton1;
radioButton2.Checked = pres.RadioButton2;
radioButton3.Checked = pres.RadioButton3;
numericUpDown1.Value = pres.NnumericUpDown1;
numericUpDown2.Value = pres.NnumericUpDown2;
numericUpDown3.Value = pres.NnumericUpDown3;
richTextBox1.Text = pres.RichTextBox1;
comboBox1.Text = pres.ComboBox1;
textBox1.Text = pres.TextBox1;

Ваш проект

Лайкнули XpucT и Сергей
XpucTСергей

Здравствуйте!
Спасибо большое за подробные объяснения и переделанный проект, все получилось. В очередной раз убедился в мощи C#, который позволяет с помощью  нескольких строк кода сохранить много информации.

Лайкнул Сергей
Сергей