#vb.net
#vb.net
Вопрос:
Я хочу, чтобы у пользователя была возможность выбирать несколько файлов через openfiledialog, который у меня есть в моем коде, но затем, если пользователь выбирает файл из одной папки, ему будет разрешено выбирать другой файл только из этой конкретной папки. Каков наилучший способ решения этой проблемы?
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim openfiledialog1 As New OpenFileDialog
With openfiledialog1
.Title = "Select your models"
.Filter = "Solidworks Files|*.sldprt;"
.Multiselect = True
End With
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
For Each mfile As String In openfiledialog1.FileNames
'' Add all filenames in a txt file, in a column
Next
End If
End Sub
Комментарии:
1. Вы могли бы создать свою собственную форму, которая позволяет пользователю перемещаться по папкам и выбирать файлы из нескольких каталогов, добавляя все выбранные элементы в другой элемент управления по ходу работы (возможно, в поле списка?).
2. Чтобы уточнить, вы хотите, чтобы пользователь мог открыть диалоговое окно один раз и выбрать несколько файлов из разных папок одновременно? В этом вопросе есть комментарий и ответ, которые интерпретировали его двумя совершенно разными способами, и любой из них может быть действительным на основе формулировки.
3. Я хочу, чтобы пользователь мог открывать файлы из нескольких папок, но когда он выбирает файл из одной из папок, он может выбрать другой файл только из той папки, где он выбрал первый. Итак, чтобы попытаться сделать это более понятным, поскольку я сохраняю имена файлов, выбранных пользователем, я хотел запретить пользователю заходить в одну папку и выбирать один файл, а затем переходить в другую и выбирать другой в том же диалоговом окне файла. Но поскольку я попытался углубиться в это, кажется, что по умолчанию диалоговое окно «открыть файл» не разрешает множественный выбор из разных папок
4. @Marc «Я хотел запретить пользователю заходить в одну папку и выбирать один файл, а затем переходить в другую и выбирать другой в том же диалоговом окне «Файл». Но поскольку я попытался углубиться в это, кажется, что по умолчанию диалоговое окно «открыть файл» не разрешает множественный выбор из разных папок» Re: Итак, в чем проблема?
Ответ №1:
Насколько я знаю, OpenFileDialog не предлагает способа запретить пользователю переход в другой каталог.
Одним из подходов было бы создание переменной уровня класса, которая содержит значение недавно использованного пути к каталогу. Затем, всякий раз, когда выбирается новый файл, вы сверяете путь к его каталогу с ранее сохраненным. Если он совпадает, продолжайте. Если нет, прервите операцию и сообщите пользователю.
Вот полный пример:
Private openFileDialog1 As New OpenFileDialog
Private modelsDirectory As String = Nothing
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
With openFileDialog1
.Title = "Select your models"
.Filter = "Solidworks Files|*.sldprt;"
.Multiselect = True
.FileName = Nothing
' Open the dialog and navigate to the previous direcoty by default.
.InitialDirectory = modelsDirectory
End With
If openFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
Dim dirPath As String = IO.Path.GetDirectoryName(openFileDialog1.FileName)
If modelsDirectory IsNot Nothing AndAlso
Not dirPath.Equals(modelsDirectory, StringComparison.OrdinalIgnoreCase) Then
MessageBox.Show("Models must be selected from the following directory:" amp;
vbNewLine amp; modelsDirectory, "Restricted Directory")
Exit Sub
End If
' Store the value of the current directory path.
modelsDirectory = dirPath
For Each filePath As String In openFileDialog1.FileNames
' TODO: use the selected files as you see fit.
Next
End Sub
Возможно, в какой-то момент вам захочется снять это ограничение (например, если вы очистите список выбранных файлов). Вы можете добиться этого, просто установив modelsDirectory
значение Nothing
:
Private Sub ClearFilesList
' TODO: clear the files.
modelsDirectory = Nothing
End Sub