【问题标题】:Reset part of application settings重置部分应用程序设置
【发布时间】:2017-01-14 23:53:15
【问题描述】:

所以,我有一个名为 Preferences 的表单,其中包含 TabControl。这个TabControl 包含几个TabPages(General, Advanced, Misc, ...),只有很少的组合框、复选框和标签。 TabPage 中的每个控件都分配有应用程序设置属性绑定(也就是它们显示保存的用户设置,用户可以更改它们等...)。

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

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

【问题讨论】:

  • 不,重置是全部或全部。
  • 您不需要检查控件类型。找到绑定到应用程序设置的控件然后重置绑定属性就足够了。见this answer

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


【解决方案1】:

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

  1. 创建一个方法来重置TabPage的所有绑定控件

  2. 在 Designer 支持下使用多个设置文件

选项 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();

设计时支持说明

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

【讨论】:

    【解决方案2】:
     TabPage page = aTabControl.SelectedTab;
    
            var controls = page.Controls;
    
            foreach (var control in controls)
            {
                //do stuff
            }
    

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 2012-02-22
        相关资源
        最近更新 更多