我正在编写一个简单的应用程序 - 一种在C#中使用winforms的游戏。我的应用程序已经在应用程序设置中保存了一些信息,如按钮的大小或颜色,但是当我尝试保存我自己结构的arraylist时,我遇到了问题。这些都没有错误,但是没有为下一个程序执行保存信息.Ustawienia是一个公共静态类,包括wyniki,它是另一种形式,Properties.Settings.Default.scores是在应用程序settigs中添加的ArrayList。如果您知道我做错了什么以及如何在应用程序设置中存储arraylist,我将不胜感激。
以下是代码:
公共部分类Form3:表格 {
public Form3()
{
InitializeComponent();
if (Properties.Settings.Default.scores == null)
Properties.Settings.Default.scores = new System.Collections.ArrayList();
}
private void ok_click(object sender, EventArgs e)
{
Highscore higscore = new Highscore(Properties.Settings.Default.ktory, textBox1.Text, ustawienia.ile_wierszy, ustawienia.ile_kolumn, ustawienia.elapsed.Seconds);
Properties.Settings.Default.scores.Add( higscore);
Properties.Settings.Default.scores.Sort(new myComparer());
Properties.Settings.Default.ktory++;
Properties.Settings.Default.Save();
Highscore.show();
this.Close();
}
}
public class Highscore
{
public int nubmer;//w properties ktory=+1;
public string name;
int rows;
int columns;
public int time;
public Highscore(int _number, string _name, int _rows, int _columns, int _time)
{
number = _number;
name = _name;
rows = _rows;
columns = _columns;
time = _time;
}
public static void show()
{
ListView list = (ListView)ustawienia.wyniki.Controls.Find("listView1", true)[0];
list.Items.Clear();
foreach (Highscore e in Properties.Settings.Default.scores)
{
ListViewItem newItem = new ListViewItem(new[] { e.name, e.time.ToString(), e.rows.ToString()+"x"+e.columns.ToString() });
lista.Items.Add(newItem);
}
ustawienia.wyniki.Show();
}
}
public class myComparer:IComparer
{
int IComparer.Compare(Object x, Object y)
{
if (((Highscore)x).time < ((Highscore)y).time)
return 1;
else if (((Highscore)x).time > ((Highscore)y).time)
return -1;
else
{
return String.Compare(((Highscore)x).name,((Highscore)y).name);
}
}
}
}
答案 0 :(得分:0)
根据我的经验,尝试使用默认设置始终存在问题。例如,在Windows 8上,默认设置保存在此文件夹模式中:
C:\Users\[username]\AppData\Local\[AssemblyName]\[AssemblyName].exe_Url_[random_string_of_characters]\1.0.0.0\user.config
但是,在调试模式下,它将是.vhost.exe
,然后在本地测试时,它将只是.exe
。然后,如果版本增加,它将再次改变路径。
最终我放弃了试图弄清楚正在使用哪个Settings
文件,并试图强制它保存到另一个(更干净的)文件夹。相反,我切换到使用自定义设置类并使用XmlSerializer
。这不值得头痛。