beim ausführen kommt immer Index 5 außerhalb des Bereichs von index

  • VB.NET
  • .NET 4.5

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Drachie.

    beim ausführen kommt immer Index 5 außerhalb des Bereichs von index

    Moin zusammen,

    ich stoße hier gerade an meine grenzen. In einem Programm, welches von Mitarbeitern getätigte Bestellungen erfasst und dann nach SAP importiert werden kommt es immer wieder dazu, das der Report nicht gedruckt werden kann. Anbei der Ausschnitt des Codes wo der Debugger immer stehen bleibt. Vielleicht fällt euch was dazu ein wie das Problem gelöst werden könnte:

    VB.NET-Quellcode

    1. Private Structure stServiceMaterial
    2. Public Anzahl As Integer
    3. Public ArtikelBezeichnung As String
    4. Public ArtikelNummer As String
    5. Public Sub New(p_Anzahl As Integer, p_ArtikelBezeichnung As String, p_ArtikelNummer As String)
    6. Me.Anzahl = p_Anzahl
    7. Me.ArtikelBezeichnung = p_ArtikelBezeichnung
    8. Me.ArtikelNummer = p_ArtikelNummer
    9. End Sub
    10. End Structure
    11. Private Sub printDocServiceMaterialBestellung(p_Sender As Printing.PrintDocument, p_e As Printing.PrintPageEventArgs)
    12. p_e.Graphics.FillRectangle(Brushes.White, Me.pdServiceMaterialBestellung.DefaultPageSettings.Bounds)
    13. Dim colBestellListe As New List(Of stServiceMaterial)
    14. Dim myDataTableUnterartikel As DataTable = Nothing
    15. Dim Anzahl As Int32 = 0
    16. For index As Int32 = 1 To 26
    17. colBestellListe.Add(New stServiceMaterial(Me.Controls(5).Controls(1).Controls.Item("txtAnzahl" + index.ToString).Text,
    18. Me.Controls(5).Controls(1).Controls.Item("txtArtikel" + index.ToString).Text,
    19. Me.Controls(5).Controls(1).Controls.Item("txtArtikelNummer" + index.ToString).Text)) '<---- Abbruch mit Fehler: Index 5 außerhalb vom Bereich von index
    20. Next
    @Drachie V ielleicht klärst Du uns mal auf, was das für Controls in Controls in Controls sind.
    Dieser Zugriff sollte doch wesentlich direkter erfolgen, jedenfalls nicht über deren Namen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Na, Controls(5) klingt doch verdächtig danach, dass es gar keine 6 (ja, richtig: 6!) Haupt-Controls auf dem Formular gibt. Aber es wäre auch sinnvoll erstmal zu erfahren, bei welchem Codeabschnitt der genannten Zeile der Fehler auftritt. Aber da wären wir ja wieder beim Debuggen und wie man es richtig macht. Und RfG hat absolut recht: Warum mit Indizes auf Controls zugreifen? Welchen Sinn hat das? Ist das Design so volatil, dass das Ansprechen über den CE-Namen nicht infrage kommt?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    anbei die anzeige welches der Mirarbeiter bekommt wenn er eine Datei öffnet zum import nach SAP.

    der Debugger lasst auch alles schön sauber ablaufen. SAP import, ausgabe der SAP Bestelegnummer, rückmeldung das der Import erfolgreichar. nur die Ausgabe auf dem Drucker wird jedesmal in der unten aufgeführten Codezeile abgebrochen mit dem hinweis Index 5 außerhalb des Bereiches von index.

    ja, die angaben zu My.Controls(5) ist richtig und auch so gewollt.

    VB.NET-Quellcode

    1. Me.Controls(5).Controls(1).Controls.Item("txtArtikelNummer" + index.ToString).Text)) '<---- Abbruch mit Fehler: Index 5 außerhalb vom Bereich von index
    Bilder
    • DragnDrop.png

      27,17 kB, 1.088×716, 29 mal angesehen

    Drachie schrieb:

    ja, die angaben zu My.Controls(5)
    Mit anderen Worten:
    Du hast 6 (in Worten sechs) Stück Controls in Deiner GUI?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich sehe nur 5 Controls: ein Tab-Control und 4 Buttons. Das sechste, welches mit Controls(5) angesprochen wird, hingegen scheint zu fehlen. Aber vielleicht ist es auch die TextBox, die Probleme macht. Das ist leicht rauszufinden, indem Du schreibst:

    VB.NET-Quellcode

    1. Dim MyTabControl = Me.Controls(5)
    2. For index As Int32 = 1 To 26
    3. colBestellListe.Add(New stServiceMaterial(MyTabControl.Controls(1).Controls.Item("txtAnzahl" + index.ToString).Text,
    4. MyTabControl.Controls(1).Controls.Item("txtArtikel" + index.ToString).Text,
    5. MyTabControl.Controls(1).Controls.Item("txtArtikelNummer" + index.ToString).Text)) '<---- Abbruch mit Fehler: Index 5 außerhalb vom Bereich von index
    6. Next

    Aber wieder stellt sich die Frage: Warum das TabControl nicht mit seinem Namen anpeilen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Kann man sowas nicht über ein DataGridView abbilden? Scheint mir auf den ersten Blick deutlich einfacher/sinnvoller als Haufenweise Textboxen...
    "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
    @mrMo
    über ein DataGridView kann das nicht dargestellt werden, da im hintergrund die daten aus der Bestellung in SAP importiert wrd und gleichzeitig eine Picklist für das Lager gedruckt wird.

    @VaporiZed
    Danke für den hinweis. ich habe dein Beispiel noch etwas umgebaut, da der import in SAP danach nicht mehr lief. Jetzt klappt alles wieder.