Reset part of application settings

懵懂的女人 提交于 2019-12-11 06:13:38

问题


So, I have Form called Preferences with TabControl in it. This TabControl contains several TabPages(General, Advanced, Misc, ...) with few comboboxes, checkboxes and labels. Each of this control inside TabPage is assigned Application Settings Property Binding (aka they show saved user settings, user can change them etc...).

I know that there is a method to reset all settings (Properties.Settings.Default.Reset();), but is there a way how to reset only settings inside one TabPage?

My solution is to iterate thru controls in TabPage, check if it is combobox, label etc and then reset it´s value to default, but is there a "oneliner" solution to this ?


回答1:


 TabPage page = aTabControl.SelectedTab;

        var controls = page.Controls;

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



回答2:


Try this:

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



回答3:


The ApplicationSettings doesn't have built-in support to reset just some properties. But to solve the problem, you can use either of these options:

  1. Create a method which resets all bound controls of a TabPage

  2. Using Multiple Settings Files with Designer Support

Option 1 - Create a method which resets all bound controls of a TabPage

You can create a method which look at controls of the tab page and check if it's bound to application settings, find the property in settings and reset its value to the default value. Then you can reset settings of a TebPage width one line of code: ResetSettings(tabPage1);.

Here is the method:

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

Option 2 - Using Multiple Settings Files with Designer Support

If the reason of using a single settings file is because of designer support, you should know you can have designer support also with multiple settings files. Then you can use different settings files and reset each settings group separately. You can simply encapsulate them in a single class using such code:

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

To reset a setting group it's enough to call MySettings.General.Reset();

To reset all settings, you can call MySettings.ResetAll();

Note for design-time support

To have designer support for binding properties to settings, create multiple settings files in root of your project. Don't put settings files in folders. The setting picker, only shows Settings.settings file which is in Properties folder and those files which are in root of project. This way you can see different settings files and settings properties in a tree-view like this:



来源:https://stackoverflow.com/questions/39367370/reset-part-of-application-settings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!