Как упростить код для значений параметров, передаваемых между основной и дочерней формами - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть класс, в котором хранятся настройки для моего приложения.Это экземпляр, когда приложение.запускается и сохраняется, когда приложение.закрывается.

public class Settings
{
    public bool showPrivacyPageOnBlogs;
    public bool showTermsPageOnBlogs;
    public bool showDisclosurePageOnBlogs;
}

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

Код для обработки всплывающего окна выглядит следующим образом:

// Horrible code ahead
private void pagesSettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    pagesSettingsForm.showPrivacyPageOnBlogs = settings.showPrivacyPageOnBlogs;
    pagesSettingsForm.showTermsPageOnBlogs = settings.showTermsPageOnBlogs;
    pagesSettingsForm.showDisclosurePageOnBlogs = settings.showDisclosurePageOnBlogs;
    if (pagesSettingsForm.ShowDialog() == DialogResult.OK)
    {
        settings.showPrivacyPageOnBlogs = pagesSettingsForm.showPrivacyPageOnBlogs;
        settings.showTermsPageOnBlogs = pagesSettingsForm.showTermsPageOnBlogs;
        settings.showDisclosurePageOnBlogs = pagesSettingsForm.showDisclosurePageOnBlogs;
    }
    pagesSettingsForm.Dispose();
}

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

Ответы [ 3 ]

2 голосов
/ 27 ноября 2011

Просто сделайте так, чтобы форма выставляла свойство типа Settings с помощью getter и setter. Это делает размещенный вами фрагмент простым, без каких-либо изменений, необходимых при добавлении участников в Настройки. Усилие теперь переходит к реализации формы. PropertyGrid - это универсальный редактор объектов, трудно ли его использовать в вашем случае, трудно предположить.

2 голосов
/ 27 ноября 2011

Хотя я не пробовал этого, но я твердо верю, что Automapper может справиться с этим.Я думаю, это может сделать ваш код таким:

// Horrible code ahead
private void pagesSettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    Mapper.Map(settings, pagesSettingsForm);
    if (pagesSettingsForm.ShowDialog() == DialogResult.OK)
        Mapper.Map(pagesSettingsForm, settings);
    pagesSettingsForm.Dispose();
}    

PS: я знаю, что вы сказали, что код ужасен, но я не могу не упомянуть, что вы используете форму, котораясоздан в каком-то другом коде - что неправильно, ИМО.

1 голос
/ 27 ноября 2011

Использовать словарь

Dictionary<String,dynamic> 

было бы неплохо, так как это откладывало бы ввод

Таким образом, вы добавляете / устанавливаете настройки в своем классе настроек для всех настроек, которые вам нужны в приложении.У вашей формы есть свой экземпляр, но только с теми, которые ему нужны.Тогда нужно просто отсканировать form.settings для версий с одинаковыми именами в переданных настройках и перезаписать их.

...