Darstellungsfehler bei OpenFileDialog

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 80 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Darstellungsfehler bei OpenFileDialog

    Hallo Leute,

    habe ein winziges Problem mit dem OpenFileDialog.
    Hier erstmal der Code dazu:

    VB.NET-Quellcode

    1. Private Sub ExcelImport(sender As Object, e As EventArgs)
    2. Dim OpenFileDialog1 As New OpenFileDialog
    3. OpenFileDialog1.Filter = "Excel 2007 Format|*.xls|Excel 2010 Format|*.xlsx"
    4. OpenFileDialog1.FilterIndex = 1
    5. OpenFileDialog1.Title = "Excel-Datei öffnen ..."
    6. OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
    7. If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    8. Dim fileName As String = OpenFileDialog1.FileName
    9. Else
    10. Exit Sub
    11. End If
    12. End Sub


    Zur Laufzeit wird der Dialog dann so angezeigt:



    Und beim Schließen des Dialogs meckert der Compiler:




    Ich bin echt ratlos.

    affrop schrieb:

    so angezeigt
    Der Code arbeitet korrekt, ggf. kannst Du ihn etwas schönen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Using dlg As New OpenFileDialog
    3. dlg.Filter = "Excel Dateien|*.xls;*.xlsx|Alle Dateien|*.*"
    4. dlg.Title = "Excel-Datei öffnen ..."
    5. dlg.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
    6. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    7. Exit Sub
    8. End If
    9. Dim fileName As String = dlg.FileName
    10. End Using
    11. End Sub
    Fang an und probier mal ein ganz anderes Verzeichnis, ggf. greift er beim Inhalt dieses Verzeichnisses iwie daneben.
    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!
    Deine Filter sehen komisch aus, füg mal das so ein:

    VB.NET-Quellcode

    1. Dim ofd As New OpenFileDialog()
    2. ofd.Title = "Excel-Datei öffnen..."
    3. ofd.InitialDirectory = "c:\"
    4. ofd.Filter = "Excel 2007 (*.xls)|*.xls|Excel 2010 (*.xlsx)|*.xlsx"
    5. ofd.FilterIndex = 1
    6. If ofd.ShowDialog() = DialogResult.OK Then
    7. Dim fileName As String = ofd.FileName
    8. End If


    EDIT: oder das von @RodFromGermany :D
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    so. habs mal mit dem Environment statt My.Computer versucht und bin durch alle SpecialFolder durch.
    Ergebnis ist, dass die Anzeige des Dialoges sich nicht geändert hat. Habe aber mal versucht etwas damit zu arbeiten (man weiß ja ungefähr wo was ist bei den dingern).
    Dateiname eingeben klappt, Filterauswahl geht auch und die beiden Button Ok und Abbrechen funktionieren auch.
    Sobald ich auf Abbrechen drücke oder über das rote Kreuz schließe meckert der Compiler wieder mit der selben Fehlermeldung.
    ?(
    Übrigens ist das selbe Problem wenn ich das Programm erstelle und direkt von Windows ausführen lasse ohne das VS geöffnet ist.
    Und jetzt wird's ganz verrückt: Ich habe genau den selben Code auf der ersten Form des Programmes eingefügt zum Testen. Da wird der Dialog einwandfrei ausgeführt und angezeigt. Nur dort wo er hin soll geht's nicht... ?( ?( ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „affrop“ ()

    affrop schrieb:

    und bin durch alle SpecialFolder durch.
    Fang an mit "C:\Temp\"

    affrop schrieb:

    Sobald ich auf Abbrechen drücke
    Weil Dein Code falsch ist. Du musst bei Abbruch raus aus der Prozedur :!:
    Nimm meinen Code:

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    2. Exit Sub
    3. End If

    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!
    gehts mit c:\? Von welcher Form aus rufst du den dialog auf? bzw. du wirst ja z.b. einen button haben dessen event den dialog aufruft? wen ja, wo liegt dieser button auf welcher form?
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Snaptu“ ()

    also zunächst mal hat der InitialDirectory null Einfluss ausgeübt. Habe dort alles mögliche versucht und nichts hats gebracht.
    nun zur Struktur des Proggi:
    Ich habe eine Form1, diese ist das Startformular. Auf Form1 gibt's ein TollStripMenu mit nem Item "Auftragsliste". Wenn ich da drauf klicke öffnet sich Form2, welche mittels eines DGV die vorhanden Aufträge anzeigt. In der Form2 kann ich einen neuen Auftrag anlegen worauf sich Form5 und öffnet und Form2 schließt. In Form5 muss ich dann ein Leistungsverzeichnis für diesen Auftrag anlegen, das geht manuell oder per Excel-Import. Und für diesen Excel-Import brauche ich den OFD. Der OFD wird geöffnet durch ein Button-Klick in dem ToolStripMenu auf Form5. Der ToolStripButton ist mit Text und Icon versehen. Zu diesem Zeitpunkt sind nur die Form1 und die Form5 geöffnet. Alle anderen sind CLOSED nicht HIDE.
    Interessant ist, lege ich den OFD auf Form1 geht's einwandfrei. Habe die Form5 mal in ein komplett neues Projekt extrahiert (also nur die Form5 als eigenes Projekt) und dort ebenfalls tadellos.

    affrop schrieb:

    ebenfalls unverändert....
    Poste bitte mal Deinen aktuellen Code.
    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!

    VB.NET-Quellcode

    1. Private Sub ExcelImport(sender As Object, e As EventArgs)
    2. Dim OpenFileDialog1 As New OpenFileDialog
    3. OpenFileDialog1.Filter = "Excel Dateien|*.xls;*.xlsx|Alle Dateien|*.*"
    4. OpenFileDialog1.FilterIndex = 1
    5. OpenFileDialog1.Title = "Excel-Datei öffnen ..."
    6. OpenFileDialog1.InitialDirectory = "C:\Temp\"
    7. If OpenFileDialog1.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    8. Exit Sub
    9. End If
    10. Dim fileName As String = OpenFileDialog1.FileName
    11. End Sub


    Der Prozeduraufruf erfolgt über diesen Code:

    VB.NET-Quellcode

    1. Private Sub ToolStripButton3_Click(sender As Object, e As EventArgs) Handles ToolStripButton3.Click
    2. Call ExcelImport(sender, e)
    3. End Sub
    wieso rufst du einen Sub wenn du gleich:

    VB.NET-Quellcode

    1. Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    2. Using ofd As New OpenFileDialog
    3. If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    4. Messagebox.show("Hurra")
    5. End If
    6. End Using
    7. End Sub

    machen kannst? und nimm dir den Tipp in Post #3 zu Herzen bzw. wende ihn an.
    Was ich noch gerne sehen würde ist, wie du Form 5 bzw. andere Forms aufrufst.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    egal ob DIM oder USING. Das Ergebnis ist da gleiche. In beiden Fällen tut sich nix.
    Ich calle die Sub einfach weil ich neben dem ToolStripMenu noch ein ContextMenu habe. Außerdem habe ich so ne bessere Übersicht über erledigte Programmfunktionen, da ich nicht regelmäßig daran arbeiten kann. Und so weiss ich auch in 5 Wochen noch wo ich weiter machen muss. Is so ne Macke von mir. Aber das kann ja nicht die Ursache sein.
    Zu deiner Frage der Form-Aufrufe @Snaptu: ganz simpel (und ja ich weiß nicht ganz korrekt) Form5.Show()
    @affrop Bist Du beratungsresistent? Gugst Du Post #3.
    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!
    @RodFromGermany : Erkläre mir mal den Unterschied zwischen Post #3 und dem hier:

    VB.NET-Quellcode

    1. Private Sub ExcelImport(sender As Object, e As EventArgs)
    2. Using OpenFileDialog1 As New OpenFileDialog
    3. OpenFileDialog1.Filter = "Excel Dateien|*.xls;*.xlsx|Alle Dateien|*.*"
    4. OpenFileDialog1.FilterIndex = 1
    5. OpenFileDialog1.Title = "Excel-Datei öffnen ..."
    6. OpenFileDialog1.InitialDirectory = Environment.SpecialFolder.MyDocuments
    7. If OpenFileDialog1.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    8. Exit Sub
    9. End If
    10. Dim fileName As String = OpenFileDialog1.FileName
    11. End Using
    12. End Sub


    Außer das es bei dir eine Click-Ereignisprozedur ist und bei mir gecallt.
    Übrigens habe habe ich den Code bereits mehrfach direkt in die Click-Prozedur des ToolStripButton rein geschoben und wieder raus.
    Es passiert überall das selbe: nix.

    affrop schrieb:

    VB.NET-Quellcode

    1. OpenFileDialog1.Filter = "Excel Dateien|*.xls;*.xlsx|Alle Dateien|*.*"

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. dlg.Filter = "Excel Dateien|*.xls;*.xlsx|Alle Dateien|*.*"
    und Using
    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!
    stell einfach mal den Aufruf deiner Formsen richtig, also so wie es richtig gehört.
    Ich denke das ist vielleicht mit auch das Problem das es auf der anderen Form nicht geht.
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Wildes aufrufen irgendwelcher Formsen rächt sich halt irgendwann...

    Ist Form5 die Projektdetails Form?
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Also RodFromGermany, das Using ist verwendet (Post #15, Code Zeile 3) wenn de mal genau hinschaust ;)
    Habe die Kiste auch mal umgetauft. Der OFD heißt jetzt nicht mehr "OpenFileDialog1" sondern "dlg". Aber genützt hat das auch nix.

    @Snaptu ja Form5 ist die Form für die Projektdetails

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „affrop“ ()

    habe jetzt sämtliche Form-Aufrufe instanziiert.

    VB.NET-Quellcode

    1. Using frm5 As New Form5
    2. frm5. ShowDialog()
    3. End Using


    Das einzige was ich erreicht habe, das mein DGV auf Form2 kein Refresh machen will, wenn ich einen Auftrag hinzugefügt habe. Muss die Form schließen und neu öffnen, das ich den neuen Auftrag sehe. Ansonsten meckert er rum das das DGV an ein IBindingList-Objekt gebunden sein muss um sortiert werden zu können und diverse Einschränken von non-null, unique und foreign-key werden verletzt.

    Der Dialog wird trotzdem nicht korrekt geöffnet.