我有一個簡單的C#winform,我試圖向它添加一個字符串。 例如checklistbox中的項目在表單關閉後刪除
checklistbox1.Items.Add("string");
的問題是,當我再次關閉的形式和運行程序,我添加的字符串是從checklistbox刪除,我必須再次輸入。
我有一個簡單的C#winform,我試圖向它添加一個字符串。 例如checklistbox中的項目在表單關閉後刪除
checklistbox1.Items.Add("string");
的問題是,當我再次關閉的形式和運行程序,我添加的字符串是從checklistbox刪除,我必須再次輸入。
當您關閉表單時,與其關聯的成員也會被刪除。如果你想保存它,你需要使用一種方法來爲你保存數據,比如XML,txt doc甚至數據庫,這取決於你想保留的信息的生命週期。
如果僅在程序運行時需要它,您可以查看將信息存儲在mainform中的成員中,而不僅僅是具有checklistbox的表單。
將公共列表屬性添加到您的表單。 爲您的表單和你的第二個構造函數代碼 寫內部創建第二個構造函數:
public YourForm(List<string>() strings)
{
foreach(var item in strings)
{
checklistbox1.Items.Add(item);
}
}
您不必關閉時卸載窗體。讓父表單 - 我假設這是從另一個表單啓動 - 代替卸載/處理所有子表單。訣竅是讓用戶看到你正在關閉表單。比方說含有清單的形式是窗體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模式。這是另一個討論:)
哎呀抱歉,我沒有仔細閱讀這個問題。這實際上只是我想的主要形式。然後,我的帖子沒有回答這個問題。唯一的辦法就是堅持到某個地方 - 這就是持久性機制的全部內容。您可以選擇使用純文本或xml,數據庫或註冊表的文件系統 – swarmttied 2015-02-24 08:57:46
你在哪裏寫這個代碼? – 2015-02-24 08:10:28
這行代碼位於一個按鈕中。 – user2023203 2015-02-24 08:11:09
您可能每次打開窗體時都會創建一個新的窗體實例。 – 2015-02-24 08:11:57