OpenFileDialog oberste Datei auswählen
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von henrikl2000.
-
-
henrikl2000 schrieb:
oberste Datei aus zu wählen?OpenFileDialog
fernsteuern.
Hole Dir die betreffenden Dateien in ein FileInfo-Array und nimm die Datei mit dem Index 0:
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Danke für deine Antwort.
Das ergibt leider nicht ganz was ich suche aber vielleicht geht das gar nicht.
Die Sortierung muss anders sein.
Dein Code zeigt mir die die Nummer 3 in der OpenFileDialog gezeigte.
Das Filter des OpenFileDialogs ist auf *.hdc gesetzt.
Ich habe mir gedacht dass man wie mit Tab in die Datei Liste des OpenFileDialog kommen könnte.
Trotzdem vielen dank -
henrikl2000 schrieb:
Nummer 3
Kannst Du mal die Reihenfolge bei Dir in beiden Fällen posten? (Screenshot)Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
@henrikl2000
Snipping Tool => Fenster Snip (oder wie das auf Deutsch heißt) => Speichern
Forum => Erweitere Antwort => Dateianhänge => Auswählen und hochladen (=> im Text klicken => Dateianhang einfügen)
Das in Klammern ist optional.
"Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
"Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln -
-
-
henrikl2000 schrieb:
Hier die BilderFalls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
henrikl2000 schrieb:
wie im Bild
Der Unterschied liegt in der Sortierung numerischer Präfixe: 900 < 2000 <=> "900" > "2000".
Ich verwende den "Salamander", da kann man die Sortierung vorgeben (im Explorer hab ich nix äquivalentes gefunden):
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Gilt das auch für OpenFileDialog?
Ich meine wie Explorer. Wenn ja und man das nicht anders sortieren kann muss ich mir was anderes einfallen lassen.
Die Bilder die ich hochgeladen habe sind nicht direkt vom Explorer sondern von meinem Projekt (OpenFileDialog).
Das Problem ist hier ich kenne die Dateien nicht vor öffnen von OpenFileDialog. Ansonsten könnte ich einer der Dateien auswählen (.FileName) -
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
henrikl2000 schrieb:
wie Explorer?OpenFileDialog
sortiert wie der Explorer,GetFiles()
sortiert anders.
Da müsstest Du eine explizite Sortierroutine schreiben, Gugst Du hier.
-----
Neues Projekt, Form mit 2 Buttons und ListBox.
Spoiler anzeigen VB.NET-Quellcode
- Public Class Form1
- Private fis() As IO.FileInfo
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- fis = New IO.DirectoryInfo("c:\temp\TestSort").GetFiles("*.*", IO.SearchOption.TopDirectoryOnly)
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Array.Sort(fis, New MyComparer())
- Me.ListBox1.Items.Clear()
- Me.ListBox1.Items.AddRange(fis)
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Array.Sort(fis, New MyComparerExplorer())
- Me.ListBox1.Items.Clear()
- Me.ListBox1.Items.AddRange(fis)
- End Sub
- End Class
- Public Class MyComparerExplorer
- Implements IComparer(Of IO.FileInfo)
- Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _
- ByVal s1 As String, _
- ByVal s2 As String) As Int32
- Public Function Compare(ByVal x As IO.FileInfo, ByVal y As IO.FileInfo) As Integer _
- Implements System.Collections.Generic.IComparer(Of IO.FileInfo).Compare
- Return StrCmpLogicalW(x.FullName, y.FullName)
- End Function
- End Class
- Public Class MyComparer
- Implements IComparer(Of IO.FileInfo)
- Public Function Compare(ByVal x As IO.FileInfo, ByVal y As IO.FileInfo) As Integer _
- Implements System.Collections.Generic.IComparer(Of IO.FileInfo).Compare
- Return String.Compare(x.FullName, y.FullName)
- End Function
- End Class
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()
-
Danke dir vielmals.
Ich habe allerdings ein Problem das richtig hin zu bekommen.
Ich habe es versucht mit :
VB.NET-Quellcode
- Public Class clsCompare Implements IComparer(Of String) Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _ ByVal s1 As String, _ ByVal s2 As String) As Int32 Public Function Compare(ByVal x As String, ByVal y As String) As Integer _ Implements System.Collections.Generic.IComparer(Of String).Compare Return StrCmpLogicalW(x, y) End FunctionEnd Class
In mein Form:
VB.NET-Quellcode
- If Directory.GetFiles(dlgFile.InitialDirectory, "*" & FileExt).Count > 0 Then
- Dim fi() As FileInfo = New DirectoryInfo(dlgFile.InitialDirectory).GetFiles("*.hdc", SearchOption.TopDirectoryOnly)
- Dim NyFi As String() = {}
- For i = 0 To fi.Length - 1
- NyFi(i) = fi(i).FullName
- Debug.Print(fi(i).FullName)
- Next
- Array.Sort(NyFi, New clsCompare())
- dlgFile.FileName = NyFi(0) ' fi(0).Name
- Else
- dlgFile.FileName = ""
- End If
Ich erhalte ein Index out of range exception.
Was mache ich hier falsch? -
henrikl2000 schrieb:
Was mache ich hier falsch?henrikl2000 schrieb:
- Nimm nicht die
InitialDirectory
, das ist ein Input, kein Output. - Wenn Du einen Pfad vorgeben willst, nimm statt eines
OpenFileDialog
einenFolderBrowserDialog
. - Du zählst Dateien mit der Extension
FileExt
und holst dann Dateien mit der Extension"*.hdc"
.
Es knallt, wenn beide verschieden sind.
Du listets die Dateien 2 Mal auf. - Du erstellst ein zweites Array, das Du nicht benötigst.
- Rufe
Array.Sort()
nur dann auf, wenn auch Elemente da sind. - Du hast meinen Sorter nicht verstanden
Spoiler anzeigen VB.NET-Quellcode
- Imports System.IO
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Using dlgFile As New FolderBrowserDialog
- dlgFile.SelectedPath = "c:\temp\testsort"
- TextBox1.Text = ""
- If dlgFile.ShowDialog <> Windows.Forms.DialogResult.OK Then
- Return
- End If
- Dim fi() As FileInfo = New DirectoryInfo(dlg.SelectedPath).GetFiles("*.hdc", SearchOption.TopDirectoryOnly)
- 'Dim fi() As FileInfo = New DirectoryInfo(dlgFile.SelectedPath).GetFiles("*.txt", SearchOption.TopDirectoryOnly)
- If fi.Length = 0 Then
- Return
- End If
- Array.Sort(fi, New clsCompare())
- TextBox1.Text = fi(0).FullName
- End Using
- End Sub
- End Class
- Public Class clsCompare
- Implements IComparer(Of FileInfo)
- Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" ( _
- ByVal s1 As String, _
- ByVal s2 As String) As Int32
- Public Function Compare(ByVal x As FileInfo, ByVal y As FileInfo) As Integer _
- Implements System.Collections.Generic.IComparer(Of FileInfo).Compare
- Return StrCmpLogicalW(x.FullName, y.FullName)
- End Function
- End Class
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! - Nimm nicht die
-
-
Ähnliche Themen
-
nieroster - - Sonstige Problemstellungen
-
goodfella64 - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- henrikl2000 (9)
- RodFromGermany (7)
- Plexian (1)
- BeatsleigherXDA (1)