Мне нужно разрешить пользователю выбирать значок, поэтому я реализовал функцию PickIconDlg из shell32.Проблема в том, что если пользователь выбирает путь, который длиннее, чем начальный путь, который я объявляю, результирующее значение - это выбранный пользователем путь, усеченный до длины исходного пути.
Например, если я установлюИсходный путь к «C: \ Windows \ System32 \ shell32.dll» и пользователь выбирает «C: \ Users \ Public \ Documents \ TheIcons \ Library.dll», обновленное строковое значение возвращается как «C: \ Users \ Public»\ Documents \ TheIc "(т. Е. Первые 31 символ выбранного пользователем пути, поскольку длина начального пути составляет 31 символ).
Я попытался настроить значение 'nMaxFile', которое я передаю PickIconDlg, который японять, как предполагается, установить максимальную длину переменной пути.Похоже, это не имеет значения.
Declare Unicode Function PickIconDlg Lib "Shell32" Alias "PickIconDlg" (ByVal hwndOwner As IntPtr, ByVal lpstrFile As String, ByVal nMaxFile As Integer, ByRef lpdwIconIndex As Integer) As Integer
Public Function GetIconLoc(frmform As Form) As Object()
Dim iconfile As String = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\shell32.dll"
Dim iconindex As Integer ' Will store the index of the selected icon
If PickIconDlg(frmform.Handle, iconfile, 50, iconindex) = 1 Then
MessageBox.Show(iconfile)
Return {iconfile, iconindex}
Else
Return Nothing
End If
End Function
Я ожидаю, что строковая переменная iconfile будет содержать полный выбранный пользователем путь, так как его длина меньше, чем определенный максимум 50 символов.Вместо этого возвращается только часть пути, как описано выше.