CheckedListBox显示不同的字符串c#

CheckedListBox显示不同的字符串c#

问题描述:

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

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

+0

你正在使用WinForms或WPF吗? – Fischermaen

+0

窗体.. – meeeeeeeeee

你应该创建包含完整路径类型和覆盖的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类的路径。

+0

路径都是硬编码的我想要桌面,我的文档等与一个单独的tickbox。 Myles已经得到了我想做的事情,但是当我实现你的建议时,这个复选框被标记为“system_backup(项目名称).form1 + BackupDir”任何想法为什么会出现这种情况,你发布的代码看起来是正确的,但它确实没有用我的字符串标签框 – meeeeeeeeee

+0

我试着实现你的解决方案,但得到system_backup.form1 + BackupDir而不是桌面。有什么建议么? - 你的解决方案最适合我,因为我想键入要显示的字符串只是不会工作though.cheers – meeeeeeeeee

+0

我的坏,忽略覆盖BackupDir的ToString(),现在已编辑。 –

你如何获得文件夹名称,由FolderBrowserDialog,或者它是由用户手动输入?

使用.Split(“\”)

+0

迈尔斯已经得到了我想要做的,但是当我实现该代码时,它将该框标记为system_backup.form1 + BackupDir而不是“桌面” – meeeeeeeeee

这是我的建议。对于像您的备份文件夹中创建一个数据类:

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"; 
+0

谢谢你,它现在正确显示,即它表示窗体上的桌面上的桌面,但上面的路径实际上是system_backup.form1 + backupfolder,而不是您的代码中定义的实际D:\ data。当鼠标悬停在checkedlistbox1.dislpaymember&displaysource上时,它也显示“此属性与此类无关” – meeeeeeeeee

+0

@meeeeeeeeee:请原谅我的“d:\\ data” - 这只是一个示例,而不是解决方案。 ;-)请不要忘记投票并接受答案,这就是StackOverflow的工作原理。请参阅[faq] – Fischermaen

+0

我知道谢谢,但我尝试了正确的路径并得到了相同的结果,我选中了数据,但由于某种原因而不是正确的路径,它返回了system_backup.form1 + backupfolder。 – meeeeeeeeee