Leere Listbox in einem Formular

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

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Leere Listbox in einem Formular

    Hallo,

    ^ich rufe folgendermaßen ein Formular auf:

    VB.NET-Quellcode

    1. EigeneObjekteFormular.showdialog(me)


    Das Formular öffnet sich normal. Es enthält 4 Schaltflächen, ein Label und eine Listbox ohne Einträge. Sobald diese Listbox den Focus erhält, wird das Programm mit folgender Meldung unterbrochen:

    System.ArgumentException: "Der Wert liegt außerhalb des erwarteten Bereichs."

    Wenn sich allerdings mindestens ein Eintrag in der Listbox befindet, so funktioniert alles fehlerfrei.

    Woran kann das liegen?

    Danke schon mal im Voraus.
    @tron25
    Wahrscheinlich weil du auf etwas zugreifst, was nicht existiert. Wahrscheinlich ist ein unsichtbares (Nicht wörtlich gemeint) Objekt dort drin.

    Disable die Liste enfach, bis du ein Element in der Liste hast.
    @tron25 Zeig mal den Code wo der Fehler auftritt. Die Fehlermeldung zeigt dir genau wo dieser Auftritt...

    Der Index der Elemente in der ListBox beginnt mit 0 heißt:
    1. Element - Index 0
    2. Element - Index 1
    usw.
    prüfe ob du das berücksichtigt hast.
    gibt es zum entsprechenden Index kein Element erhältst du einen Fehler der deinem Fehler ähnlich ist.

    @a.b_om mach mal ein Beispiel zum Thema „unsichtbares Objekt“ ...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @tron25 Ich denke mal, das ist son Ranz VB6-Call.
    Gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    =====
    Das isses nich.
    Mach ein neues Projekt mit Hauptfenster und diesem Dialog-Design.
    Das funktioniert nämlich.
    Sieh Dir an, was in Deinem anderen Projekt so für "Schad"-Code drin ist und versuche, den Fehler zu reproduzieren, indem Du einzelne Zeilen Code übernimmst.
    Wenn es nicht zu groß ist:
    Zippe Dein bereinigtes Projekt (ohne bin- und obj-Verzeichnis) und hänge es an Deinen Post an.
    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“ ()

    Vielen Dank für die rege Diskusion ;-).

    Ich habe nun folgendes gemacht:
    1. Visual Studio 2019 geupdated
    2. Net Framework 4.8 installiert
    3. Ein neues Projekt mit nur einem Formular erstellt

    Das Formular besitzt nur eine Schaltfläche und eine Listbox und enthält folgenden Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. End
    4. End Sub
    5. End Class


    Sobald die Listbox den Focus erhält, unterbricht das Programm und zeigt auf die Zeile mit dem "End".

    Die Idee mit der deaktivierten Listbox ist in diesem Fall auch keine Gute, denn das Programm soll auch von Blinden bedient werden. Da gibt es dann ein Problem, wenn die Listbox mal mit dem Cursor erreicht werden kann und mal nicht. Abgesehen davon finde ich diese Notlösung persönlich nicht so gut. Es muß doch einen anderen Weg geben, eine leere Listbox als solche darzu stellen und den Focus hineinzusetzen. In diesem Fall hat der Index natürlich auch den Wert -1.

    Vorher habe ich in meinem großen Projekt auch den folgenden Weg versucht:

    VB.NET-Quellcode

    1. using EigeneObjekteFenster as new EigeneObjekteFormular
    2. EigeneObjekteFenster.showdialog(me)
    3. end using


    In diesem Fall ist das Programm auch abgestürzt, sobald die Listbox den Focus erhielt und keine Einträge hatte.

    Falls ihr euch fragt, was das Fenster machen soll:
    Mit dem Programm können Grafiken erzeugt werden, die auf einem Brailledrucker für Blinde ausgedruckt werden können und somit durch die gestanzten Punkte tastbar sind. Mit diesem speziellen Fenster sollen oft verwendete Formen und Muster gespeichert werden, um sie nicht jedesmal neu zeichnen zu müssen.
    Du bist der Bitte aus Deinem Vorpost nicht nachgekommen, was die Fehlerfindung erschwert.
    Dann eben der kompliziertere Weg, der vielleicht aber den Lerneffekt verbessert: Finde den relevanten Unterschied zwischen Deinem und dem hier hochgeladenen Projekt und sag uns, wo bei Dir der Fehler liegt.
    btw: End? Bitte nicht, Grund in diesem Thread.
    Dateien
    • WindowsApp1.zip

      (21,68 kB, 126 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hast du im Testprojekt eine neue ListBox aus dem Designer gezogen oder die aus dem anderen Projekt rein kopiert? Ist in der ListBox via Designer evtl. ein SelectedIndex zugewiesen worden?

    Was auch ganz geil wäre, wenn du uns mal die ganze Fehlermeldung posten würdest...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich habe das Projekt heruntergeladen und gestartet. Leider ergab es das gleiche Ergebnis.

    In meinem Projekt habe ich eine neue Listbox aus den Tools gezogen.

    Hier die Fehlermeldung:
    System.ArgumentException: "Der Wert liegt außerhalb des erwarteten Bereichs."
    Details:
    $exception
    Markierte Zeile:
    EigeneObjekteFenster.ShowDialog(Me)

    Nun habe ich folgende Kuriosität herausgefunden:
    Ich verwende einen Screenreader Namens NVDA. Ist dieser eingeschaltet, so tritt der beschriebene Fehler auf. Ist er abgeschaltet, funktioniert alles gut. Die gleichen Ergebnisse bekomme ich auch, wenn ich die Sprachausgabe von Windows benutze. Ich werde mal eine ältere Version von NVDA versuchen.
    @tron25 Zippe ein bereinigtes Projekt, das den Effekt reproduziert, siehe Post #7.
    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!
    @tron25 Dann kannst Du ja diesen Thread zumachen:
    Doppelklick auf das abgerundete Quadrat neben dem Thread-Titel.
    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!
    Sorry, aber ich kann mit der Sprachausgabe kein Quadrat finden. Kannst du das für mich bitte machen? Leider gibt es auf dieser Seite einige Elemente, die für Blinde nicht bzw. schwer zu erreichen sind. Die Labels beim Erstellen eines neuen Themas sind beispielsweise solche Elemente.

    Vielen Dank

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