Problem mit MultiSelect bei TListView

Rund um die LCL und andere Komponenten
Antworten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Problem mit MultiSelect bei TListView

Beitrag von Kay »

Hallo,

kann es sein, dass die TListView fehlerhaft ist oder habe ich da was falsch verstanden?
Mein Problem ist nämlich Folgendes: Wenn ich die Eigenschaft MultiSelect auf True setze, dann die Zeilen der Listenansicht fülle und anschließend den ersten Eintrag auswähle, dann ist nichts markiert...

Code: Alles auswählen

var
  ListItem: TListItem;
  I: Integer;
begin
  ListView1.MultiSelect := True;
 
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Zelle 1:1';
  ListItem.SubItems.Add('Zelle 2:1');
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Zelle 1:2';
  ListItem.SubItems.Add('Zelle 2:2');
 
  ListView1.Selected := ListView1.Items[0];
  ListView1.Items[0].Focused := True;
  for I := 0 to ListView1.Items.Count - 1 do
  begin
    // wird nie ausgeführt
    if ListView1.Items[I].Selected then ShowMessage(ListView1.Items[I].Caption);
  end;
end;
Nun habe ich mir gedacht, den ersten Eintrag direkt zu markieren:

Code: Alles auswählen

ListView1.Items[0].Selected := True;
ListView1.Items[0].Focused := True;
for I := 0 to ListView1.Items.Count - 1 do
begin
  // Zelle 1:1 wird angezeigt
  if ListView1.Items[I].Selected then ShowMessage(ListView1.Items[I].Caption);
end;
Das klappt natürlich einwandfrei, allerdings wird bei dieser Variante jetzt das Ereignis OnSelectItem nicht mehr ausgelöst. Behakt sich da eventuell irgendwas?

Vielen Dank und viele Grüße
Kay
Zuletzt geändert von Lori am Mi 17. Okt 2012, 19:53, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter benutzen

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: Problem mit MultiSelect bei TListView

Beitrag von willi4willi »

Hallo Kay,

versuch doch mal den Fokus auf das ListView zu setzen. Dann sieht man bei mir, was ausgewählt wurde.
Offensichtlich war der Eintrag markiert, man hat es nur nicht gesehen.

Beispiel:

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  ListItem: TListItem;
 
begin
  ListView1.MultiSelect := True;
 
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Zelle 1:1';
  ListItem.SubItems.Add('Zelle 2:1');
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Zelle 1:2';
  ListItem.SubItems.Add('Zelle 2:2');
 
  ListView1.Items[0].Selected := True;
  ListView1.Items[0].Focused := True;
 
//Fokus auf das ListView
  ListView1.SetFocus;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var I: Integer;
begin
    for I := 0 to ListView1.Items.Count - 1 do
  begin
    if ListView1.Items[I].Selected then ShowMessage(ListView1.Items[I].Caption);
  end;
 
// hier nochmal Fokus auf das ListView
  ListView1.SetFocus;
 
end;
 
 
Ich hoffe, das war das Problem.

Wenn der Fokus das ListView wieder verlässt, dann ist die Auswahl nicht mehr zu sehen. Setze ich aber die Eigenschaft ListView1.HideSelection auf FALSE dann bleibt die Auswahl (wenigstens als graue Schattierung) erhalten.

Viele Grüße

Willi4Willi
 

Viele Grüße

Willi4Willi

------------

Antworten