Hallo Leute,
ich möchte dem Anwender die Möglichkeit geben, in einem StringGrid eine Zeile zu löschen, in dem er schlichtweg den Text (z.b. in der ersten Spalte) löscht.
Dazu habe ich im EditingDone-Event eine Abfrage eingebaut, die sg.DeleteRow aufruft, wenn der NewValue = '' ist. Das klappt prinzipiell... aber....
Wenn es sich um die letzte Zeile handelt und AutoAdvance aktiviert ist, bekomme ich nach dem Löschen der Zelle immer eine Range Exception - außer ich verlasse die Zelle mit Cursor-Up nach oben.
Ich weiß wirklich nicht, wie ich diese Exception abfangen soll (nein, ein try-except um das DeleteRow() reicht nicht), bzw. aus meiner Sicht dürfte das gar nicht erst eine Exception geben, sondern die aktive Zeile sollte einfach eins nach oben rutschen. Ich habe auch schon im Event-Handler versucht, sg.Row auf einen kleineren Wert zu setzen, das wird ignoriert.
Hat irgendwer eine Idee, wie man dem Anwender eine komfortable Möglichkeit geben kann, einfach eine Zeile zu löschen?
Schöne Grüße,
Sir Twist
Stringgrid: Zeile löschen im EditingDone event
Re: Stringgrid: Zeile löschen im EditingDone event
Manchmal hilft es, so etwas später auszuführen.
z.B. mit Application.QueueAsyncCall
https://wiki.lazarus.freepascal.org/Asynchronous_Calls
https://lazarus-ccr.sourceforge.io/docs ... ccall.html
z.B. mit Application.QueueAsyncCall
https://wiki.lazarus.freepascal.org/Asynchronous_Calls
https://lazarus-ccr.sourceforge.io/docs ... ccall.html
Re: Stringgrid: Zeile löschen im EditingDone event
Ich kann das nicht nachvollziehen - siehe beigefügten Code:
Bitte schreibe genau auf, was du machst.
- In die Text-Zelle in der letzten Zeile gehen
- Taste DEL
- ENTER drücken, oder In die rechts benachbarte Zelle gehen, oder zum Edit oder Button auf dem Formular gehen - in jedem Fall verschwindet die letzte Zeile ohne Fehlermeldung.
Bitte schreibe genau auf, was du machst.
- Dateianhänge
-
editing_done_delete_row.zip
- (2.03 KiB) 57-mal heruntergeladen
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Stringgrid: Zeile löschen im EditingDone event
Hi!
Falls die Tipps der Kollegen nicht helfen, gibt es im StringGrid
Winni
Falls die Tipps der Kollegen nicht helfen, gibt es im StringGrid
Code: Alles auswählen
procedure DeleteRow(Index: Integer);
-
- Beiträge: 1063
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Stringgrid: Zeile löschen im EditingDone event
Ich würde jetzt nicht wirklich auf die Idee kommen eine Zeile in einem Grid zu aufgrund des (in diesem Fall leeren) Inhalts zu löschen. Aber das ist möglicherweise nur mein naiver Zugang.SirTwist hat geschrieben: Do 4. Nov 2021, 16:39 Hat irgendwer eine Idee, wie man dem Anwender eine komfortable Möglichkeit geben kann, einfach eine Zeile zu löschen?
Löschen von Inhalten/Daten ist für mich immer sensibel und wird in meinen GUIs nicht implizit gemacht, denn ich möchte dass der Benutzer weiß was er da gerade tut.
Varianten die ich dem Benutzer z.B. anbiete (manchmal eine, mehrere oder alle - mit Actions geht das hervorragend)
- Button außerhalb des Grids zum Löschen einer gerade aktiven zeile
- In die Gridzeile einen Button zum Löschen einbauen
- Kontextmenü auf Rechtsklick