2016-05-02 47 views
0

我有一个自定义类及其集合,我想用它在我的Settings.default中创建条目。我设法使用名称空间上的浏览(...)按钮设置设计器中的类型,并在给定的会话中使用。我可以存储并从我的类(或者这些类的对象)中获取值。Visual C#自定义类的类型设置不会保存

但设置不保存。 我已经使用this method在我的设置中实现我的自定义课程,并且正在尝试诸如this one之类的提示来保存它们 - 但这里没有运气。

我将如何保存自定义对象类? 最终的类中的类型是微不足道的,只不过是字符串,整数和布尔值。

更新: 它不是一个集合序列化的问题,包含一个字符串一个简单的类也将不存在。我将我的代码更改为更简单的示例。

using System; 
using System.Windows.Forms; 
using System.Configuration; 

namespace tester 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      if(Properties.Settings.Default.MySetting== null) 
      { 
       MessageBox.Show("MySetting is null"); 
       Properties.Settings.Default.MySetting = new saveme(); // this saveme will be accessible just fine for the duration of the session, but it won't persist. 
      } 
      textBox1.Text = Properties.Settings.Default.MySetting.somestring; // will always be "initial value" as per initialization of saveme() 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Properties.Settings.Default.MySetting.somestring = textBox1.Text; 
      Properties.Settings.Default.Save(); 
     } 
    } 

    [Serializable()] 
    public class saveme : ApplicationSettingsBase // class containing data 
    { 
     private string Somestring = "initial value"; 

     [UserScopedSetting()] 
     [DefaultSettingValue("default value")] 
     [SettingsSerializeAs(SettingsSerializeAs.Binary)] 
     public string somestring 
     { 
      get { return Somestring; } 
      set { Somestring = value; } 
     } 
    } 
} 

它将总是最后MySetting是

+0

SettingsSerializeAs属性必须指定Binary作为我们的代码。 - 来自你基于的教程。继续尝试吧。 –

+0

@Ephraim:你的意思是'[SettingsSerializeAs(SettingsSerializeAs.Binary)]'?我刚开始时有一个,但没有成功:/ –

+0

@Ephraim我回到了Binary,结果相同 - 你有什么想法吗? –

回答

2

我能够重现非持续性的问题,并能够使事情工作。

这是一个简单的工作示例,如果您想通过代码创建新的设置。

public partial class Form1 : Form 
{ 
    private FormSettings frmSettings1 = new FormSettings(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.textBox1.Text = frmSettings1.FormText; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     frmSettings1.FormText = textBox1.Text; 
     this.Close(); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     frmSettings1.Save(); 
    } 

} 

//Application settings wrapper class 
sealed class FormSettings : ApplicationSettingsBase 
{ 
    [UserScopedSettingAttribute()] 
    public String FormText 
    { 
     get { return (String)this["FormText"]; } 
     set { this["FormText"] = value; } 
    } 
} 

我没有在项目属性设置选项卡上添加新的设置。 我也避免使用Properties.Settings.Default。

我发现Properties.Settings.Default不会持续存在,并且通过测试它只对添加到项目属性设置选项卡的设置有效(持久存在)。

如果你想尝试它,你应该使用MyNameSpace.Properties.Settings.Default而不是简单的Properties.Settings.Default。它有所作为。

+0

你是对的!我从来没有想过我可以简单地构造一个继承ApplicationSettingsBase的新对象,并保存到它,而不使用“正确的”设置:)谢谢你太多了! –

+0

非常感谢。几天前,Visual Studio开始抱怨说Properties.Settings.Default没有包含我放入项目属性设置GUI工具中的值。您的班级正常工作。 –