我有一個列表框,其中包含一組PathItems。根據用戶的喜好,我用一些不同的情況重寫了ToString方法。有一個列表框調用所有項目的ToString方法
它基本上是包含在自定義對象中的文件名列表。
class PathItem
{
public static bool show_ext { get; set; }
public static bool use_full_path { get; set; }
public string filepath { get; set; }
public override string ToString()
{
if (use_full_path)
return filepath;
else if (show_ext)
return Path.GetFileName(filepath);
else
return Path.GetFileNameWithoutExtension(filepath);
}
}
該GUI有兩個複選框。一個複選框將顯示文件擴展名,另一個複選框將顯示文件的絕對路徑。檢查其中的任何一個都會更新上面定義的靜態變量。
每當我選擇一個複選框,我希望更新列表框以反映用戶的選擇。
我相信解決方案是通過再次調用ToString方法來獲取每個項目的新值,但我不確定這將如何完成,讓列表框刷新其所有項目。
而且我不知道如果這是真的,但如果我說
PathItem.show_ext = true;
這將適用於所有現有PathItem
對象?
UPDATE:
嘗試Refresh
方法的建議後,在列表框中的字符串沒有更新,即使複選框被選中(他們把火關上ClickChanged刷新調用)。在ToString
方法中寫了一條打印語句,但刷新後沒有打印出任何消息。
不知道這是因爲我在我的列表框中使用自定義對象。
這是我怎麼就包含的對象將項目添加到我的列表框中
foreach (string filename in files)
listBox1.Items.Add(new PathItem { filepath = filename });
我在想'刷新'會做伎倆,但現在我已經在一些打印語句中添加了自定義的'ToString'方法,實際上在刷新列表框時並沒有被調用。我想知道是否因爲我的列表框的項目中有這些自定義的'PathItem'對象。 – MxyL 2012-08-09 04:36:54
給我一點時間來看看這個。 – 2012-08-09 04:46:44
用經過測試的解決方案更新了我的答案。 – 2012-08-09 05:02:40