2015-04-03 87 views
0

我正在編寫一個簡單的應用程序 - 一種在C#中的winforms saper遊戲。我的應用程序已經在應用程序設置中保存了一些信息,例如按鈕的大小或顏色,但是當我嘗試保存自己的結構的數組列表時,出現問題。這是沒有錯誤,但信息不會保存下一個程序execution.Ustawienia是一個公共靜態類,其中包括wyniki這是另一種形式,而Properties.Settings.Default.scores是添加到應用程序settigs中的ArrayList。如果您有任何想法我做錯了,以及如何在應用程序設置中存儲陣列列表,我將不勝感激。在應用程序設置中保存arraylist winforms

下面是代碼:

公共部分類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

以我的經驗,它總是與試圖使用默認的設置有問題。例如,在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。這不值得頭痛。