DataGridView Edit Mode mit Button Click beenden

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils_Kr.

    DataGridView Edit Mode mit Button Click beenden

    Hi,

    ich trau mich fast nicht meine Frage hier zu stellen, weil sie recht komplex ist. Ich hoffe, ihr habt ein bissl Geduld.

    Ich habe eine DataGridView,mit der ich einzelne Zellen im EditMode verändere. Den anfänglichen Zustand habe ich mir gemerkt.

    Wenn ich im Edit Mode bin, zeige ich diesen anfänglichen Zustand in einer TextBox an. Wenn ich den Button1 klicke, dann wird dieser Anfangszustand wiederhergestellt. Der Klick auf Button1 beendet dabei auch automatisch den Edit Mode der Data Grid View.

    Soweit klappt das auch ohne Probleme.

    Ich möchte aber die TextBox und den Button1 nur anzeigen, wenn ich im Edit Mode bin. Denn nur da, soll diese Option möglich sein.

    Deshalb setze ich in der EndEdit Ereignisprozedur die Befehle TextBox.visible = False und Button1.Visible = False ab.

    Aber jetzt tritt folgendes Problem auf:

    Der Click auf den Button1 schließt automatisch den Edit Mode der Data Grid View. Damit feuert die EndEdit Routine der DataGridView, die setzt den Befehl Button1.Visible = False und jetzt feuert die TextBox1.Click Routine nicht mehr.

    Mit anderen Worten: der Click auf Button1 wird "verschluckt".

    Ufff ... ich hoffe, ihr habt mir folgen können. Das ist sicher nur etwas für Leute mit Programmiererfahrung. :)

    Wie mache ich das denn ?

    Kann ich etwa in der EndEdit Routine der Data Grid View abfragen, ob Button1 "geklickt" wurde ? Dann könnte Ich das Ereignis Button1.Click am Ende der Routine selbst auslösen ...

    Oder kann ich den Button1 irgendwie anders von der Anzeige ausblenden, ohne Button1.Visible = False zu setzen.

    Button1.Enabled = False zeigt übrigens den gleichen Effekt ... das ist also auch keine Lösung.

    Zur Zeit behelfe ich mir damit, dass ich den Button1 eben nicht verberge. Dann funktioniert das ... aber so richtig schön ist das natürlich nicht.

    Ich hoffe, ihr habt (wieder einmal) eine zündende Idee ...

    LG
    Peter

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Peter329“ ()

    Wenn der Button geklickt wurde, hält er den Status "focused", solange bis irgendein anderes Control ausgewählt wird. Den kannst du bei in deinem DGV Event abfragen. Wenn du dann mit deinem Button Code durch bist, kannst du irgendwas anderes fokussieren.
    Option strict = on

    If it's stupid and it works it ain't stupid.
    @Peter329 Mit welchem Code machst Du das?
    ButtonX.PerformClick() funktioniert nur, wenn der Button auch mit der Maus klickbar ist.
    Ansonsten musst Du ButtonX_Click(...) aufrufen.
    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!
    Erstmal herzlichen Dank an die Ratgeber ! :)

    @Nils_Cr

    wow ... du scheinst mein Anliegen haargenau verstanden zu haben. Deine Lösung ist einfach genial !

    In der Begin Edit Routine zeige ich den Button1 an.

    In der EndEdit Routine frage ich ab, ob der Button1 den Focus hat. Und dann verberge ich den Button1 wieder.

    Auf diese Weise kann ich feststellen, ob der Button1 im Datagriview Edit Mode geklickt worden ist. Anders kann er nicht den Focus erhalten. Denn im Edit Mode hat die DatagridView Zelle den Fokus !

    Wenn Button1 den Focus hat, dann führe ich in der EndEdit Routine das aus, was ich sonst in der Button1.Click Routine ausgeführt hätte. Spaßigerweise muss ich dazu dann keine Button1.Click Ereignisprozedur kodieren ! Der Code der Button1.Click Routine wird sozusagen im EndEdit ausgeführt.

    Das Dingens ist ganz schön tricky ! Aber es funktioniert hervorragend ! Einfach genial ... ich bin begeistert ! :)

    LG
    Peter