Добавление свойства «Tag» к элементам ListBox, например, к узлам TreeView? - PullRequest
1 голос
/ 06 ноября 2011

Я делаю проект Windows Form, который будет искать файлы в указанных папках в свободное время.До сих пор у меня есть TreeView, который отображает папки так же, как в Windows Explorer.

У меня также есть ListBox, в котором будут храниться все результаты поиска.Когда я дважды щелкаю элемент в этом списке, я хочу иметь возможность открыть файл.

До сих пор я видел три способа сделать это:

  1. Когда ListBox отображает полный путь.
  2. Использование глобального List или Array для отслеживанияполные пути, в то время как ListBox отображает только имя файла.Затем используйте индекс, чтобы сопоставить соответствующие элементы.
  3. Добавление свойства «Tag» к каждому из элементов моего ListBox, точно так же, как к узлам TreeView.

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

Я надеялся, что смогу заставить тег работать так же, как и в TreeView.Таким образом, код для извлечения тега и установки тега будет выглядеть как ListBox1.Items[i].Tag или, возможно, ListBox1.Tag[i], если первое невозможно.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

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

Вам следует создать собственный класс SearchResult со свойством, которое возвращает полный путь.
Класс должен переопределить ToString() и вернуть текст, который вы хотите отобразить в списке.

Затем вы можете поместить экземпляры вашего класса непосредственно в список и привести объект из списка обратно к классу, чтобы получить свойство.

1 голос
/ 06 ноября 2011

Я бы сделал собственный класс, который представляет элементы в списке. У вас есть свойства (не поля!), Представляющие отображаемое значение, и выбранное значение вы можете ввести в качестве имени этого свойства в свойствах списка .DisplayMember и .ValueMember. Все, что возвращается DisplayMember, будет отображаться как текст элемента, а все, что возвращается .ValueMember, будет тем, что возвращает .SelectedValue. Вы сможете получить прямой доступ к .SelectedItem, чтобы получить точный элемент, который был выбран. Таким образом, вы можете хранить все, что вы хотите в качестве предметов. Если вы не укажете .DisplayMember, то список будет использовать функцию .ToString для элемента.

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