AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView und Checkboxen. RowSelect ausführen.
Thema durchsuchen
Ansicht
Themen-Optionen

ListView und Checkboxen. RowSelect ausführen.

Ein Thema von Jens Hartmann · begonnen am 13. Feb 2010 · letzter Beitrag vom 13. Feb 2010
Antwort Antwort
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

ListView und Checkboxen. RowSelect ausführen.

  Alt 13. Feb 2010, 09:55
Hallo zusammen,

ich steh mal wieder auf der Leitung. Es wird wahrscheinlich ein ganz simple Lösung für mein Problem geben. Allerdings schaffe ich es seid gestern nicht, beim Klick in einen Checkbox einer ListView, die komplette Zeile zu Selektieren.

Es soll egal sein, ob die Checkbox Checked oder Unchecked ist. Es soll einfach nur wie beim klick in die Listview die entsprechende Zeile selektiert werden.

Hier mal mein derzeitiger Code...
Delphi-Quellcode:
procedure TMailSendenForm.lvGroupChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
  if lvGroup.Selected <> nil then
    begin
      if Change = ctState then
        if Item.Checked then
          begin
            Item.Selected := true;
          end;
    end;
end;
Allerdings ist hier das Problem, das somit in der Listview immer alle Selektiert bleiben die mal über die Checkbox selektiert wurden. Da ich aber MultiSelect = false habe, kommte es natürlich zum Stack überlauf.Gibt es da nicht irgendeine einfache Möglichkeit.

Ich will eigendlich nur, das beim Klick in die Checkbox die gesamte Zeile Selektiert wird aber auch immer max. 1 Zeile selektiert sein darf.

Danke schon mal für die Anregung

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#2

Re: ListView und Checkboxen. RowSelect ausführen.

  Alt 13. Feb 2010, 10:10
Zitat von Jens Hartmann:
Es soll egal sein, ob die Checkbox Checked oder Unchecked ist.
Dann muss if Item.Checked then schon mal raus sonst wird die Zeile nur markiert wenn die CheckBox ausgewählt wurde.
Zitat:
Allerdings ist hier das Problem, das somit in der Listview immer alle Selektiert bleiben die mal über die Checkbox selektiert wurden.
Bevor du Selected auf True setzt musst du alle Markierungen aufheben. Glaub das geht mit ListView1.ClearSelection;
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

Re: ListView und Checkboxen. RowSelect ausführen.

  Alt 13. Feb 2010, 10:28
Zitat von Andreas:
Bevor du Selected auf True setzt musst du alle Markierungen aufheben. Glaub das geht mit ListView1.ClearSelection;
Danke, das geht schon mal. Das mit dem Checked ist mir auch soweit klar. Aber wie kann ich dann über die Checkbox selektieren.
Ich kann ja mit dem Befehl
Item.Selected Nur festlegen, das ein selektieren möglich ist.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: ListView und Checkboxen. RowSelect ausführen.

  Alt 13. Feb 2010, 11:34
Hallo Jens,

ich bevorzuge eigentlich das VirtualTreeView, deshalb kann ich nicht garantieren, dass der folgende Code immer fehlerfrei funktioniert:

Delphi-Quellcode:
type
  TForm1 = class (TForm)
    [..]
  private
    FWasChecked: Boolean;
  end;

procedure TForm1.ListViewChanging (Sender: TObject; Item: TListItem; Change: TItemChange;
  var AllowChange: Boolean);
begin
  FWasChecked := Assigned(Item) and Item.Checked;
end;

procedure TForm1.ListViewChange (Sender: TObject; Item: TListItem; Change: TItemChange);
begin
  if (Assigned(Item) and (Item.Checked <> FWasChecked)) then
    begin
      ListView.ItemFocused := Item;
      ListView.Selected := Item;
    end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: ListView und Checkboxen. RowSelect ausführen.

  Alt 13. Feb 2010, 13:48
Danke Hawkeye219,

geht so. Ich habe allerdings noch ein..
if lvGroup.Focused <> false then vor deine Funktion gepackt, da sonst beim Prgrammstart durch das OnCreate schon der letzte eintrag den Selected Zustand erhält. Mit der unten ergänzten Version funktioniert es nun so, wie ich will.

Delphi-Quellcode:
procedure TMailSendenForm.lvGroupChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
if lvGroup.Focused <> false then
  begin
    if (Assigned(Item) and (Item.Checked <> FWasChecked)) then
      begin
        lvGroup.ItemFocused := Item;
        lvGroup.Selected := Item;
      end;
  end;
end;

procedure TMailSendenForm.lvGroupChanging(Sender: TObject; Item: TListItem;
  Change: TItemChange; var AllowChange: Boolean);
begin
if lvGroup.Focused <> false then
  FWasChecked := Assigned(Item) and Item.Checked;
end;
Danke und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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