CheckedListBox显示不同的字符串c#

时间:2011-11-23 11:12:06

标签: c# winforms

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

的复选框

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

3 个答案:

答案 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";