.NET WinForms PropertyBinding - PullRequest
       16

.NET WinForms PropertyBinding

0 голосов
/ 05 августа 2011

У меня есть WinForm с строкой меню, меню и пунктом меню (называемым BlaBlub).
пункт меню имеет CheckOnClick = True и (ApplicationSettings)->(PropertyBindings)->Checked, сопоставленные с настройкой SomeBool (тип bool, scope user,начальное значение = false)

значение правильно считывается из файла настроек (я использую метку, чтобы проверить его, а также пункт меню выбирается / отменяется, когда я делаю изменения в файле между сессиями).

Однако, используя следующий код, я не смог открыть приложение, щелкнуть по пункту меню и сохранить измененное значение обратно в файл

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Properties.Settings.Default.Save();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool);
    }

Мне удалось сохранить значение обратнов файл, используя следующий код, но так как это не кажется идиоматическим подходом, я все же ищу некоторый взгляд на то, как это сделать.

    private void blaBlubToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
    {
        Properties.Settings.Default.SomeBool = blaBlubToolStripMenuItem.Checked;
    }

1 Ответ

1 голос
/ 05 августа 2011

Вы сказали:

значение правильно считывается из файла настроек

Однако, исходя из представленного кода, это не будет правильным, потому что при загрузке вы не устанавливаете проверенное состояние. Вместо этого, я думаю, что ваше тестирование показывает, что первоначальное постоянное значение настройки (ложное) также является состоянием по умолчанию «Проверено» для пункта меню.

Следовательно, вы также должны инициализировать элемент управления, добавив:

private void Form1_Load(object sender, EventArgs e)
{
    label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool);
    blaBlubToolStripMenuItem.Checked = Properties.Settings.Default.SomeBool;
}

Примечание: Обычно я бы сказал вам использовать привязку данных, но вы не можете, потому что я считаю, что MenuItem не поддерживают это.

...