我正在编写的备份应用程序上有一个CheckedListBox。 我希望用户选择他们想要备份的文件夹,即桌面 我有for循环工作每个勾选的项目等但我希望用户看到标记为“桌面”而不是c:\ users \ username \ desktop
的复选框有人可以告诉我如何将列表框标签更改为与实际返回到for循环的内容不同的内容。
答案 0 :(得分:2)
您应该创建一个包含完整路径的类型,并覆盖ToString()以返回要在CheckedListBox中显示的内容。 CheckedListBox.SelectedItems将保存您的类型列表。
public void PopulateListBox()
{
_checkedListBox.Items.Add(new BackupDir(@"C:\foo\bar\desktop", "Desktop"));
}
public void IterateSelectedItems()
{
foreach(BackupDir backupDir in _checkedListBox.CheckedItems)
Messagebox.Show(string.format("{0}({1}", backupDir.DisplayText, backupDir.Path));
}
public class BackupDir
{
public string Path { get; private set; }
public string DisplayText { get; private set; }
public BackupDir(string path, string displayText)
{
Path = path;
DisplayText = displayText;
}
public override string ToString()
{
return DisplayText;
}
}
当然,您可以从路径中删除文件夹名称,如果这是您想要为每个列表项执行的操作,并且只在BackupDir类上使用路径arg。
答案 1 :(得分:0)
如何通过FolderBrowserDialog获取文件夹名称,还是由用户手动输入?
使用.Split('\')
答案 2 :(得分:0)
这是我对你的建议。为您的备份文件夹创建一个数据类:
public class BackupFolder
{
private string folderPath;
public BackupFolder(string folderPath)
{
this.folderPath = folderPath;
FolderName = folderPath.Split(new[] { '\\' }).Last();
}
public string FolderName { get; private set; }
}
然后将这些文件的列表设置为CheckedListBox的DataSource,并将DisplayMember设置为包含要显示它的值的属性。像这样:
var data = new BindingList<BackupFolder>();
data.Add(new BackupFolder("D:\\Data"));
checkedListBox1.DataSource = data;
checkedListBox1.DisplayMember = "FolderName";