Как я могу сохранить состояние группы кнопок радио в моей программе?

У меня есть две группы переключателей (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 для более быстрых результатов.

Другие вопросы по тегам