#.net #winforms #listbox
#.net #winforms #listbox
Вопрос:
Я создаю проект Windows Form, который в свободное время будет искать файлы в указанных папках. Пока у меня есть TreeView, который отображает папки точно так же, как в проводнике Windows.
У меня также есть ListBox, в котором будут храниться все результаты поиска. Когда я дважды щелкаю элемент в этом списке, я хочу иметь возможность открыть файл.
Пока я вижу три способа сделать это:
- Отображение полного пути в ListBox.
- Использование глобального списка или массива для отслеживания полных путей, в то время как в ListBox отображается только имя файла. Затем используйте индекс для сопоставления соответствующих элементов.
- Добавление свойства «Tag» к каждому из элементов моего ListBox, точно так же, как к узлам TreeView.
Для меня третий метод является наиболее привлекательным, но я понятия не имею, с чего начать. До сих пор я безрезультатно возился с библиотекой элементов управления.
Я надеялся, что смогу заставить тег работать аналогично тому, как с TreeView. Итак, код для извлечения тега и установки тега будет выглядеть так, ListBox1.Items[i].Tag
или, может ListBox1.Tag[i]
быть, если первое невозможно.
Любая помощь была бы с благодарностью принята.
Ответ №1:
Вы должны создать пользовательский SearchResult
класс со свойством, которое возвращает полный путь.
Класс должен переопределить ToString()
и вернуть текст, который вы хотите отобразить в listbox.
Затем вы можете поместить экземпляры вашего класса непосредственно в listbox и привести элемент из listbox обратно в класс, чтобы получить свойство.
Ответ №2:
Я бы создал пользовательский класс, который представляет элементы в списке. У вас есть свойства (не поля!) которые представляют отображаемое значение и выбранное значение. вы можете ввести имя этого свойства в свойствах listbox .DisplayMember и .ValueMember .ValueMember. Все, что возвращается с помощью DisplayMember, будет отображаться как текст элемента, а все, что возвращается с помощью .ValueMember, будет what .Возвращается значение SelectedValue. Вы сможете получить прямой доступ.SelectedItem для получения точного элемента, который был выбран. Таким образом, вы можете хранить все, что хотите, в качестве элементов. Если вы не укажете .DisplayMember тогда listbox будет использовать .Функция toString для элемента.