2016-08-19 104 views
0

我有一個程序組合框,該框和一個字符串的列表。從一個字符串創建一個新的列表項

該字符串是通過用戶輸入通過文本框創建的,每次程序關閉時都會保存。所以如果我輸入「輸入文本」,然後關閉並打開程序組合框將有一個包含1個字符串,其中顯示「輸入文本」的列表

問題是我想不斷添加到列表與新信息,但在它一直在壓倒我上次投入的那一刻。

每次字符串不同時,如何添加新項目到我的列表中?

private void Form1_Load(object sender, EventArgs e) 
{ 
    //Load Settings 
    saveLocationTextBox.Text = MySettings.Default["SaveSaveLocationText"].ToString(); 

    List<string> list = new List<string>(); 
    list.Add(saveLocationTextBox.Text); 

    comboBox.DataSource = list; 
} 

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    //Save User Input 
    MySettings.Default["SaveSaveLocationText"] = saveLocationTextBox.Text; 
    MySettings.Default.Save(); 
} 
+1

嘗試把在一個單獨的文件列表 – Dan

+1

您需要保存分配到ComboBox作爲數據源字符串的現有列表,並在'Form1_Load'你應該在新的字符串添加到字符串的救列表,而比創建一個新列表並將其添加到該列表中。因爲每次你從頭開始創建一個新列表,你只需要添加新的字符串。 – biseibutsu

回答

1

的問題是,你只保存所選項目的文本您的設置,而不是組合框中的所有項目。

我建議首先獲取組合中的所有項目,並將它們放在逗號分隔的字符串中。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    //Save User Input 
    string[] itemsToStore = new string[comboBox.Items.Count]; 

    for (int i = 0; i < comboBox.Items.Count; i++) 
    { 
     itemsToStore[i] = comboBox.GetItemText(comboBox.Items[i]); 
    } 

    MySettings.Default["SaveSaveLocationText"] = saveLocationTextBox.Text; 
    MySettings.Default["SaveSaveLocationItems"] = string.Join(",", itemsToStore); 
    MySettings.Default.Save(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    //Load Settings 
    saveLocationTextBox.Text = MySettings.Default["SaveSaveLocationText"].ToString(); 

    string listItems = MySettings.Default["SaveSaveLocationItems"].ToString(); 

    List<string> list = new List<string>(); 
    list.AddRange(listItems.Split(',')); 

    comboBox.DataSource = list; 
} 
1

,而不是覆蓋該文件中的文本做:

var items = comboBox.Items.Select(item => comboBox.GetItemText(item)).ToList(); 
items.Add(saveLocationTextBox.Text); 

MySettings.Default["SaveSaveLocationText"] = string.Join(";", items); 

然後閱讀時:

var text = MySettings.Default["SaveSaveLocationText"].ToString(); 
comboBox.DataSource = text.Split(';').ToList(); 
+0

@AaronParkes - 你能解決這個問題嗎? –