PDA

View Full Version : Multiselect در CommonDialog



(سیدشریفی)
سه شنبه 12 مهر 1384, 17:34 عصر
با سلام

چندی پیش من مشکلی را در ادامه تاپیکی مربوط به این سوال مطرح نمودم ولی متاسفانه تاپیک مربوطه حذف شد
بهرحال من مشکلم این بود که چطوری میتونم از Multiselect استفاده کنم

من موقع انتخاب کردن Flags در حالت cdlOFNAllowMultiselect به این مشکل برخوردم که وقتی جعبه CommonDialog باز میشد شکل آن بصورت جعبه های قدیمی بود بطوریکه درایو و دایرکتوری و فایلها در جعبه های جدا از هم دیده میشد و مشکلات زیادی ایجاد میشد که راه حل آن را خودم پیدا کردم و فهمیدم که باید Flags را به صورت cdlOFNAllowMultiselect Or cdlOFNExplorer تعریف کنم تا مشکل حل شود .
سوال دیگری که داشتم این است که وقتی FileName این جعبه را میخوانیم فایلهای انتخاب شده بطوری دیده میشوند که با یک کاراکتر فاصله از هم جدا شده اند میخواستم ببینم بهترین و کوتاهترین راه برای بدست آوردن نام تک تک فایلها و مسیری که فایلها در آن قرار دارند چگونه است .
قابل ذکر است که در تاپیکی که قبلا به آن اشاره کردم دوست عزیزی به سوال اخیر من جواب داده بود که به علت حذف شدن آن تاپیک نمیتوانم به آن دسترسی داشته باشم .
از این دوست عزیزمان یا از دوستان دیگر خواهش میکنم زحمت آن را کشیده و کد مربوط به بدست آوردن نام فایلها را در اینجا قرار دهند
با تشکر

(سیدشریفی)
شنبه 16 مهر 1384, 05:22 صبح
لطفا جواب بدید چون خیلی به این کار احتیاج دارم .

(سیدشریفی)
یک شنبه 17 مهر 1384, 08:17 صبح
با سلام من خودم جواب این موضوع را پیدا کردم و در زیر کد آن را مینویسم تا دیگران نیز از آن استفاده کنند .



Dim Flag As Boolean
Dim aa As String, bb As String, Path As String
Dim Mem As Boolean
Dim Pos As Long, x As Long

On Error GoTo Break

With CommonDialog1
.FileName = ""
.CancelError = True
.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
.ShowOpen

If Flag Then
Call MsgBox("Es wurde 'Abbrechen' gew?hlt!")
Else
List1.Clear

'Schauen ob evt. nur eine Datei ausgew?hlt wurde
If InStr(.FileName, Chr$(0)) <> 0 Then
aa = .FileName & Chr$(0)
Pos = 1

Do
'Chr$(0) ist Trennzeichen
x = InStr(Pos, aa, Chr$(0))

If x = 0 Then Exit Do
bb = Mid$(aa, Pos, x - Pos)

If Not Mem Then
'Im ersten Teil befindet sich immer der Pfad
Path = bb
Mem = True
Else
'Pfad ist bereits bekannt, es folgen Dateinamen
List1.AddItem Path & "\" & bb
End If
Pos = x + 1
Loop
Else
'Es wurde nur eine Datei ausgew?hlt
List1.AddItem .FileName
End If
End If
End With
Exit Sub

Break:
If Err.Number = 32755 Then
Flag = True
Resume Next
ElseIf Err.Number = 20476 Then Flag = True
Call MsgBox("Es wurden zu viele Dateien ausgew?hlt!")
End If

mRizvandi
یک شنبه 17 مهر 1384, 18:33 عصر
سلام

توضیح:
شما می تونی با استفاده از Split تمامی نام فایلها رو بدست بیاری و در یک آرایه قرار بدی

Dim aFileName() As String
aFileName = Split(CommonDialg.FileName, Chr(0))

راستش من از اون برنامه سردر نیاوردم. ولی می دونم با این کد اولین عنصر آرایه نام فولدر و مسیر فایلهاست و مابقی عناصر آرایه نام فایلها هستند
:چشمک:

(سیدشریفی)
دوشنبه 18 مهر 1384, 08:59 صبح
جناب mRizvandi
من کد بالا را از یک تاپیک خارجی پیدا کرده ام و این برنامه مسیر فایلها را در متغییر Path قرار میدهد و نام فایلها را در یک Listbox قرار میدهد که میتوان نام فایلها را در یک آرایه قرار داد .
:متعجب:

ولی کدی که شما نوشته اید خلاصه و خیلی راحت میباشد .
از جوابی که دادید خیلی خیلی ممنون .
:kaf:
:تشویق: