CheckedListBox显示不同的字符串c#

CheckedListBox显示不同的字符串c#,c#,winforms,C#,Winforms,我正在编写的备份应用程序上有一个CheckedListBox。 我希望用户选择要备份的文件夹,即桌面 我让我的for循环为每个勾选的项目等工作,但我希望用户看到标记为“桌面”的勾选框,而不是c:\users\username\Desktop 有人能告诉我如何将列表框标签更改为与实际返回到for循环的内容不同的内容。您是如何通过FolderBrowserDialog获取文件夹名称的,还是用户手动输入的 使用.Split(“\”)您应该创建一个保存完整路径的类型,并重写ToString(),以返回要

我正在编写的备份应用程序上有一个CheckedListBox。 我希望用户选择要备份的文件夹,即桌面 我让我的for循环为每个勾选的项目等工作,但我希望用户看到标记为“桌面”的勾选框,而不是c:\users\username\Desktop


有人能告诉我如何将列表框标签更改为与实际返回到for循环的内容不同的内容。

您是如何通过FolderBrowserDialog获取文件夹名称的,还是用户手动输入的


使用.Split(“\”)

您应该创建一个保存完整路径的类型,并重写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即可。

以下是我给您的建议。为备份文件夹创建数据类,如下所示:

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的数据源,并将DisplayMember设置为包含要显示的值的属性。像这样:

var data = new BindingList<BackupFolder>();
data.Add(new BackupFolder("D:\\Data"));
checkedListBox1.DataSource = data;
checkedListBox1.DisplayMember = "FolderName";
var data=newbindingList();
添加(新备份文件夹(“D:\\data”);
checkedListBox1.DataSource=数据;
checkedListBox1.DisplayMember=“FolderName”;

您使用的是WinForms还是WPF?路径都是硬编码的我希望桌面、我的文档等都有一个单独的复选框。Myles已经得到了我想要做的,但是当我执行你的建议时,勾选框被标记为“system_backup(项目名称)。form1+BackupDir”你知道为什么会这样吗,您发布的代码在我看来是正确的,但它没有用my Strings标记框。我已尝试实现您的解决方案,但使用system_backup.form1+BackupDir而不是Desktop。有什么建议吗您的解决方案最适合我,因为我想键入要显示的字符串,但它不起作用。我很糟糕,忽略了在BackupDir上覆盖ToString(),现在已经编辑。几乎有Myles,它可以工作,除了我执行public void iteselecteditems(){foreach(BackupDir BackupDir在checkedListBox1.SelectedItems中){MessageBox.Show时(sources);}}它返回“Desktop”而不是C:\foo\bar\Desktop什么是sources?在循环中,backupDir变量的类型是backupDir,因此您可以访问Path或DisplayText,我编辑了答案以进行演示。Myles得到了我想要做的事情,但当我实现该代码时,它将框标记为system\u backup.form1+backupDir而不是“桌面”感谢您的帮助,它现在显示正确了,即它在窗体的框中显示桌面,但如上所述,路径实际上是system_backup.form1+backupfolder,而不是代码中定义的实际D:\数据。当将鼠标悬停在checkedlistbox1.dislpaymember上时,也可以从visual studio中看到它显示的源代码”此属性与该类无关“@meeeee:请原谅我的“d:\\data”-它只是一个示例,而不是解决方案。;-)请不要忘记投票并接受答案,这就是StackOverflow的工作原理。请看,我知道,谢谢,但我尝试了正确的路径并得到了相同的结果,我勾选了数据,但它返回了system_backup。form1+backupfolder出于某种原因而不是正确的路径。@Meeeee:您必须用为ea创建的路径来填充列表一个新的BackupFolder对象在构造函数中提供了所需的路径。它的工作方式与您预期的不同。