Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Listview - Auswahl verhindern


Lex - Mo 16.01.06 22:18
Titel: Listview - Auswahl verhindern
Hallo,
ich steh grad auf dem Schlauch...

Ich habe eine Listview (Style Report) und kann die einzelnen Einträge
per Mausklick auswählen.

Das möchte ich nun in bestimmten Fällen verhindern. Wenn der gerade
aktive Eintrag einen bestimmten Wert hat soll es nicht möglich sein
einen anderen Eintrag auszuwählen.

Nur - wie mache ich das? Es gibt kein "OnBeforeSelection" oder sowas.
Kann mir jemand weiterhelfen?

DANKE!

Lex


Narses - Mo 16.01.06 23:12

Moin!

Hm, Vorschlag: merk dir im OnClick, was aktuell ausgewählt ist; beim nächsten OnClick schaust du vor den "normalen" Aktionen, ob dir die neue Auswahl passt; wenn nicht, zurücksetzen auf den letzten Wert. Sollte klappen.

Setz das LiestView im Zweifelsfall auf .Enabled := FALSE; :wink:

cu
Narses


Lannes - Di 17.01.06 01:38

Hallo,

oder nimm das Ereignis OnChanging, das leistet in diesem Zusammenhang oft sehr gute Dienste.

Du kannst z.B. die Tag-Eigenschaft der ListView als Flag nutzen,
entspricht der markierte Eintrag dem Wert, dann auf 1 setzen, sonst auf 0.

Dann kann folgender Code zum Einsatz kommen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
  Change: TItemChange; var AllowChange: Boolean);
begin
  if ListView1.Tag = 1 then
    AllowChange := False
    else
      AllowChange := True;
end;

Dann kann nur noch wenn ListView.Tag 0 ist, ein anderes Item gewählt werden.