Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Checkboxen im cxGrid und ihre Events (https://www.delphipraxis.net/130742-checkboxen-im-cxgrid-und-ihre-events.html)

Windwalker 12. Mär 2009 13:35


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!

Windwalker 12. Mär 2009 14:36

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... :-(

dataspider 12. Mär 2009 14:45

Re: Checkboxen im cxGrid und ihre Events
 
Hi,

ich würde das Event Abhängen beim Setzen und dann wieder anhängen:

Delphi-Quellcode:
procedure TTestForm.ColumnPropertiesChange(Sender: TObject);
begin
  Column.OnChange := nil;
  try
    // Code zum Abhaken anderer gesetzter Checkboxen
  finally
    Column.OnChange := ColumnPropertiesChange;
  end;
end;
Oder hals ein Flag setzen - InProcess ...

Cu, Frank

[Edit]Wobei eigentlich nichts passieren dürfte, wenn du nur dann reagierst, wenn Checked auf True gesetzt wird.[/Edit]

Windwalker 12. Mär 2009 18:36

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 06:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz