# Listboxitem mit Doppelklick öffnen



## stoff (8. Januar 2005)

Hallo Zusammen

Ich möchte mittels Doppelklick eine Listboxeintrag mit Excel öffnen.
Kann mir jemand den Code angeben. Ich kann zwar einen bestimmten Eintrag per Pfadangabe öffnen aber wie teile ich bei mehreren Einträgen mit, welches der Doppelgeklickte ist.

Form hat 2 Textboxen,4 Labels, 1 Listbox, 1 Commandbutton





Option Explicit


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Declare Function FindFirstFile Lib "kernel32" _
Alias "FindFirstFileA" (ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" _
Alias "FindNextFileA" (ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal _
hFindFile As Long) As Long
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Const MAX_PATH = 259
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_COMPRESSED = &H800
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

Private Sub Form_Load()
Text1.Text = "E:\Rechnungen"
Text2.Text = "*.*"
End Sub
Private Sub Command1_Click()
Dim Files() As String, X&
Dim DatCnt%, DirCnt%
ReDim Files(0 To 0)
Call GetAllFiles(Text1.Text, Text2.Text, Files)
List1.Clear
For X = 0 To UBound(Files) - 1
List1.AddItem Files(X)
If Left$(Files(X), 2) = ">>" Then
DirCnt = DirCnt + 1
Label5.Caption = DirCnt
Label5.Refresh
Else
DatCnt = DatCnt + 1
Label6.Caption = DatCnt
Label6.Refresh
End If
Next X
End Sub
Private Sub GetAllFiles(ByVal Root$, ByVal Patt$, ByRef Field$())
Dim File$, hFile&, FD As WIN32_FIND_DATA
If Right(Root, 1) <> "\" Then Root = Root & "\"
hFile = FindFirstFile(Root & Patt, FD)
If hFile = 0 Then Exit Sub
Do
File = Left(FD.cFileName, InStr(FD.cFileName, Chr(0)) - 1)
If (FD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) _
= FILE_ATTRIBUTE_DIRECTORY Then
If (File <> ".") And (File <> "..") Then
Field(UBound(Field)) = ">>" & Root & File
ReDim Preserve Field(0 To UBound(Field) + 1)
GetAllFiles Root & File, Patt, Field
End If
Else
Field(UBound(Field)) = " " & Root & File
ReDim Preserve Field(0 To UBound(Field) + 1)
End If
Loop While FindNextFile(hFile, FD)
Call FindClose(hFile)
End Sub

Private Sub List1_DblClick()
*?*
End Sub




​Ich hoffe auf den goldenen Tip



Gruss Stoff


----------



## Shakie (8. Januar 2005)

Das geht ganz einfach. Aus der Eigenschaft "ListIndex" kannst du ermitteln, welcher Eintrag gerade markiert ist oder mit der Eigenschaft "Text" kannst du herausfinden, was in dem Eintrag drin steht, der markiert ist:
	
	
	



```
Private Sub List1_DblClick()
Dim strText as String
Dim intIndex as Integer
 
strText = Me.List1.Text
intIndex = Me.List1.ListIndex
 
MsgBox strText, ,"Index: " & intIndex
End Sub
```
Dann brauchst du nur noch Exel bzw "strText" starten.

_Edit:_ Wenn bei der ListBox Multiselect aktiviert ist, dann wird immer der Eintrag zurückgegeben, der zuletzt "geklickt" wurde.


----------



## stoff (8. Januar 2005)

Shakie vielen Dank für deine Antwort. Aber ist leider noch nicht was ich will.
Vielleicht hab ich mich nicht genau ausgedrückt.

Wenn z.B. 12 Dateien in der Listbox angezeigt werden, dann möchte ich dass die Datei die ich doppelklicke mit der Excel-Anwendung geöffnet wird.

Bei deinem Tip öffnet sich eine Msgbox (aber immerhin öffnet sich mal was).

Hoffe, oder bin mir sicher Du kannst mir mochmals weiterhelfen?

Gruss


----------



## Shakie (9. Januar 2005)

Natürlich öffnet sich eine MsgBox....Ich dachte du wärst so schlau und kannst die MsgBox durch das "Exel-Datei-Öffnen" ersetzen!
Schließlich hast du in deinem Code die entsprechende API schon eingebunden...

```
Private Sub List1_DblClick()
ShellExecute Me.hwnd, "open", Me.List1.Text, "", "", 
 
End Sub
```


----------



## stoff (9. Januar 2005)

Nicht schlau oder Grünschnabel (schau unter meinem Namen oben), habe einfach noch sehr wenig Erfahrung.

Aber genau so wie Du's mir nun angegeben hast hatte ich es auch schon doch irgendwas nicht.

Habs jetzt mit drivelist- dirlist- filelistbox und Commandbutton gelöst.
Ist halt ohne Doppelklick.

Danke Dir trotzdem.


----------



## Merlin_78 (9. Januar 2005)

Hi stoff,

ich glaube, daß euch am Ende des Funktionsaufrufs ShellExecute nur ein Parameter für die Darstellung des neuen Fensters fehlt.

Wenn du da noch eine 1 (für das Öffnen im Vollbildmodus) anhängst, müßte es eigentlich funktionieren.

```
ShellExecute Me.hwnd, "open", List1.Text, "", "", 1
```


----------



## stoff (10. Januar 2005)

Hallo Merlin

Jaaaah, genau das fehlt noch, hab ich gedacht. Aber es klappt trotzdem nicht, ich weiss nicht wo der Hase begraben liegt.

Habs jetzt aufgegeben und wie oben beschrieben gelöst.

Danke trotzdem

Stoff


----------

