我有一个包含一组 PathItems 的列表框。根据用户的喜好,我用几种不同的情况覆盖了 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
对象吗?
更新:
按照建议尝试该Refresh
方法后,即使选中了复选框(它们在 ClickChanged 上触发 Refresh 调用),列表框中的字符串也没有更新。在方法内部写了一条打印语句ToString
,但是刷新后没有打印出任何消息。
不确定这是否是因为我在列表框中使用了自定义对象。
这就是我向列表框中添加项目的方式
foreach (string filename in files)
listBox1.Items.Add(new PathItem { filepath = filename });