Как я могу сохранить состояние группы кнопок радио в моей программе?
У меня есть две группы переключателей (2 группы по 4 кнопки), которые я хотел бы сохранить проверенное состояние и загрузить проверенное состояние, как только программа / главная форма загружается. Радиокнопки НЕ находятся на главной форме.
Как я могу сделать это, используя Properties.Settings?
Код в форме "Предпочтения" выглядит следующим образом:
public string DataFormat, KeyboardFormat;
public void UpdateUserChoice(string date, string keyboard)
{
if (date == ddmmyyyy.Text)
ddmmyyyy.Checked = true;
else if (date == mmddyyyy.Text)
mmddyyyy.Checked = true;
else if (date == yyyyddmm.Text)
yyyyddmm.Checked = true;
else if (date == yyyymmdd.Text)
yyyymmdd.Checked = true;
//----------------------------------------------------------
if (keyboard == qwerty.Text)
qwerty.Checked = true;
else if (keyboard == qwertz.Text)
qwertz.Checked = true;
else if (keyboard == azerty.Text)
azerty.Checked = true;
else if (keyboard == dvorak.Text)
dvorak.Checked = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (ddmmyyyy.Checked)
DataFormat = ddmmyyyy.Text;
else if (mmddyyyy.Checked)
DataFormat = mmddyyyy.Text;
else if (yyyyddmm.Checked)
DataFormat = yyyyddmm.Text;
else if (yyyymmdd.Checked)
DataFormat = yyyymmdd.Text;
//--------------------------------------------------
if (qwerty.Checked)
KeyboardFormat = qwerty.Text;
else if (qwertz.Checked)
KeyboardFormat = qwertz.Text;
else if (azerty.Checked)
KeyboardFormat = azerty.Text;
else if (dvorak.Checked)
KeyboardFormat = dvorak.Text;
this.Close();
}
И код на MainForm:
private void DateStamp()
{
if (dateFormat.ToUpper() == "DD/MM/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "MM/DD/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/DD/MM")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/MM/DD")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
richTextBoxPrintCtrl1.SelectedText = currentDate;
private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
{
UserPreferences pref = new UserPreferences();
pref.UpdateUserChoice(dateFormat, keyboardFormat);
pref.ShowDialog();
dateFormat = pref.DataFormat;
keyboardFormat = pref.KeyboardFormat;
}
private void virtualKeyboardToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (keyboardFormat.ToUpper() == "QWERTY")
{
Virtual_Keyboard vKeyboard = new Virtual_Keyboard();
vKeyboard.Show();
}
else if (keyboardFormat.ToUpper() == "QWERTZ")
{
QWERTZ qwertz = new QWERTZ();
qwertz.Show();
}
else if (keyboardFormat.ToUpper() == "AZERTY")
{
AZERTY azerty = new AZERTY();
azerty.Show();
}
else if (keyboardFormat.ToUpper() == "DVORAK")
{
DVORAK dvorak = new DVORAK();
dvorak.Show();
}
}
Я хотел бы сохранить проверенное состояние переключателей (как показано на рисунке), чтобы при повторном открытии программы эти "настройки" также загружались. Как бы я этого достиг? Использование Properties.Settings, если это возможно.
Я создал две "Настройки". DatePreference и KeyboardPreference. Я не знаю, какого типа они должны быть. Если бы кто-то мог направить меня, я был бы очень благодарен Я новичок в программировании, поэтому спасибо за вашу помощь.
RadioButtons названы:
ddmmyyyy mmddyyyy yyyyddmm ггггммдд
qwerty qwertz азерты дворак
Спасибо за вашу помощь.
--РЕДАКТИРОВАТЬ--
Я забыл упомянуть, что это приложение WinForms.
3 ответа
Пример для даты (вы можете сделать то же самое для клавиатуры):
Может быть, вы можете создать перечисление следующим образом:
public enum DatePreference { dd_mm_yyyy, mm_dd_yyyy, yyyy_dd_mm, yyyy_mm_dd };
Установить в настройках DatePreference
как целое число
Для вашего кода формы предпочтения:
UpdateUserChoice:
if (Properties.Settings.Default.DatePreference == (int)DatePreference.dd_mm_yyyy)
ddmmyyyy.Checked = true;
button1_Click:
if (ddmmyyyy.Checked)
{
DataFormat = ddmmyyyy.Text;
Properties.Settings.Default.DatePreference = (int)DatePreference.dd_mm_yyyy;
}
Подумайте, чтобы сохранить изменения с Properties.Settings.Default.Save();
!
Для вашего основного кода формы:
if (Properties.Settings.Default.DatePreference == (int)DatePreference.dd_mm_yyyy)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
[...]
Я бы представлял значения в перечислении.
public enum AvailableKeyboardLayouts
{
DVORAK = 0,
QWERTY = 1,
QWERTZ = 2
}
Используя файл настроек, вы можете сохранить тип в виде строки или int. Используйте Enum.Parse для преобразования объекта
Сохранение и загрузка из файлов настроек просты:
Мой файл настроек - Settings.settings
Settings.Default.KeyboardPreference = AvailableKeyboardLayouts.DVORAK;
Settings.Default.Save();
Как насчет использования файла Resources.resx (зависит от проекта) Также вы можете использовать XML-файл для сохранения значений. Если у вас много настроек, вы можете использовать таблицу данных (названную, например, "Настройки"), поместить ее в набор данных и использовать SaveToXml и LoadFromXml для более быстрых результатов.