VB.net - Listbox Datenhinterlegung
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
array
code
datei
dateiname
datenbank
idee
index
item
ordner
pfad
point
problem
programm
sender
spalten
speichern
string
system
url
windows
-
Hallihallo
Ich habe 3 Listboxen, in denen Pfade von Dateien stehen.
Ich möchte allerdings nicht den ganzen Pfad sehen, sondern jeweils nur den Namen. Das ist auch kein Problem, allerdings muss ich den Pfad irgendwo speichern, da die selectierte Datei beim Klicken auf die Listbox geöffnet werden soll.
Das ganze läuft nach ungefähr dieses Schema:
***********
listbox1
(variable1)
Drag & Drop innerhalb der listbox1
*click* -> run programm (selectedIndex); Pfad = (variable1(selectedIndex))
***********
***********
listbox2
(variable2)
Drag & Drop nach listbox1
***********
***********
listbox3
(variable3)
Drag & Drop nach listbox1
***********
Meine erste Idee war einfach die Pfade in einer variable in Form einer Liste zu speichern, wobei dann natürlich immer der zb 5. Index in der Listbox (name der Datei) zum 5. Index aus der Variable (Pfad der Datei) passt.
Das Problem ist nur mit dem Drag & Drop, weil ich es nicht schaffe die variablen mitzuziehen.
Ich habe leider garkeine Idee wie ich das lösen kann.
zum Drag & Drop nutze ich volgendes:
Private Sub frm_player_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Drag & Drop erlauben und events für listen zuweisen lst_playlist.AllowDrop = True lst_played.AllowDrop = False lst_files.AllowDrop = False AddHandler lst_playlist.MouseDown, AddressOf List_MouseDown AddHandler lst_playlist.DragOver, AddressOf List_DragOver AddHandler lst_playlist.DragDrop, AddressOf List_DragDrop AddHandler lst_playlist.DragLeave, AddressOf List_DragLeave AddHandler lst_played.MouseDown, AddressOf List_MouseDown AddHandler lst_played.DragOver, AddressOf List_DragOver AddHandler lst_played.DragDrop, AddressOf List_DragDrop AddHandler lst_played.DragLeave, AddressOf List_DragLeave AddHandler lst_files.MouseDown, AddressOf List_MouseDown AddHandler lst_files.DragOver, AddressOf List_DragOver AddHandler lst_files.DragDrop, AddressOf List_DragDrop AddHandler lst_files.DragLeave, AddressOf List_DragLeave end sub Private Sub List_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) ' Select the item at this point. Dim this_list As ListBox = DirectCast(sender, ListBox) this_list.SelectedIndex = this_list.IndexFromPoint(e.X, e.Y) If this_list.SelectedIndex < 0 Then Exit Sub m_DragSource = this_list this_list.DoDragDrop( _ this_list.SelectedItem.ToString, _ DragDropEffects.Move) m_DragSource = Nothing End Sub ' Highlight the item under the mouse. Private Sub List_DragOver(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) If m_DragSource Is Nothing Then Exit Sub e.Effect = DragDropEffects.Move Dim this_list As ListBox = DirectCast(sender, ListBox) Dim pt As Point = _ this_list.PointToClient(New Point(e.X, e.Y)) Dim drop_index As Integer = _ this_list.IndexFromPoint(pt.X, pt.Y) this_list.SelectedIndex = drop_index End Sub Private Sub List_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Dim this_list As ListBox = DirectCast(sender, ListBox) this_list.SelectedIndex = -1 End Sub ' Accept the drop. Private Sub List_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Dim this_list As ListBox = DirectCast(sender, ListBox) MoveItem(e.Data.GetData(DataFormats.Text).ToString, _ m_DragSource, this_list, e.X, e.Y) End Sub ' Move the value txt from drag_source to drop_target. Private Sub MoveItem(ByVal txt As String, ByVal drag_source As ListBox, _ ByVal drop_target As ListBox, ByVal X As Integer, ByVal Y As Integer) Dim drop_index As Integer = drop_target.SelectedIndex If drop_index < 0 Then drop_index = drop_target.Items.Add(txt) Else drop_target.Items.Insert(drop_target.SelectedIndex, txt) End If drop_target.SelectedIndex = drop_index If drag_source Is drop_target Then Dim target_index As Integer = drag_source.FindStringExact(txt) If target_index = drop_index Then _ target_index = drag_source.FindStringExact(txt, target_index) drag_source.Items.RemoveAt(target_index) Else drag_source.Items.Remove(txt) End If End Sub
Ich hoffe jemand von euch hat da eine Idee und kann mir weiterhelfen.
Schonmal vielen Dank und Mit freundlichen Grüßen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo programtools,
ich habe eine Idee wie du das machen könntest.
Lege eine Access-Datenbank und leg dort eine Tabelle an. In dieser legst du dann 2 Spalten an. Eine heißt DateiName die andere DateiPfad (nur als Beispiel). Nun kannst du in jeder Listbox die Einträge verschieben wie du willst.
Wenn du jetzt auf einen Eintrag klickst dann muss das Programm in der Datenbank nachschauen wo der DateiName steht und kann dann in der gleichen Zeile den DateiPfad auslesen und öffnen.
Hier noch ein Link zum Thema Datenbankprogrammierung:http://openbook.galileocomputing.de/einstieg_vb_2010/einstieg_vb_2010_kap_08_001.htm#mj89b49eca1cb29ad5cb88691c6b971208
Das hört sich komplizierter an als es ist aber wenn du noch Fragen hast dann stell sie.
Gruß S.Brosch
Beitrag zuletzt geändert: 20.11.2010 10:35:03 von software-brosch -
Ich muss gestehen, ich bin zu faul, um den gesamten Source-Code durchzuarbeiten, und auch nicht so der VB-Könner, aber ich würde so vorgehen, dass ich in einem Array die vollen Pfadnahmen vorhalten würde, und bei einem Klick, wenn vom gekürzten Namen der volle Pfad+Name gebraucht wird, diesen aus dem Array beziehen (in meiner "Muttersprache" Delphi würde ich kein Array nutzen, sondern eine TStringList, da dort das umsortieren von Einträgen wesentlich leichter von der Hand geht. Ich weiß allerdings nicht, ob's in VB was Adäquates dazu gibt, das sollte jedoch ein VB-Programmierer benennen können ...).
Extra eine Datenbankanbindung dafür zu implementieren finde ich weder effizient, noch sinnvoll (eher das Gegenteil :D). -
Vielen Dank erstmal euch zwei!
Ich habe es so ungefähr gemacht wie software-brosch es gesagt hat
Dim tracks_lstfiles As New List(Of String)
Allerdings habe ich ja genau hier das Problem mit dem gleichhalten von listbox und dahinterstehender variable.
An eine datenbank habe ich auch schon gedacht bzw datei oä, hat allerdings den Nachteil, dass die Datei "hallihallo.txt" sowohl im Ordner "C:\Users\User1\Desktop" als auch im Ordner "C:\Programme\Programm1\dateien" liegen kann.
Ich gebe zu das ist nicht allzueinfach.
Ich werde mein Glück mal versuchen und dann posten was draus geworden ist.
Über weitere Ideen und Hilfestellungen würde ich mich natürlich nach wie vor sehr freuen!
Gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage