![]() |
TListView - aktivieren einiger Checkboxen verhindern
Hallo zusammen,
ich habe eine TListView, bei der der Nutzer die Möglichkeit hat, verschiedene Elemente mittels Checkboxen auszuwählen. Mein Problem ist, dass es einige Elemente gibt, die der User nicht auswählen können soll, er soll sie aber trotzdem sehen. Zu Deutsch: mein Prog hat verschiedene Module, und je nachdem, welche freigeschaltet sind, kann er sie anwählen oder nicht, soll aber die anderen, die es nohc gibt, sehen. Ich finde nix, wo ich das einstellen kann, denn onChange und onChaninging nützen mir hier nix. Für Antworten wäre ich sehr dankbar. Herzliche Grüße Marco |
AW: TListView - aktivieren einiger Checkboxen verhindern
Zitat:
Ansonsten wäre es interessant zu wissen, warum du es nicht nutzen kannst. |
AW: TListView - aktivieren einiger Checkboxen verhindern
Hallo,
Joa, onChanging hat brav allowChange. Ich habe schon mit ctState rumgespielt, aber wenn ich auf
Code:
prüfe, wird das Event zwar für jedes select aufgerufen, aber nicht, wenn ich den Status einer Checkbox ändere - entweder, hab ich murx programmiert, oder was übersehen...
if Change = ctState then
Viele Grüße Marco |
AW: TListView - aktivieren einiger Checkboxen verhindern
Ich habe das gerade mal getestet.
ctState scheint auch gesetzt zu werden, wenn das Item selektiert wird. Das hat also nicht zwingend etwas mit der CheckBox zu tun. Ich denke, das OnChanging ist für deinen Fall die richtige Wahl, aber die Bedingung muss verfeinert/geändert werden. Wenn du an den Items Daten (Data) hinterlegt hast, solltest du das zum Prüfen verwenden. Die Caption wäre auch noch eine Alternative. |
AW: TListView - aktivieren einiger Checkboxen verhindern
Hallo Frühlingsrolle,
dein Code sieht ähnlich aus wie meiner, ich bin nur nicht auf's item.listview.checkboxes gekommen. Aaaber ;-) Ich kriege eine Windows-Schutzverletzung, und hab keine Ahnung warum, beim
Code:
Ich hab natürlich geschaut, Item ist nicht nil, also keine Idee, undzweitens wird das Event, gefühlt, 20 mal aufgerufen, wenn man die Liste durchläuft.
item.checked := false
Ich hab den Code, nur zum Testen, mal abgewandelt:
Code:
Mir ist nicht klar, woher die Schutzverletzung kommt, und die kommt jedesmal, wenn ich die Liste durchwander...
procedure TAnwendereigenschaftenFormular.liModuleChanging(Sender: TObject;
Item: TListItem; Change: TItemChange; var AllowChange: Boolean); begin if (change = ctState) and item.listview.checkboxes then begin if item.index = 3 then // wie gesagt, nur zum testen... begin item.checked := false; // und genau hier knallt's allowChange := false; infobox ('onChanging!'); // nur 'ne verkapsele MsgBox end; end; end; Vielleicht hat ja noch jemand 'ne idee... Herzliche Grüße Marco |
AW: TListView - aktivieren einiger Checkboxen verhindern
Wenn du die Zeile, in der es knallt, weglässt, sollte es schon funktionieren.
Du setzt AllowChange ja auch auf false. Das bewirkt schon, dass die CheckBox nicht verändert wird. Und natürlich wird das Event zig mal ausgelöst, weil du die CheckBox innerhalb der Methode änderst. Das löst das Event jedes mal wieder aus. Das dürfte auch der Grund für deine Schutzverletzung sein. |
AW: TListView - aktivieren einiger Checkboxen verhindern
Ohne das zu testen, behaupte ich einfach mal:
Das Event triggert durch die überflüssige Zeile immer wieder, bis zum Stack-Overflow. |
AW: TListView - aktivieren einiger Checkboxen verhindern
Hallo zusammen,
@Frühlingsrolle: doch, die Schutzverletzung kommt genau daher, dass im Event das Event aufgerufen wird, usw., wie Jasocul schon gesagt hat. @Jasocul: brauchst nicht testen, funktioniert. ;-) Problem ist, dass man jetzt zwar die Checkbox beim x-ten Element nicht mehr aktivieren kann, man kann es aber auch nicht mehr anwählen, sprich, focused auf true setzen. Das muß ich aber, da ich die Liste mit Screenreader auslese (Sprachausgabe für blinde). Der Effekt soll sein, dass man zwar Elemente selektieren kann, aber eben nicht die Checkbox aktivieren. Irgend'ne Idee dazu? Viele Grüße Marco |
AW: TListView - aktivieren einiger Checkboxen verhindern
Deine Prüfung auf Change = ctState verhindert, dass der Eintrag selektiert werden kann.
Bei Änderung auf Selected, wird auch ctState gesetzt. Wenn diese Prüfung rausnimmst, sollte es funktionieren. |
AW: TListView - aktivieren einiger Checkboxen verhindern
So...
Code:
procedure TForm.ListView1ItemChecked(Sender: TObject; Item: TListItem);
begin if Item.Index=0 then Item.Checked:=False; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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