Beim Anzeigen der Form stürzt das Programm ab

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

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Akanel.

    Beim Anzeigen der Form stürzt das Programm ab

    Hallo zusammen,

    ich stehe gerade vor einem Problem, bei dem ich nicht weiter weiß.
    Sobald ich einen Button benutze, der mir die Form "frmMargin.vb" anzeigen/laden soll (frmMargin.show), kommt direkt der unten genannte Fehler.
    Ich komme einfach nicht dahinter, wieso er nicht in den Code von frmMargin springt, sobald ich "Private Sub dgvMargin_CellValueChanged..." benutze. ?(

    VB.NET-Quellcode

    1. Private Sub dgvMargin_CellLeave(sender As Object, e As DataGridViewCellEventArgs) Handles dgvMargin.CellLeave
    2. 'Mit diesem Sub funktioniert es ohne Problem, jedoch ist die Bedienung mit "CellLeave" ungünstig
    3. If e.ColumnIndex = 3 Then Call CalculateMargin(sender, e)
    4. End Sub
    5. Private Sub dgvMargin_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvMargin.CellValueChanged
    6. 'Wenn ich diesen Sub lösche, dann besteht das Problem nicht mehr
    7. 'Es muss also irgendwas mit dem "CellValueChanged"-Event zu tun haben
    8. If e.ColumnIndex = 3 Then Call CalculateMargin(sender, e)
    9. End Sub
    10. Sub CalculateMargin(sender As Object, e As DataGridViewCellEventArgs)
    11. Dim ListenpreisAlt As Double = dgvMargin.Rows(e.RowIndex).Cells(2).Value
    12. Dim Kosten As Double = dgvMargin.Rows(e.RowIndex).Cells(1).Value
    13. Dim ListenpreisNeu As Double
    14. Dim Marge As Double
    15. Dim Rabatt As Double = dgvMargin.Rows(e.RowIndex).Cells(3).Value / 100
    16. ListenpreisNeu = ListenpreisAlt * (1 - Rabatt)
    17. Marge = (ListenpreisNeu - Kosten) / ListenpreisNeu
    18. dgvMargin.Rows(e.RowIndex).Cells(4).Value = FormatPercent(Marge, 1)
    19. dgvMargin.Rows(e.RowIndex).Cells(5).Value = FormatCurrency(ListenpreisNeu, 2)
    20. End Sub



    Hat jemand eine Idee, woran das liegen kann?

    Fehlermeldung:

    ​Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in Quotation Tool ETO.exe aufgetreten.

    Zusätzliche Informationen: Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException.
    Fehler: Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Auflistung sein.


    Lasst mich bitte wissen, wenn ich noch Infos liefern muss.

    Vielen Dank im Voraus!!!
    @Yogibär Setz mal in die InitInstance() einen Haltepunkt und steppe das ganze durch.
    Finde die Zeile, wo es knallt.
    Was sagt die InnerException?
    Lerne zu debuggen: Debuggen, Fehler finden und beseitigen
    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!
    Hallo Rod,

    es kommt gar nicht erst zum Haltepunkt im obigen Code :)

    Hier der Code aus der Form, in der frmMargin aufgerufen wird.

    VB.NET-Quellcode

    1. Private Sub MarginIcon_Click(sender As Object, e As EventArgs) Handles MarginIcon.Click
    2. frmMargin.Show() 'Hier knallt es
    3. frmMargin.BringToFront()
    4. End Sub




    Edit:

    Ein Neustart wirkt Wunder :rolleyes:
    Jetzt hält er an der richtigen Stelle an.

    Sorry für die Umstände!

    VB.NET-Quellcode

    1. Sub CalculateMargin(sender As Object, e As DataGridViewCellEventArgs)
    2. Dim ListenpreisAlt As Double = dgvMargin.Rows(e.RowIndex).Cells(2).Value 'Fehler liegt hier, das dgvMargin ist zu diesem Zeitpunkt noch nicht korrekt erstellt und somit schmiert er logischerweise ab
    3. Dim Kosten As Double = dgvMargin.Rows(e.RowIndex).Cells(1).Value
    4. Dim ListenpreisNeu As Double
    5. Dim Marge As Double
    6. Dim Rabatt As Double = dgvMargin.Rows(e.RowIndex).Cells(3).Value / 100
    7. ListenpreisNeu = ListenpreisAlt * (1 - Rabatt)
    8. Marge = (ListenpreisNeu - Kosten) / ListenpreisNeu
    9. dgvMargin.Rows(e.RowIndex).Cells(4).Value = FormatPercent(Marge, 1)
    10. dgvMargin.Rows(e.RowIndex).Cells(5).Value = FormatCurrency(ListenpreisNeu, 2)
    11. End Sub




    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yogibär“ ()

    Ich will mich nicht zu weit aus dem Fenster lehnen.
    Aber sollte der Aufruf nicht so aussehen?

    VB.NET-Quellcode

    1. Private Sub MarginIcon_Click(sender As Object, e As EventArgs) Handles MarginIcon.Click
    2. Using frmMargin as new frmMargin
    3. frmMargin.ShowDialog(Me)
    4. End Using
    5. End Sub
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.