Рейтинг:
0
phil.o
Вы можете перечислить каталоги в определенном каталоге таким образом:
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Public Shared Function GetDirectories(directory As String) As String()
Dim list As New List(Of String)
list.AddRange
(
Directory.EnumerateDirectories
(
Path.Combine
(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
directory
)
)
)
Return list
'' We have to add a final backslash to each path
'' for the GetDirectoryName method to work as expected.
.Select(p => Path.GetDirectoryName(p & "\"))
.ToArray()
End Function
Использование:
Dim paths As String() = GetDirectories("State of Decay 2 Mod Manager")
Это относится к перечислительной части.
Теперь остается нерешенный вопрос: почему попытка заполнить список на выбранном индексе изменилась? Это событие срабатывает всякий раз, когда выбирается отдельный элемент в списке. Вам лучше заполнить этот список сразу после загрузки формы или всякий раз, когда было внесено изменение в содержимое базового каталога.
Rynovz
Честно говоря, я не понимал, что делает инструкция ListBox_SelectionChanged, пока Ричард не объяснил ее. Это во многом первая попытка сделать это. Идея кажется относительно простой, но реализация кажется значительно более сложной, пока я не пойму, как каждая строка влияет на то, что делает список. Это очень сильно ограничивает мои знания в области кодирования в целом. Какую инструкцию было бы лучше использовать, и где бы она была размещена, чтобы иметь желаемый эффект?
phil.o
Ну, это зависит от потока вашей программы. Вы можете заполнить поле списка сразу после загрузки формы (например, в форме.Активированное событие), или всякий раз, когда были внесены некоторые изменения в содержимое базового каталога.
Rynovz
Было бы лучше, чтобы список обновлялся всякий раз, когда вносятся изменения в базовый каталог. Когда я скопировал ваш код выше, я нарисовал пробел относительно того, куда его вставить. Нужно ли дважды щелкнуть по списку и вставить туда код? Или на самом главном окне?
phil.o
Вы можете разместить общую функцию внутри вашего устройства. MainWindow
класс. То Imports
инструкции обычно идут в самом начале файла кода.
Затем вы можете использовать эту общую функцию из любого места, где вы решили реализовать список каталогов.
Если вы дважды щелкните по списку, он добавит только обработчик событий для события по умолчанию для списка. ListBox
класс, а это совсем не то, чего ты хочешь.
Может быть, вам нужен краткий обзор классов и функций или того, что такое a Shared
стихия?
Рейтинг:
0
Richard MacCutchan
Вы не будете захватывать имена файлов до тех пор, пока ListBox_SelectionChanged
событие называется. И это не будет вызвано до тех пор, пока не будет сделан выбор элемента в списке, который в данный момент пуст. Вы должны заполнить поле списка при первом запуске приложения, т. е. MainWindow_Load
метод. Или используйте кнопку на форме, чтобы запустить его.
В документации есть даже хороший пример кода: Класс ListBox (System.Окна.Формы) | Microsoft Docs[^].
Rynovz
Спасибо за ответ, Ричард. Я читал документацию, и это имеет большой смысл. Что меня сейчас смущает, так это метод MainWindow_Load, о котором вы упомянули. Я тоже не знаю, как сделать так, чтобы кнопка на форме запускала код. Как только я сделаю это один раз, у меня будет хорошая хватка
Richard MacCutchan
Откройте окно конструктор форм в Visual Studio и дважды щелкните на заголовке формы. Это приведет к созданию метода Form_Load. Затем вы можете добавить туда свой код.
Вы упомянули WPF в названии своего вопроса, поэтому я предположил, что вы опытный разработчик. Однако если вы изо всех сил пытаетесь понять основные концепции .NET-приложений, то WPF покажется вам еще более трудным. Я предлагаю вам перейти в раздел статей CodeProject, где вы найдете много полезных руководств по базовой разработке Windows Forms.
Rynovz
Спасибо за совет. Мне сказали использовать WPF, так как это сделает вещи проще, а не сложнее. Я очень ценю ваши отзывы
Richard MacCutchan
Ну, это зависит от того, что вы пытаетесь сделать, и вашего уровня квалификации. И как кто-то новый в кодировании, я думаю, что вы найдете WPF гораздо более сложной задачей, чем Windows Forms.