C# 如何简化在主窗体和子窗体之间传递的设置值的代码

C# 如何简化在主窗体和子窗体之间传递的设置值的代码,c#,.net,winforms,refactoring,childwindow,C#,.net,Winforms,Refactoring,Childwindow,我有一个类存储我的应用程序的设置。当应用程序启动时,它被实例化。在应用程序运行时运行并保存。关闭 public class Settings { public bool showPrivacyPageOnBlogs; public bool showTermsPageOnBlogs; public bool showDisclosurePageOnBlogs; } 还有一个弹出窗口,显示复选框,使用弹出窗口的公共属性设置这些值 处理弹出窗口的代码如下所示: // Hor

我有一个类存储我的应用程序的设置。当应用程序启动时,它被实例化。在应用程序运行时运行并保存。关闭

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();
}

在我的应用程序中。还有几个参数正在以这种方式处理,因此我想知道是否有某种方法可以简化此代码,以枚举设置的名称,并允许将来添加其他参数。

虽然我没有尝试过,但我坚信它可以处理此问题。我认为这可能会使您的代码如下所示:

// 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();
}    
注:我知道你说代码很糟糕,但我不能不提到你正在处理一个在其他代码中实例化的表单,这是错误的,我想。

使用字典

Dictionary<String,dynamic> 
字典
这会很好,因为它会推迟打字

因此,您可以在设置类中添加/设置所有应用程序所需的设置。 表单有它自己的实例,但只有它需要的实例。
然后,只需在传递的setingsw中扫描相同命名版本的form.settings并覆盖它们。

只需让表单使用getter和setter公开设置类型的属性即可。这使您发布的代码片段变得简单,在向设置添加成员时无需进行任何更改。现在,工作转移到表单实现。PropertyGrid是一个通用的对象编辑器,很难猜测它在您的情况下是否足够可用。

Hi,我在复制和粘贴代码时意外地删除了作为方法一部分的代码实例化行。有点像您所建议的,我只是将对设置对象的引用传递给表单。当单击ok按钮时,表单代码会更新设置。我将查看PropertyGrid。谢谢