Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

I VB .NET kan dette gjøres på en rekke forskjellige måter, blant annet ved å anvende en listeboks. Lag en ny listeboks med navn lstFiles, og legg til følgende kode til formen:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

    ' Fyller listeboksen med alle EXE-filer fra en gitt mappe

    lstFiles.DataSource = IO.Directory.GetFiles("C:\", "*.exe")

 

End Sub

 

Private Sub lstFiles_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lstFiles.MouseDoubleClick

 

    ' Dersom et element er markert, ...

    If lstFiles.SelectedIndex <> 0 Then

        ' ... kjøres det.

        System.Diagnostics.Process.Start(lstFiles.Text)

    End If

 

End Sub

En annen mulighet er å benytte OpenFile-dialogboksene:

Dim oDialog As New OpenFileDialog

 

' Initialiserer innstillinger

With oDialog

    .Filter = "Applications (*.exe)|*.exe"

    .InitialDirectory = "C:\"

End With

 

' Dersom brukeren godkjenner en fil, ...

If oDialog.ShowDialog Then

' ... kjører vi den.

    Diagnostics.Process.Start(oDialog.FileName)

End If

Endret av aadnk
Lenke til kommentar

Tusen takk! gikk for det første eksempellet ditt:) funka som en drømm!

men en ting.. hvis jeg har flere lister på forskjellige tabs.. da får jeg en feil på

Private Sub Form1_Load ellerno..

selv om jeg gjorde om navnet på boxen og i koden..

Lenke til kommentar
hvis jeg har flere lister på forskjellige tabs.. da får jeg en feil på

Private Sub Form1_Load ellerno..

selv om jeg gjorde om navnet på boxen og i koden..

8208497[/snapback]

Dersom du skal legge til flere listebokser, må du legge DataSource i samme prosedyre - dvs. koden skal kun inneholde èn Form_Load. Det kan nok også gagne å bruke AddHandler i denne sammenhengen:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

    ' Initialiserer listebokser

    FillList(ListBox1, "C:\", "*.*")

    FillList(ListBox2, "D:\", "*.*")

 

End Sub

 

Public Sub FillList(ByVal Control As ListBox, ByVal Path As String, ByVal SearchPattern As String)

 

    ' Først initialiser vi innholdet

    Control.DataSource = IO.Directory.GetFiles(Path, SearchPattern)

 

    ' Deretter linker vi prosedyren nedenfor til listeboksens hendelse

    AddHandler Control.MouseDoubleClick, AddressOf FileList_MouseDoubleClick

 

End Sub

 

Private Sub FileList_MouseDoubleClick(ByVal Sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

 

    ' Dersom et element er markert, ...

    If Sender.SelectedIndex <> 0 Then

        ' ... kjøres det.

        System.Diagnostics.Process.Start(Sender.Text)

    End If

 

End Sub

Lenke til kommentar
  • 3 uker senere...
så jeg fulgte det første eksempelet ditt.. men kan jeg få liste boksen til å vise bare navnet på .exe filen istedet for hele adressen?

8346847[/snapback]

Kan hende som følger?

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

    ' Initialiser listeboks

    FillList(lstFiles, "C:\", "*.*")

 

End Sub

 

Public Sub FillList(ByVal Control As ListBox, ByVal Path As String, ByVal SearchPattern As String)

 

    ' Lagre en String-array av alle filene i Tag-egenskapen

    Control.Tag = IO.Directory.GetFiles(Path, SearchPattern)

 

    ' Hent filnavnet i hver filsti og vis dem i listeboksen

    For Each File As String In Control.Tag

        Control.Items.Add(IO.Path.GetFileName(File))

    Next

 

    ' Deretter linker vi prosedyren nedenfor til listeboksens hendelse

    AddHandler Control.MouseDoubleClick, AddressOf FileList_MouseDoubleClick

 

End Sub

 

Private Sub FileList_MouseDoubleClick(ByVal Sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

 

    ' Dersom et element er markert, ...

    If Sender.SelectedIndex <> 0 Then

        ' ... kjøres det.

        System.Diagnostics.Process.Start(Sender.Tag(Sender.SelectedIndex))

    End If

 

End Sub

Endret av aadnk
Lenke til kommentar
hvor i koden skal jeg sette det?

8360934[/snapback]

Som du kan se i innlegget ovenfor mitt forrige, har jeg oppdatert koden til å reflektere de endringer som var nødvendige.

 

For øvrig kan jeg nevne det er linjen Control.Items.Add(File) som skal endres til Control.Items.Add(IO.Path.GetFileName(File)).

Endret av aadnk
Lenke til kommentar

Btw, i VB.NET kan du lage en egen klasse som du legger inn i lista

 

Public Class Item
Protected m_filename As String
Public Property Filename() As String
 Get()
   Return m_filename
 End Get
 Set(value As String)
   m_filename = value
 End Set
End Property
Public Sub LaunchExe()
 System.Diagnostics.Process.Start(m_filename)
End Sub
Public Overrides Function ToString() As String
 Return System.IO.Path.GetFilename(m_filename)
End Function
Public Sub New(filename As String)
 m_filename = filename
End Sub
End Class

 

Disse kan du legge rett inn i ListBoksen.

ToString() metoden sier hva listboksen skal vise.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...