Einzelnen Beitrag anzeigen

Naryxus

Registriert seit: 30. Sep 2011
6 Beiträge
 
#1

Fehlermeldung unerklärlich

  Alt 30. Sep 2011, 11:32
Hallo, ich habe ein größeres Problem bei dem ich einfach keine Lösung finde.
Erst mal allgemein: Ich habe...
  • eine ListView mit verschiedenen Elementen
  • eine Groupbox, die noch leer ist

Bei Klick auf ein Element der ListView (gelöst durch das Event "OnClick") soll genau dieses Element in der Groupbox als Label angezeigt werden (also die Caption des Elements). Dies habe ich durch folgende Prozedur gelöst:
Delphi-Quellcode:
procedure TForm1.ListView1Click(Sender: TObject);
var MyLabel:TLabel;
var labelname:string;
begin
  if(form1.ListView1.ItemFocused.Caption<>'') then //Prüfung ob ein Element angeklickt wurde
  begin
    MyLabel:=TLabel.Create(Form1);
    with MyLabel do begin
      Caption:=form1.Listview1.ItemFocused.Caption;
      labelname:=form1.Listview1.ItemFocused.Caption;
      Delete(labelname, 2, 1); //Bearbeitung der Caption für den Namen, da Sondezeichen enthalten
      name:='Label'+labelname;
      left:=10;
      top:=labelvar*20; //globale Variable, um die Labels untereinander anzuzeigen
      visible:=true;
      parent:=groupbox3;
      onClick:=loesche; //Prozedur, zu der ich noch komme
    end;
    labelvar:=labelvar+1;
    form1.ListView1.ItemFocused.Delete;
  end
end;
Mit dieser Prozedur wird also ein Label mit der Caption des Elements erzeugt und das Element selbst in der ListView gelöscht. Soweit funktioniert auch alles.

Probleme gibts jetzt aber bei der Prozedur zum Löschen der Labels. Allgemein soll die Prozedur beim Klicken auf das Label das Element der ListView wieder hinzugefügt werden und das Label wieder gelöscht werden. Das läuft durch folgende Prozedur:

Delphi-Quellcode:
procedure TForm1.loesche (Sender: TObject);
var fahrzeug, listenfahrzeug:string;
var listitem:TListItem;
var fahrzeugliste:array[0..5] of integer;
var i:integer;
begin
  fahrzeug:=(Sender as TLabel).Caption; //Caption des angeklickten Labels herausfinden
  listitem:=form1.ListView1.Items.Add; //Hinzufügen des Elements in die ListView
  listitem.Caption:=fahrzeug; //Caption des Labels als Caption des neuen Elements
  for i:=1 to form1.ListView1.Items.Count do begin //Im folgenden Block werden alle Elemente der ListView in einem Array gespeichert
    listenfahrzeug:=form1.ListView1.TopItem.Caption;
    delete(listenfahrzeug, 1, 2);
    fahrzeugliste[i]:=strtoint(listenfahrzeug);
    form1.Edit12.Text:=form1.Edit12.Text+listenfahrzeug+', ';
    form1.listview1.topitem.Delete;
  end;
  for x:=2 to i-1 do begin //Hier wird das Array dann sortiert von klein nach groß
    z:=fahrzeugliste[x];
    y:=x;
    while(y>1) and (fahrzeugliste[y-1]>z) do begin
      fahrzeugliste[y]:=fahrzeugliste[y-1];
      dec(y);
    end;
    fahrzeugliste[y]:=z;
  end;
  for x:=1 to i-1 do begin //Hier wird dann das geordnete Array wieder in die ListView eingefügt
    listitem:=form1.ListView1.Items.Add;
    listitem.Caption:='1/'+inttostr(fahrzeugliste[x]);
  end;
  (Sender as TLabel).Destroy; //Zuletzt wird dann das angeklickte Label wieder gelöscht
end;
Die Prozedur funktioniert an sich auch wunderbar, die ListView wird sortiert und richtig angezeigt.
Folgende Situationen habe ich durchgespielt:
  • ein Label wird gelöscht (funktioniert)
  • zwei Labels werden der Groupbox hinzugefügt und dann jeweils wieder gelöscht (funktioniert)

So weit, so gut. Füge ich jetzt aber drei Elemente der Groupbox hinzu, entstehen folgende Situationen:
  1. Löschen des ersten Labels (funktioniert)
  2. Anschließendes Anklicken des zweiten Labels (funktioniert nicht)
    1loesch2klick.jpg
  3. Anschließendes Anklicken des dritten Labels (funktioniert nicht)
    1loesch3klick.jpg

Genauso setzt sich das dann auch bei mehreren Elementen fort. Genauso auch, wenn man das erste Label nicht löscht, sondern gleich das zweite, dritte oder vierte Label anklickt.
Ich habe schon vermutet, dass es sich um irgendein Problem mit dem Namen des Labels handelt, wenn man mehr als ein Label erstellt. Allerdings müsste man dann noch die Anomalie bei zwei Labels erklären, dort funktioniert es nämlich, egal in welcher Reihenfolge man diese Labels anklickt, sie werden gelöscht und der ListView hinzugefügt.

Ich hoffe, ich konnte mein Problem einigermaßen klar darstellen und hoffe auf eure Hilfe,

mit freundlichen Grüßen, Naryxus
  Mit Zitat antworten Zitat