![]() |
Checkboxen im cxGrid und ihre Events
Hallo!
Ich bin etwas verwirrt, über das Verhalten meiner Checkboxen in einer meiner Spalten meines TableViews. Ich habe in einer Spalte Checkboxen. Es darf immer nur eine Checkbox gesetzt sein (also nur für eine Zeile des TableViews. Wenn ich eine Checkbox abhake, dann wird überprüft, ob die Checkbox in einer anderen Zeile gesetzt ist. In diesem Fall wird die vorher gesetzte Checkbox gelöscht (FALSE gesetzt). Blöderweise kommt dann auch kein Haken in der *neuen* Zeile, also der neu angeklickten Checkbox. Kann es sein, dass das Zurücksetzen der vorher gesetzen Checkbox wieder ein Event auslöst, welches einen erneuten Effekt auf die aktuelle Checkbox hat? Ich rufe beim Klick auf die Checkboxen das "OnEditValueChanged" Event auf, und nicht das "OnChanged". Letzteres wird doch auch beim Ändern einer Checkbox aus dem Code heraus ausgelöst, bei erstem doch nicht, oder? Danke für die Hilfe! |
Re: Checkboxen im cxGrid und ihre Events
Ich vermute, es hat etwas mit dem fehlenden Refresh zu tun.
Wenn ich den Focus mit den Cursor-Tasten verschiebe, erscheint das Häkchen.... Allerdings erzielt ein "Refresh" auf meinem DataController den Effekt leider nicht... :-( |
Re: Checkboxen im cxGrid und ihre Events
Hi,
ich würde das Event Abhängen beim Setzen und dann wieder anhängen:
Delphi-Quellcode:
Oder hals ein Flag setzen - InProcess ...
procedure TTestForm.ColumnPropertiesChange(Sender: TObject);
begin Column.OnChange := nil; try // Code zum Abhaken anderer gesetzter Checkboxen finally Column.OnChange := ColumnPropertiesChange; end; end; Cu, Frank [Edit]Wobei eigentlich nichts passieren dürfte, wenn du nur dann reagierst, wenn Checked auf True gesetzt wird.[/Edit] |
Re: Checkboxen im cxGrid und ihre Events
Nach Recherchen und Überlegungen mit meinem Kollegen scheint das Problem mit der Art und Weise, wie ich mir in der Event-Prozedur die aktuelle Zeile ermittle zusammenhänge.
Im Moment mache ich das über "meinDBTableView.DataController.GetFocusedRowIndex ". Ich speichere ihn mir in einer Variable, kann sich an sich nicht ändern, dennoch habe ich ein merkwürdiges Programm verhalten: Wenn ich in der dem OnEditValueChange-Event zugeordneten Prozedur eine in einer anderen Zeile/Zelle gelegene, vorher gecheckte Checkbox zurücksetzte, um dann die aktuelle Checkbox zu setzen, vertauschen sie (nach nicht erkennbarem Muster) Zeilen im TableView. Kann das mit GetFocusedRowIndex zusammenhängen? Ich habe alternativ probiert, die aktuelle Zeile des Views über das Send-Objekt in der Event-Prozedur auszulesen, denn dieses ist ja vom Typ "TcrCheckBox", jedoch kann ich dort keine Methode finden, die mir das liefert. Ich hoffe, mir kann jemand helfen. Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz