有人可以告诉我为什么我无法在Settings.Default.Context
中保存动态数据吗?
我的代码:
Settings.Default.Context.Add("myKey", "myValue");
Settings.Default.Save();
MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- This works
如果我不重新加载appi,一切正常。但在重新加载应用程序并仅调用
之后MessageBox.Show(Settings.Default.Context["myKey"].ToString());<-- error on appi reload
然后我收到类似Object reference not set to an instance of an object.
的错误。为什么我无法保存上下文?有什么问题?
我正在使用这种方式保存,因为那时我可以动态添加新的键和值。
答案 0 :(得分:1)
我认为你不能以这种方式添加新设置,它们只是因为它们是程序本身的资源而被阅读。
您可以执行的操作设置为System.Collections.Specialized.StringCollection
,然后向其中添加项目。应用程序关闭后,这些额外的项目仍然存在。
但是你不能做出一个全新的设置并让它仍然存在。
答案 1 :(得分:0)
嗯,什么是设置类型? 无论如何,我认为你错过了.Context ..try写道:
Settings.Default.Context["myKey"].ToString()
问题是该值是User-Scope设置,并且仅在应用程序会话期间持续存在。我认为您需要的应用程序范围设置只能在设计时更改(在“项目属性” - >“设置”选项卡中)或通过在应用程序会话之间更改.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:)
如果您需要完整的源代码,请告诉我:)
答案 2 :(得分:0)
在对象浏览器中查看:
public override SettingsContext Context {get; }
只读?