Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VB DirlistBox soll mit letztgeöffnetem Ordner Starten

Frage Entwicklung VB for Applications

Mitglied: listigerTeppich

listigerTeppich (Level 1) - Jetzt verbinden

27.11.2009 um 13:27 Uhr, 5935 Aufrufe, 26 Kommentare

Hallo beisammen,

ich schreibe an einem kleinen Programm, dass es erlaubt, Dateien aus einem Dateibaum auszuwählen und diese in der Folge zu verschicken. Sehr elegant wäre es wenn das Programm beim Aufruf direkt in den Ordner springt der beim letzten Schließen des Programmes ausgewählt war. Kann mir einer von euch sagen ob/bzw. wie dies umsetzbar ist?

viele Grüße,

Listiger
26 Antworten
Mitglied: TsukiSan
27.11.2009 um 14:46 Uhr
Du musst dir dafür eine "Gedankenstütze" in Form dieser zuletzt geöffneten Ordner bauen.
Das heisst, lege dir entweder einen Schlüssel in der Registry an, der beim Schließen des Programms sich diese Einstellung merkt, oder speichere dir diese Infos in einer gewöhnlichen Datei ab, die dann jedesmal beim Starten des Progis eingelesen und ausgwertet wird.

Gruss
Tsuki
Bitte warten ..
Mitglied: listigerTeppich
27.11.2009 um 15:15 Uhr
Danke Tsuki!

Hört sich nach nem guten Vorhaben an. Die Registry-Variante scheidet bei unserer Umgebung aufgrund fehlender schreibrechte zwar aus, die Datei-Variante klingt aber durchaus vielversprechend. Hättest du, oder ein anderer User, zufällig eine Beispiel-Code-Umsetzung zu dieser Vatiante parat?

Danke und Gruß,

Listiger
Bitte warten ..
Mitglied: TsukiSan
27.11.2009 um 15:37 Uhr
Kein Problem.

Du hast dein Programm mit einer DIR-List und vermutlich auch mit einer DRIVE-List
Dann machst du einfach folgendes beim Schließen deines ProgrammsVB6)
01.
on error resume next 
02.
kill (app.path & "\MyIni.ini" ) 
03.
D = Freefile 
04.
open app.path & "\MyIni.ini" for append as D 
05.
Print # D, Drive.Drive 
06.
Print # D, Dir.Path 
07.
close
Damit kannst du deine letzten Daten abspeichern.
Zum Einlesen nimmst du den "umgekehrten" Fall
01.
D = Freefile 
02.
open app.path & "\MyIni.ini" for Input as D 
03.
Input # D, temp1$ 
04.
Input # D, temp2$ 
05.
close 
06.
Drive.Drive = temp1$ 
07.
Dir.Path = temp2$
So könnte es funktionieren

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
27.11.2009 um 20:43 Uhr
@Tsuki
Zur Frustrationsvorbeugung sollte vielleicht im zweiten Schnipsel in den Zeilen 3 und 4 besser nicht "Print #" stehen ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
27.11.2009 um 23:23 Uhr
@bastla,

oh jesses. Danke! und naklar! Muss
01.
Input # D, temp1$ 
02.
Input # D, temp2$
heissen.

Werd das gleich mal ändern. Wenn das einer liest

Gruss und schönes Wochenende

Tsuki
Bitte warten ..
Mitglied: listigerTeppich
01.12.2009 um 10:38 Uhr
Hallo und Danke euch beiden,

hab eben versucht den Code in mein Programm einzubauen und bin dabei auf einige Schwierigkeiten gestoßen, die ich als VB-Anfänger nich selbst in den Griff bekomme.

der Compiler meckert bei folgendem Punkt:

der befehl "open" wurde nicht deklariert -- muss ich hier evtl. noch eine Bibliothek einbinden?

ich arbeite mit der VB 2008er Entwicklungsumgebung

könnte mir hier einer weiterhelfen?

Gruß,

Listiger
Bitte warten ..
Mitglied: TsukiSan
02.12.2009 um 04:06 Uhr
Hallo listiger Teppich,

da ich mit Vb2008 nichts am Hut habe, verweise ich auf die,die sich damit auskennen.

Gruss
Tsuki
Bitte warten ..
Mitglied: listigerTeppich
07.12.2009 um 09:33 Uhr
Hi Tsuki,

Danke für den Link! Recht kompliziert das ganze, mh naja eigtl würds mir schon reichen wenn mein Programm immer in nem festen Ordner startet, das manövrieren im Dateibaum aber trotzdem noch frei möglich ist. Kannst du mir sagen wie ich das Starten in nem von mir bestimmten Order im Laufwerk "D:\" umsetzen kann?
Bitte warten ..
Mitglied: TsukiSan
08.12.2009 um 02:35 Uhr
Hallo listigerTeppich,

wie schon gesagt, in VB2008 sieht es anders aus, als in VB6 und ich hatte mit VB2008 noch nichts zu tun.
Aber eventuell findest du hier ein passendes Beispiel, welches dir die Anfangsparameter auf "D:\" stellt.
In VB6 würde soetwas so aussehen:
01.
dir1.path = "D:\"
Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
08.12.2009 um 16:12 Uhr
Hallo listiger Teppich!

Möchtest Du nicht mal Deinen Code (bzw den relevanten Teil davon) posten - das könnte es erleichtern, einen passenden Vorschlag zu machen ...

[Slightly OT}
@Tsuki
... hatte mit VB2008 noch nichts zu tun.
Falls sich das ändern solle vielleicht nützlich (zumindest aber gratis ): "Visual Basic 2008 - Das Entwicklerbuch"
[/Slightly OT]

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
09.12.2009 um 06:02 Uhr
@bastla,

danke für den Link! Falls es mal für mich aktuell werden sollte - VB2008 habe ich bereits, aber noch nicht installiert, weil "no use" - dann gibt es sehr viele Infos im Netz und auch hier in unserem Forum sehr viele patente Menschen, die mir dann weiterhelfen können

Vielen Dank und viele Grüße

Tsuki
Bitte warten ..
Mitglied: listigerTeppich
04.01.2010 um 10:25 Uhr
Hallo beisammen,

Sorry, ich war leider länger nicht da (Krankheit, Urlaub)..ich hoffe ihr schaut trotzdem noch ab und an hier rein. Das Problem den Anfangspfad meiner Dateiauswahl auf den letzgeöffneten Pfad zu legen besteht immer noch. Die vorgeschlagenen Lösung mittels einer ausgelagerten .ini Datei gefällt mir sehr gut. Nur weiss ich eben nicht wie ich das unter vb.net (VB 2008) hinbekomme. Der relevante Codeteil meines Programmes sieht so aus:

01.
  Private Sub Laufwerk1_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Laufwerk1.SelectedIndexChanged 
02.
        'Laufwerkswechsel an Verzeichnislistenfeld melden 
03.
        On Error Resume Next 
04.
        Verzeichnis1.Path = Laufwerk1.Drive 
05.
    End Sub 
06.
 
07.
    Private Sub Verzeichnis1_Change(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Verzeichnis1.Change 
08.
        'Verzeichniswechsel an Dateilistenfeld melden 
09.
        Datei1.Path = Verzeichnis1.Path 
10.
        Datei1.Refresh() 
11.
    End Sub 
12.
 
13.
    Private Sub Datei1_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Datei1.SelectedIndexChanged 
14.
        'Anzahl der markierten Dateien ermitteln 
15.
        'und in Bezeichnungsfeld ausgeben 
16.
        Dim intAnzahl As Short 
17.
        Dim i As Short 
18.
 
19.
        intAnzahl = 0 
20.
        For i = 0 To Datei1.Items.Count - 1 
21.
            If Datei1.GetSelected(i) = True Then 
22.
                'Markierung vorhanden 
23.
                intAnzahl = intAnzahl + 1 
24.
            End If 
25.
        Next i 
26.
        'ausgeben 
27.
        lblMarkiert.Text = Str(intAnzahl) 
28.
    End Sub
Bitte warten ..
Mitglied: bastla
04.01.2010 um 12:02 Uhr
Hallo listiger Teppich!

Wo in Deinem Programm Du die entsprechende Funktionalität platzierst (insbes das Hinausschreiben des Pfades) musst Du selbst entscheiden - die beiden erforderlichen Codeschnipsel könnten aber etwa so aussehen:
01.
Sub PfadSichern() 
02.
     Dim sw As StreamWriter 
03.
     Dim Ini As String = "D:\Pfad.ini" 
04.
     Dim Pfad As String = Verzeichnis1.Path 
05.
 
06.
     sw = New StreamWriter(Ini, False) 
07.
     sw.WriteLine(Pfad) 
08.
     sw.Close() 
09.
End Sub 
10.
 
11.
Sub PfadSetzen() 
12.
     Dim sr As StreamReader 
13.
     Dim Ini As String = "D:\Pfad.ini" 
14.
     Dim Pfad As String = "D:\" 'Defaultwert 
15.
 
16.
     If File.Exists(Ini) Then 
17.
          sr = New StreamReader(Ini) 
18.
          If Not sr.EndOfStream Then Pfad = sr.ReadLine 
19.
          sr.Close() 
20.
     End If 
21.
 
22.
     Laufwerk1.Drive = Pfad 
23.
     Verzeichnis1.Path = Pfad 
24.
End Sub
Die Variable (oder auch Konstante) "Ini" sollte natürlich besser nur einmal zentral festgelegt werden ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
05.01.2010 um 11:00 Uhr
Jow Prima! Danke Bastla!

war genau das wonach ich gesucht habe. Das wegsichern des Pfades würde ich mit dem Schließen des Programmes verbinden wollen..is auch kein problem soweit..ich tus einfach wegsichern wenn der close button gedrückt wurde..
nur wie schaff ich es, dass ich das PfadSetzen mit dem Programmstart verbinde? Zum Programmstart wird ja keine Action ausgeführt oder?
Bitte warten ..
Mitglied: bastla
05.01.2010 um 11:12 Uhr
Hallo listiger Teppich!
Zum Programmstart wird ja keine Action ausgeführt oder?
Zumindest ein "Form_Load" (zum Code des Ereignisses wie immer per Doppelklick) gibt's sicher auch in Deinem Projekt ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
05.01.2010 um 17:05 Uhr
1A Sache, Problem gelöst ! DANKE Bastla !
Bitte warten ..
Mitglied: bastla
05.01.2010 um 17:11 Uhr
Hallo listiger Teppich!

Freut mich, wenn's klappt.

Grüße
bastla

P.S.: Ich hab' ja eigentlich nur Tsuki San assistiert ...
Bitte warten ..
Mitglied: listigerTeppich
07.01.2010 um 13:09 Uhr
Hallo nochmal !

jo, natürlich auch Danke an Tsuki ! Aja, da die Lösung so wunderbar funktioniert hab ich ein wenig Blut geleckt, und möchte noch mehr Variablen in die .ini-Datei auslagern. Dazu müsste man aber im Programm bestimmen können, welche Variable von welcher Zeile der .ini-Datei gespeist werden soll. Habt ihr evtl. auch hierfür ne Lösung?

Grüße,

Listiger
Bitte warten ..
Mitglied: bastla
07.01.2010 um 17:32 Uhr
Hallo listigerTeppich!

Natürlich kannst Du mehrere Variablenwerte auf diese Art speichern:
01.
Sub WerteSichern() 
02.
     Dim sw As StreamWriter 
03.
     Dim Ini As String = "D:\Pfad.ini" 
04.
     Dim Pfad As String = Verzeichnis1.Path 
05.
 
06.
     sw = New StreamWriter(Ini, False) 
07.
     sw.WriteLine(Pfad) 
08.
     sw.WriteLine(Variable2)  
09.
     sw.WriteLine(Variable3) 
10.
     sw.WriteLine(Variable4) 
11.
     sw.Close() 
12.
End Sub 
13.
 
14.
Sub WerteHolen() 
15.
     Dim sr As StreamReader 
16.
     Dim Ini As String = "D:\Pfad.ini" 
17.
     Dim Pfad As String = "D:\" 'Defaultwert 
18.
     Dim Variable2 As String = "Default" 
19.
     Dim Variable3 As String = "Auch Default" 
20.
     Dim Variable4 As String = "Nochmal Default" 
21.
 
22.
     If File.Exists(Ini) Then 
23.
          sr = New StreamReader(Ini) 
24.
          If Not sr.EndOfStream Then Pfad = sr.ReadLine 
25.
          If Not sr.EndOfStream Then Variable2 = sr.ReadLine 
26.
          If Not sr.EndOfStream Then Variable3 = sr.ReadLine 
27.
          If Not sr.EndOfStream Then Variable4 = sr.ReadLine 
28.
          sr.Close() 
29.
     End If 
30.
 
31.
     Laufwerk1.Drive = Pfad 
32.
     Verzeichnis1.Path = Pfad 
33.
End Sub
Durch das Setzen der Defaultwerte in "WerteHolen" wird für den Fall. dass die "ini"-Datei leer oder unvollständig wäre, vorgebeugt (wobei allerdings nicht Zeilen zwischendurch fehlen dürfen) ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
22.02.2010 um 15:32 Uhr
Hallo Bastla,

jow, klappt echt alles prima, Danke ! Kannst du mir auch bei folgendem problem helfen:
in der erzeugten ini-Datei stehen jetzt verschiedene Werte...bei denen wahrscheinlich kein anderer durchblickt was genau sie darstellen. Gibt es ne Möglichkeit innerhalb der ini-Datei eine Art beschreibenden Text miteinzubringen?

Grüße,

Listiger
Bitte warten ..
Mitglied: bastla
22.02.2010 um 17:21 Uhr
Hallo listiger Teppich!
Gibt es ne Möglichkeit innerhalb der ini-Datei eine Art beschreibenden Text miteinzubringen?
Die gibt es sicher - wie hättest Du's denn gerne?

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
22.02.2010 um 17:56 Uhr
möglichst einfach, eheheh :D

na, ich hab mir vorgestellt, dasses iwie direkt beim schreiben der Werte in die ini.-Datei noch in der selben Zeile mitgegeben wird was genau das für ein Wert ist.
Wie man das umsetzt weiss ich aber nicht :L

wär cool wenn du ne idee hättest :}


Danke schonma und Gruß,


Listiger
Bitte warten ..
Mitglied: bastla
22.02.2010 um 18:11 Uhr
Hallo listiger Teppich!

Absolut ungetestet etwa so:
01.
Sub WerteSichern() 
02.
     Dim sw As StreamWriter 
03.
     Dim Delim As String = "|" 
04.
     Dim Ini As String = "D:\Pfad.ini" 
05.
     Dim Pfad As String = Verzeichnis1.Path 
06.
 
07.
     sw = New StreamWriter(Ini, False) 
08.
     sw.WriteLine(Pfad) 
09.
     sw.WriteLine(Variable2 & Delim & "Erklärung der Variablen2")  
10.
     sw.WriteLine(Variable3 & Delim & "Hinweis zur Variablen3") 
11.
     sw.WriteLine(Variable4 & Delim & "Info über Variable4") 
12.
     sw.Close() 
13.
End Sub 
14.
 
15.
Sub WerteHolen() 
16.
     Dim sr As StreamReader 
17.
     Dim Delim As String = "|" 
18.
     Dim Ini As String = "D:\Pfad.ini" 
19.
     Dim Pfad As String = "D:\" 'Defaultwert 
20.
     Dim Variable2 As String = "Default" 
21.
     Dim Variable3 As String = "Auch Default" 
22.
     Dim Variable4 As String = "Nochmal Default" 
23.
 
24.
     If File.Exists(Ini) Then 
25.
          sr = New StreamReader(Ini) 
26.
          If Not sr.EndOfStream Then Pfad = sr.ReadLine 
27.
          If Not sr.EndOfStream Then Variable2 = Split(sr.ReadLine, Delim)(0) 
28.
          If Not sr.EndOfStream Then Variable3 = Split(sr.ReadLine, Delim)(0) 
29.
          If Not sr.EndOfStream Then Variable4 = Split(sr.ReadLine, Delim)(0) 
30.
          sr.Close() 
31.
     End If 
32.
 
33.
     Laufwerk1.Drive = Pfad 
34.
     Verzeichnis1.Path = Pfad 
35.
End Sub
Das Trennzeichen ("Delim"; im Beispiel oben "|") solltest Du so wählen, dass es nicht auch innerhalb der Variablenwerte vorkommt.

Geschrieben werden so immer die vorgegebnen Kommentare (zB "Erklärung der Variablen2") - Änderungen an den Kommentaren, die etwa durch direktes Editieren der "ini"-Datei entstanden sind, gehen dabei verloren ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
04.03.2010 um 16:40 Uhr
Hallo Bastla!

jow, das sieht schon echt gut aus, Danke! Hab nur nochn echt bescheuertes Problem mit der Umsetzung. Wenn ich z.B. eine Variable "Datum" hab, und diese mit nem Wert aus der ini-Datei befüllen will, der streamloader aber in der form_load Sub steht, die Variable "Datum" aber z.B. in ner Button_Click -Sub steht, wie bekomm ich das hin, dass die Variable Datum der Button Click Sub mit den Werten der ini-Datei gefüttert wird?

Hoffentlich war die noob Frage wenigstens einigermaßen verständlich gestellt :D

Danke und Gruß,

Listiger
Bitte warten ..
Mitglied: bastla
04.03.2010 um 16:47 Uhr
Hallo listiger Teppich!

Deklariere die entsprechende Variable noch vor dem ersten Sub ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
19.03.2010 um 11:53 Uhr
Besten Dank ! Lappt alles wunderbar :D
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...