CheckedListBox Показать другую строку c # - PullRequest
3 голосов
/ 23 ноября 2011

У меня есть CheckedListBox в приложении резервного копирования, которое я пишу. Я хочу, чтобы пользователь выбирал папки, которые он хочет создать, т.е. У меня есть цикл for, работающий для каждого отмеченного элемента и т. Д., Но я хочу, чтобы пользователь видел поле с галочкой, помеченное как «Рабочий стол», а не c: \ users \ username \ desktop

Может кто-нибудь сообщить мне, как изменить метку списка на нечто отличное от того, что фактически возвращается в цикл for.

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Вы должны создать тип, который содержит полный путь и переопределить 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 голосов
/ 23 ноября 2011

Вот мое предложение для вас.Создайте класс данных для ваших папок резервного копирования следующим образом:

public class BackupFolder
{
    private string folderPath;

    public BackupFolder(string folderPath)
    {
        this.folderPath = folderPath;
        FolderName = folderPath.Split(new[] { '\\' }).Last();
    }

    public string FolderName { get; private set; }
}

Затем установите список этих файлов как DataSource для CheckedListBox и установите для DisplayMember свойство, которое содержит значение, которое вы хотите отобразить.Как это:

var data = new BindingList<BackupFolder>();
data.Add(new BackupFolder("D:\\Data"));
checkedListBox1.DataSource = data;
checkedListBox1.DisplayMember = "FolderName";
0 голосов
/ 23 ноября 2011

Как вы получаете имена папок, FolderBrowserDialog, или это ввод вручную пользователем?

Использовать .Split ('\')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...