Identischer Quelltext verursacht unterschiedliche Ergebnisse

  • VB.NET

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

    Identischer Quelltext verursacht unterschiedliche Ergebnisse

    Hi,

    folgende Zeilen verursachen mir Kopfschmerzen:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Dim count As Integer = DataGridView1.CurrentCell.RowIndex()


    VB.NET-Quellcode

    1. Private Sub DateiHinzufügenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiHinzufügenToolStripMenuItem.Click
    2. Dim count As Integer = DataGridView1.CurrentCell.RowIndex()


    Beide geben die aktuell gewählte Zeile im Datagridview wieder. Das funktioniert auch solange bis man eine neue Zeile anklickt, die noch keinen Inhalt hat. Wenn man was einträgt generiert das DGV eine weitere
    Zeile und alles ist in Ordnung. Das Problem tritt auf, wenn man noch nichts eingetragen hat und das DGV keine weitere Zeile generiert hat.
    Der untere Codeblock gibt die korrekte Zahl der letzten Zeile wieder, beim anderen springt das DGV eine Zeile zurück und gibt die Zahl der vorletzten an ?( ?( ?( .
    Es macht auch keinen Unterschied, ob man CurrentRow.Index() oder CurrentCell.RowIndex() benutzt. Hat jemand eine Idee, wieso das Programm
    mit einem identischen Befehl andere Aktionen ausführt?
    Beide Subs stehen übrigens in der gleichen Klasse und haben außer einem MsgBox keine weiteren Befehle.
    Option strict = on

    If it's stupid and it works it ain't stupid.

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

    Nils_Kr schrieb:

    generiert das DGV eine weitere Zeile
    Das kannst Duabschalten mit AllowUserToAddLines = False (oder so ähnlich).
    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!
    das mit dem Fokus klingt plausibel. Allerdings wäre das sehr unglücklich, weil im DGV trotzdem die letzte Zeile makiert ist. Ich denke ich werde in den
    Settings die automatische Generierung einer neuen Zeile deaktivieren und es über einen Button lösen. Weil wenn erstmal eine Zeile vorhanden ist,
    die auch mit dem DataBinding verbunden ist, springt die aktive Zeile nicht mehr.
    Aber nervig ist das schon, ich kann mir auch nicht vorstellen, dass das so von MS gewollt ist.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Nils_Kr schrieb:

    dass das so von MS gewollt ist.
    Vielleicht solltest Du auf ein SelectionChange-Event des DGV wechseln.
    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!
    Das Programm soll ja nicht auslösen wenn die Auswahl geändert wird, sondern soll sagen, welche Zeile gerade ausgewählt ist. In der o.g. Situation ist es
    halt so, dass die Auswahl im DGV alleine zurückspringt, wenn die Zeile noch nicht komplett erstellt ist und der Fokus verloren geht.
    Bleibt der Fokus erhalten, weil die Statusleiste anders gehandhabt wird, hat das Programm auch kein Problem damit, dass es die neue Zeile noch nicht
    "richtig" gibt.
    Ich mach es jetzt so, wie du es oben vorgeschlagen hast. "AllowUsersToAddNewLine" ist deaktiviert und es wird per Befehl eine neue Zeile erstellt.
    Da gibt es nicht das Problem, dass die neue Zeile zwar anwählbar aber noch nicht vorhanden ist.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Nils_Kr schrieb:

    welche Zeile gerade ausgewählt ist.
    Jou.
    In dem Event holst Du Dir die entsprechende Zelle / Zeile / Spalte, die gibst Du bei den anderen Events aus, da ist das Resultat identisch.
    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!
    Das wäre in der Tat eine Möglichkeit. Allerdings traue ich dem DGV nicht mehr über den Weg. Es ist nämlich so, dass auch per Quelltext generierte Einträge
    nicht richtig verarbeitet werden. Wenn ich einfach ActiveRow+1 mache und das zurückspringen ausgleiche verschwindet der Eintrag plötzlich
    und taucht dann wieder auf, wenn man die Zeile manuell auswählt :cursing:

    Inzwischen hab ich es so, dass die neue Zeile auch garantiert da ist und es gibt keine Probleme mehr. Vielen Dank euch beiden für die Hilfestellung.
    Option strict = on

    If it's stupid and it works it ain't stupid.
    Du musst eine ganze Zeile an die BindingSource dranhängen.
    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!