Сохранение всех данных с контролов на форме
Цитата: Алексей от 11.04.2021, 19:08На форме находятся различные контролы: текстбоксы, комбобоксы, радиокнопки и др. Хотелось бы сохранить установленные в них значения для последующей загрузки, чтобы заново не повторять ввод значений после каждой загрузки программы, что-то типа установки типовых параметров программы после ее загрузки. При этом после изменения настроек хотелось бы иметь возможность их сохранения в файле. Читал про сериализацию, но никогда ей не пользовался и опыта сохранения настроек программы не имею. Помогите, пожалуйста, решить эту задачу (сериализацией или может быть есть другие способы сохранения настроек). Проект разместил
[MNotice]У нас принято здороваться.[/MNotice]
На форме находятся различные контролы: текстбоксы, комбобоксы, радиокнопки и др. Хотелось бы сохранить установленные в них значения для последующей загрузки, чтобы заново не повторять ввод значений после каждой загрузки программы, что-то типа установки типовых параметров программы после ее загрузки. При этом после изменения настроек хотелось бы иметь возможность их сохранения в файле. Читал про сериализацию, но никогда ей не пользовался и опыта сохранения настроек программы не имею. Помогите, пожалуйста, решить эту задачу (сериализацией или может быть есть другие способы сохранения настроек). Проект разместил
Комментарий модератора:
У нас принято здороваться.
Цитата: Сергей от 11.04.2021, 19:30Добрый вечер 🖐
Если Вам нужно просто, чтобы программа помнила всё, что Вы в ней делаете, то лучше все настройки хранить в Реестре. Урок на канале есть. Также преимущество в том, что работать будет быстрее.
Добрый вечер 🖐
Если Вам нужно просто, чтобы программа помнила всё, что Вы в ней делаете, то лучше все настройки хранить в Реестре. Урок на канале есть. Также преимущество в том, что работать будет быстрее.
Цитата: Алексей от 12.04.2021, 09:51Здравствуйте!
У меня другая задача. Мне нужно запускать несколько копий программы, причем каждая из копий должна использовать различные настройки программы. Поясню: есть установки, подключенные к одному АЦП. Запускается одна копия программы, выбираются каналы АЦП для первой установки (к каналам подключены датчики), имя файла записи результатов, директория для записи файлов и др. Затем запускается вторая копия программы (при необходимости работы второй установки), выбираются подключенные каналы АЦП для второй установки и другие параметры. Каналов у АЦП 16, каждая установка подключена к 4 каналам, т.е. установок может быть до четырех. Последовательность включения установок заранее не известна. Исходя из условий задачи я решил, что подходит загрузка файлов с настройками для каждой установки. Планировалось так: запускаю программу, настраиваю ее для одной установки, запускаю считывание данных с АЦП, сохраняю настройки. То же для других установок.
Здравствуйте!
У меня другая задача. Мне нужно запускать несколько копий программы, причем каждая из копий должна использовать различные настройки программы. Поясню: есть установки, подключенные к одному АЦП. Запускается одна копия программы, выбираются каналы АЦП для первой установки (к каналам подключены датчики), имя файла записи результатов, директория для записи файлов и др. Затем запускается вторая копия программы (при необходимости работы второй установки), выбираются подключенные каналы АЦП для второй установки и другие параметры. Каналов у АЦП 16, каждая установка подключена к 4 каналам, т.е. установок может быть до четырех. Последовательность включения установок заранее не известна. Исходя из условий задачи я решил, что подходит загрузка файлов с настройками для каждой установки. Планировалось так: запускаю программу, настраиваю ее для одной установки, запускаю считывание данных с АЦП, сохраняю настройки. То же для других установок.
Цитата: Вася от 14.04.2021, 16:47Добрый день!
Создаёте класс cо свойствами, которые будут хранить значения контролов и помечаете его атрибутом [Serializable]
[spoiler title="Класс"][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; } }[/spoiler]
Для сохранения данных в файл, создаёте объект этого класса, присваиваете свойствам значения контролов и сериализируете
[spoiler title="Сохранение в файл"]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);[/spoiler]
Для считывания данных десериализируете объект и присваиваете значения к контролам
[spoiler title="Считывание данных"]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;[/spoiler]
Добрый день!
Создаёте класс 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;
Цитата: Алексей от 17.04.2021, 11:42Здравствуйте!
Спасибо большое за подробные объяснения и переделанный проект, все получилось. В очередной раз убедился в мощи C#, который позволяет с помощью нескольких строк кода сохранить много информации.
Здравствуйте!
Спасибо большое за подробные объяснения и переделанный проект, все получилось. В очередной раз убедился в мощи C#, который позволяет с помощью нескольких строк кода сохранить много информации.