【问题标题】:How to save default context settings in c#?如何在 C# 中保存默认上下文设置?
【发布时间】:2009-11-20 22:51:45
【问题描述】:

谁能告诉我为什么我不能在Settings.Default.Context中保存动态数据?

我的代码:

Settings.Default.Context.Add("myKey", "myValue");
Settings.Default.Save();

MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- This works

如果我不重新加载应用程序一切正常。但是在重新加载应用程序并仅调用之后

MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- error on appi reload

然后我收到类似Object reference not set to an instance of an object. 的错误。为什么我不能保存上下文?有什么问题?

我正在使用这种保存方式,因为这样我就可以动态添加新的键和值。

【问题讨论】:

    标签: c# scope save settings default


    【解决方案1】:

    我认为您不能通过这种方式添加新设置,它们是只读的,因为它们是程序本身的资源。

    你可以做一个System.Collections.Specialized.StringCollection的设置,然后向它添加项目。这些额外的项目在应用关闭后仍然存在。

    但是你不能做出一个全新的设置并让它仍然存在。

    【讨论】:

      【解决方案2】:

      在对象浏览器中查看:

      公共覆盖 SettingsContext Context { get; }

      只读?

      【讨论】:

        【解决方案3】:

        嗯,设置的类型是什么? 无论如何,我认为您错过了 .Context ..尝试写:

        Settings.Default.Context["myKey"].ToString()
        

        问题在于该值是用户范围设置,并且仅在应用程序会话期间持续存在。我认为您需要只能在设计时更改的应用程序范围设置(在项目属性 -> 设置选项卡中)或通过更改应用程序会话之间的 .exe.config 文件(http://msdn.microsoft.com/en-us/library/bb397744.aspx

        你必须这样做:

            using System.Configuration;
        
        namespace WindowsFormsApplication1
        {
          class MySettings : ApplicationSettingsBase
          {
            [UserScopedSetting]
            public string SavedString
            {
              get { return ( string )this["SavedString"]; }
              set { this["SavedString"] = value; }
            }
          } 
        
          public partial class Form1 : Form
          {
            MySettings m_Settings;
        
            public Form1()
            {
              InitializeComponent();
            }
        
            private void Form1_Load( object sender, EventArgs e )
            {
              m_Settings = new MySettings();
        
              Binding b = new Binding( "Text", m_Settings, "SavedString", true, DataSourceUpdateMode.OnPropertyChanged );
              this.DataBindings.Add( b );
            }
        
            private void Form1_FormClosing( object sender, FormClosingEventArgs e )
            {
              m_Settings.Save();
            }
        
            private void button1_Click( object sender, EventArgs e )
            {
              this.Text = "My Text";
            }
          }
        }
        

        此应用程序创建一个没有标题的表单,并且在中心有一个按钮。 单击按钮后, .Text (因此标题)会更改,并在关闭表单时保存。 重新运行应用程序,您将拥有新标题 My Text :)

        如果您需要完整的源代码,请告诉我 :)

        【讨论】:

          猜你喜欢
          • 2015-12-11
          • 1970-01-01
          • 2017-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          相关资源
          最近更新 更多