Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как сделать диалог открытия файла? Добавлено: 17.03.04 20:23  

Автор вопроса:  SunDevil

Здравствуйте, товарищи!

Вот хочу сделать такую штуку:

Есть у меня на форме кнопка (CommandButton1) и ListBox (List1).У этого листбокса в параметре Style я поставил CheckBox.

Вопрос:

Как сделать так, чтобы при нажатии на кнопку, открывался диалог открытия файла (с расширением только MP3) и чтобы можно было выбрать ни один, а НЕСКОЛЬКО файлов. И еще, чтобы после выбора файлов, их названия отображались в ListBox'е???

БОЛЬШОЕ СПАСИБО!

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 17.03.04 21:33

Тут стоит определиться хотим ли мы использовать сторонние ocx'ы... Если хотим (а по вопросу оно видно ;), не в обиду сказано, то подключаем Microsoft CommonDilog, или чо-то в этом роде, т.к. никогда не пользовался и не собираюсь... А дальше, полазаем по свойствам, поставим флажок Multiselect (или что подобное), после выбора вернется строка с именами всех файлов, в ocx'ном не знаю, а в API'шном все имена разделены то-ли vbCrLf, то-ли vbNullChar... Далее функцией Split() разбиваешь эту строку на массив и циклом добавляешь в листбокс...

Если же ты не хочешь использовать MS CommonDilog, то поищи модуль/класс DlgEx (обычно cDlgEx), там почти все то же самое, но на API, если туда не залезать, то все получится просто :)

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 17.03.04 21:36

Пример из API-Guide:

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME

lStructSize As Long

hwndOwner As Long

hInstance As Long

lpstrFilter As String

lpstrCustomFilter As String

nMaxCustFilter As Long

nFilterIndex As Long

lpstrFile As String

nMaxFile As Long

lpstrFileTitle As String

nMaxFileTitle As Long

lpstrInitialDir As String

lpstrTitle As String

flags As Long

nFileOffset As Integer

nFileExtension As Integer

lpstrDefExt As String

lCustData As Long

lpfnHook As Long

lpTemplateName As String

End Type

Private Sub Form_Load()

'KPD-Team 1998

'URL: http://www.allapi.net/

'E-Mail: KPDTeam@Allapi.net

Dim OFName As OPENFILENAME

OFName.lStructSize = Len(OFName)

'Set the parent window

OFName.hwndOwner = Me.hWnd

'Set the application's instance

OFName.hInstance = App.hInstance

'Select a filter

OFName.lpstrFilter = "Text Files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)

'create a buffer for the file

OFName.lpstrFile = Space$(254)

'set the maximum length of a returned file

OFName.nMaxFile = 255

'Create a buffer for the file title

OFName.lpstrFileTitle = Space$(254)

'Set the maximum length of a returned file title

OFName.nMaxFileTitle = 255

'Set the initial directory

OFName.lpstrInitialDir = "C:\"

'Set the title

OFName.lpstrTitle = "Open File - KPD-Team 1998"

'No flags

OFName.flags = 0

'Show the 'Open File'-dialog

If GetOpenFileName(OFName) Then

MsgBox "File to Open: " + Trim$(OFName.lpstrFile)

Else

MsgBox "Cancel was pressed"

End If

End Sub

Для мультиселекта используй флаг Const OFN_ALLOWMULTISELECT As Long = &H200

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 17.03.04 21:46

Только замечу, что для выделения множества файлов, это лучше не использовать, т.к. придется изменять:

OFName.lpstrFileTitle

OFName.nMaxFile = 255

OFName.nMaxFileTitle = 255

При этом неизвестна длинна получаемого буфера а следовательно мы не можем точно определить его размер и в нужном кол-ве выделить память :(
Я когда-то дня три с этим бился, решения так и не нашел :(

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 17.03.04 21:56

Я не уверен, но кажется при недостаточном размере буфера функция возвращает ERROR_MORE_DATA и помещает в структуру OPENFILENAME требуемый размер строки...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам