Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit 2 Listviewkomponenten (https://www.delphipraxis.net/159719-problem-mit-2-listviewkomponenten.html)

Capa 10. Apr 2011 02:08

Problem mit 2 Listviewkomponenten
 
Hi
folgendes Problem, habe 2 Listview komponenten und eine Suchfunktion
mit hilfe der Suchfunktion kann ich halt angeben in was er suchen soll (Spalte)
und wonach er suchen soll. Und dann wird quasi der Treffer von Listview1 nach Listview2 kopiert
ohne den Eintrag in Listview1 in irgendeiner art zu ändern.

Wenn ich das erste Suche gibts keine Probleme Subitems[0] passiert genau das was ich will
doch wenn ich in den anderen Subitems suche dann passiert es manchmal das der einfach in Listview1
zeilen löscht obwohl er da garnix löschen soll.

Dies ist die Procedure die als einzigstes aufgerufen wird.
Sieht da zufällig wer nen Fehler, bin am verzweifeln da ich ja normalerweise an Listview1 nix mache sondern
nur die daten von 1 nach 2 kopiere ?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I,L: Integer;
begin
  ListView2.Items.Clear;
  for I := 1 to 5 do
  begin
    if (TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Checked) then
    begin
      Label3.Caption := TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Caption;
      L := I;
    end;
  end;
  for I := 0 to Listview1.Items.Count - 1 do
  begin
    if (pos(Edit1.Text, Listview1.Items[I].SubItems[L-1]) > 0) then
      ListView2.Items.AddItem(ListView1.Items[I]);
  end;
  Listview1.Visible := False;
  Listview2.Visible := True;
  Panel2.Visible := True;
  Label4.Caption := Edit1.Text;
end;
Thx und Mfg Capa

DeddyH 10. Apr 2011 11:14

AW: Problem mit 2 Listviewkomponenten
 
Ich habe jetzt nicht in den VCL-Source geschaut, aber kann es sein, dass nach
Zitat:

Delphi-Quellcode:
ListView2.Items.AddItem(ListView1.Items[I]);

beide Instanzen auf dasselbe Objekt zeigen? Wenn Du dann Clear aufrufst, ist sie natürlich in beiden ListViews futsch. Klappt es, wenn Du stattdessen in der 2. ListView eine Kopie des Items hinterlegst statt des Items selbst?

Capa 10. Apr 2011 11:37

AW: Problem mit 2 Listviewkomponenten
 
Stimmt auffallend :/
habs zwar nun abgeändert und er löscht das in Listview1 auch nicht mehr dafür bekomm ich bei der 2ten Zeile ne
AE :/ muss mal schauen woran das nun schon wieder liegt.


Edit: Mhh hier muss der Fehler liegen wenn ich die LI sachen rauskommentiere funzt es ohne Probs
Sind sie Drin bekomm ich in der 2ten Zeile ne AE aber nur in der 2ten Zeile 1te und 3te ohne Probs
und zeile 2 is auch nur dann nen Problem wenns das einzige ergebnis ist wenn ich nach was suche was auch noch
in der 1ten oder 3ten zeile steht dann gehts plötzlich.

Delphi-Quellcode:
  for I := 0 to Listview1.Items.Count - 1 do
  begin
    if (pos(Edit1.Text, Listview1.Items[I].SubItems[L-1]) > 0) then
      LI := ListView2.Items.Add;
      LI.Caption := ListView1.Items[I].Caption;
      LI.SubItems.Add(ListView1.Items[I].SubItems[0]);
      LI.SubItems.Add(ListView1.Items[I].SubItems[1]);
      LI.SubItems.Add(ListView1.Items[I].SubItems[2]);
      LI.SubItems.Add(ListView1.Items[I].SubItems[3]);
      LI.SubItems.Add(ListView1.Items[I].SubItems[4]);
  end;
Edit: Fehler gefunden > 0 spinnt er rum

DeddyH 10. Apr 2011 11:43

AW: Problem mit 2 Listviewkomponenten
 
begin und end sagen Dir etwas? ;)

Capa 10. Apr 2011 11:46

AW: Problem mit 2 Listviewkomponenten
 
ups jetzt wo du es sagst :/
zuletzt stand da nen einzeiler *hust*

DeddyH 10. Apr 2011 11:55

AW: Problem mit 2 Listviewkomponenten
 
Wenn die RadioButtons auf einer RadioGroup liegen und per Items definiert wurden könnte es auch so gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I,L: Integer;
  Item: TListItem;
begin
  ListView1.Items.BeginUpdate;
  try
    ListView2.Items.Clear;
    L := RadioGroupDings.ItemIndex;
(*    for I := 1 to 5 do
    begin
      if (TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Checked) then
      begin
        Label3.Caption := TRadioButton(FindComponent('RadioButton'+IntToStr(I))).Caption;
        L := I;
      end;
    end; *)
    if L > -1 then
      begin
        for I := 0 to Listview1.Items.Count - 1 do
          if (pos(Edit1.Text, Listview1.Items[I].SubItems[L]) > 0) then
            begin
              Item := ListView2.Items.Add;
              Item.Caption := Listview1.Items[I].Caption;
              Item.SubItems.AddStrings(Listview1.Items[I].SubItems);
            end;
        Listview1.Visible := False;
        Listview2.Visible := True;
        Panel2.Visible := True;
        Label4.Caption := Edit1.Text;
      end;
  finally
    ListView2.Items.EndUpdate;
  end;
end;
Ungetestet.

Capa 10. Apr 2011 11:59

AW: Problem mit 2 Listviewkomponenten
 
Danke für die Hilfe

:coder2: Weiß nicht was mich da schon wieder geritten hat :/


Radiogroup da stehen doch alle untereinander oder ? bei mir is das aus platzgründen etwas anderst angeordnet

DeddyH 10. Apr 2011 12:01

AW: Problem mit 2 Listviewkomponenten
 
Nicht unbedingt, im OI kannst Du das über Columns einstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.

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