重置部分应用程序设置

时间:2016-09-07 10:26:32

标签: c# .net winforms settings application-settings

所以,我有一个名为Preferences的Form,其中包含TabControl。此TabControl包含多个TabPages(常规,高级,其他,...),其中包含很少的组合框,复选框和标签。 TabPage中的每个控件都分配了应用程序设置属性绑定(也就是说它们显示已保存的用户设置,用户可以更改它们等等)。

我知道有一种方法可以重置所有设置(Properties.Settings.Default.Reset();),但有没有办法只重置一个TabPage内的设置?

我的解决方案是在TabPage中通过控件迭代,检查它是否是组合框,标签等,然后将其值重置为默认值,但是有一个“oneliner”解决方案吗?

3 个答案:

答案 0 :(得分:0)

 TabPage page = aTabControl.SelectedTab;

        var controls = page.Controls;

        foreach (var control in controls)
        {
            //do stuff
        }

答案 1 :(得分:0)

试试这个:

 private void button2_Click(object sender, EventArgs e)
    {
        TabPage page = tabControl1.SelectedTab;
        var controls = page.Controls;
        foreach (var control in controls)
        {               
            if(control is TextBox)
            {
              //do stuff
            }    
            if(control is ComboBox )
            {
                ComboBox comboBox = (ComboBox)control;
                if (comboBox.Items.Count > 0)
                    comboBox.SelectedIndex = 0;
                comboBox.Text = string.Empty;
            }                
        }
    }

答案 2 :(得分:0)

ApplicationSettings没有内置支持来重置某些属性。但要解决此问题,您可以使用以下任一选项:

  1. 创建一个方法,重置TabPage

    的所有绑定控件
  2. 使用支持Designer的多个设置文件

  3. 选项1 - 创建一个重置TabPage

    的所有绑定控件的方法

    您可以创建一个查看标签页控件的方法,并检查它是否与应用程序设置绑定,在设置中查找属性并将其值重置为默认值。然后,您可以重置TebPage宽度一行代码的设置:ResetSettings(tabPage1);

    以下是方法:

    private void ResetSettings(TabPage tabPage)
    {
        foreach (Control c in tabPage.Controls)
        {
            foreach (Binding b in c.DataBindings)
            {
                if (b.DataSource is ApplicationSettingsBase)
                {
                    var settings = (ApplicationSettingsBase)b.DataSource;
                    var key = b.BindingMemberInfo.BindingField;
                    var property = settings.Properties[key];
                    var defaultValue = property.DefaultValue;
                    var type = property.PropertyType;
                    var value = TypeDescriptor.GetConverter(type).ConvertFrom(defaultValue);
                    settings[key] = value;
                    //You can also save settings
                    settings.Save();
                }
            }
        }
    }
    

    选项2 - 使用支持Designer的多个设置文件

    如果使用单个设置文件的原因是设计人员支持,您应该知道您也可以使用多个设置文件获得设计器支持。然后,您可以使用不同的设置文件并分别重置每个设置组。您可以使用以下代码将它们封装在一个类中:

    public static class MySettings
    {
        public static Sample.General General
        {
            get { return Sample.General.Default; }
        }
        public static Sample.Advanced Advanced 
        {
            get { return Sample.Advanced.Default; }
        }
        public static void ResetAll()
        {
            General.Reset();
            Advanced.Reset();
        }
        public static void SaveAll()
        {
            General.Save();
            Advanced.Save();
        }
    }
    

    要重置设置组,只需拨打MySettings.General.Reset();

    即可

    要重置所有设置,您可以拨打MySettings.ResetAll();

    请注意设计时支持

    要让设计器支持将属性绑定到设置,请在项目的根目录中创建多个设置文件。不要将设置文件放在文件夹中。设置选择器只显示Settings.settings文件夹中的Properties文件和项目根目录下的文件。这样,您可以在树视图中看到不同的设置文件和设置属性,如下所示:

    enter image description here