2015-02-24 21 views
0

我有一個簡單的C#winform,我試圖向它添加一個字符串。 例如checklistbox中的項目在表單關閉後刪除

checklistbox1.Items.Add("string"); 

的問題是,當我再次關閉的形式和運行程序,我添加的字符串是從checklistbox刪除,我必須再次輸入。

+0

你在哪裏寫這個代碼? – 2015-02-24 08:10:28

+0

這行代碼位於一個按鈕中。 – user2023203 2015-02-24 08:11:09

+0

您可能每次打開窗體時都會創建一個新的窗體實例。 – 2015-02-24 08:11:57

回答

0

當您關閉表單時,與其關聯的成員也會被刪除。如果你想保存它,你需要使用一種方法來爲你保存數據,比如XML,txt doc甚至數據庫,這取決於你想保留的信息的生命週期。

如果僅在程序運行時需要它,您可以查看將信息存儲在mainform中的成員中,而不僅僅是具有checklistbox的表單。

0

將公共列表屬性添加到您的表單。 爲您的表單和你的第二個構造函數代碼 寫內部創建第二個構造函數:

public YourForm(List<string>() strings) 
{ 
    foreach(var item in strings) 
    { 
     checklistbox1.Items.Add(item); 
    } 
} 
0

您不必關閉時卸載窗體。讓父表單 - 我假設這是從另一個表單啓動 - 代替卸載/處理所有子表單。訣竅是讓用戶看到你正在關閉表單。比方說含有清單的形式是窗體2,加載窗體2從父窗體看起來像這樣的功能:

Form2 _form2 = null; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     if (_form2 == null) 
     { 
      _form2 = new Form2(); 
     } 

     _form2.Show(); 
    } 

並在窗體2,處理這樣的Closing事件: 私人無效Form2_FormClosing(對象發件人,FormClosingEventArgs e) {e .Cancel = true; Hide(); }

最後,在父窗體關閉事件,你可以,如果你需要爲窗體2的所有實例相同的一組值的處理窗體2

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (_form2 != null) 
     { 
      _form2.Dispose(); 
      _form2 = null; 
     } 
    } 

,那麼你可以使用Singleton模式。這是另一個討論:)

+0

哎呀抱歉,我沒有仔細閱讀這個問題。這實際上只是我想的主要形式。然後,我的帖子沒有回答這個問題。唯一的辦法就是堅持到某個地方 - 這就是持久性機制的全部內容。您可以選擇使用純文本或xml,數據庫或註冊表的文件系統 – swarmttied 2015-02-24 08:57:46