AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi 'Komponente existiert bereits'
Thema durchsuchen
Ansicht
Themen-Optionen

'Komponente existiert bereits'

Ein Thema von Mazen · begonnen am 12. Okt 2011 · letzter Beitrag vom 12. Okt 2011
Antwort Antwort
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#1

'Komponente existiert bereits'

  Alt 12. Okt 2011, 07:11
Guten morgen

Ich habe ein kleines Problem mit meinen dynamisch zur Laufzeit erstellten Checkboxen. (chk_2 bis chk_15)...
Beim ersten öffnen der Form läuft es wie es soll, die checkboxen werden angezeigt, keine Fehlermeldung. Hier mein Sourcecode zum Erzeugen der Komponenten.

Schließe ich die Form dann wieder, und rufe sie ein zweites mal auf (es handelt sich hierbei nicht um die "Hauptform" sondern um eine die sich über frmMain aufrufen lässt) bekomm ich die Meldung "Komponente mit der Bezeichnung 'chk_2' existiert bereits". Die Form öffnet dann allerdings trotzdem und es sind auch alle Checkboxen da... Aber das kann ja auch irgendwie so nicht richtig sein^^

Hatt erst das Free vergessen, aber auch mit
Code:
procedure TfrmRechte.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  cbRechte.Free;
end;
funktioniert es nicht :/
cbRechte ist vom Typ TCheckBox...

Hier auch nochmal der Sourcecode wo ich die Komponenten erzeuge:

Code:
for i := 0 to dm.smtZiele.RecordCount-2 do begin
    cbRechte := TCheckBox.Create(self);
    cbRechte.Caption := dm.smtZiele.FieldByName('user').AsString;
    cbRechte.Name := 'chk_'+dm.smtZiele.FieldByName('user_id').AsString;
    cbRechte.Left := 35;
    cbRechte.Top := top;
    cbRechte.Parent := frmRechte;
    cbRechte.Show;

    top := top + 17;
    dm.smtZiele.Next;
 end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: 'Komponente existiert bereits'

  Alt 12. Okt 2011, 07:21
cbRechte enthält ja nur die letzte erzeugte Checkbox, da die Variable ja bei jedem Schleifendurchlauf neu überschrieben wird. Da Du den Owner setzt könnte es helfen, diesen freizugeben. Alternativ kannst Du die Checkboxen aber auch in einer TObjectList bzw. TComponentList verwalten. Übrigens ist eine Namensangabe für Komponenten nicht erforderlich.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#3

AW: 'Komponente existiert bereits'

  Alt 12. Okt 2011, 08:09
mhh... das mit dem Owner ist mir noch nicht so ganz klar, und das mit der ObjectList auch nicht...
Bin noch relativ neu in Delphi....

Habs jetzt aber trotzdem gelöst, und zwar so:

Code:
for i := 2 to dm.smtZiele.RecordCount do
begin
  TCheckBox(FindComponent('chk_'+IntToStr(i))).Free;
end;
Mit Sicherheit nicht die schnellste/beste methode, aber es funktioniert^^

Und wieso sollte ich meinen Komponenten keine Namen geben? Dann werden sie doch einfach "CheckBox1" bis "CheckBox14" benannt oder? Mein Problem dabei ist das die Nummer am Ende nicht zwangsläufig fortlaufend ist, sondern der ID des Datensatzen in der Datenbank entspricht, und wenn da mal was rausgelöscht wird ist es eben nicht mehr praktisch die CheckBoxen dann "autoamtisch" benennen zu lassen...
Oder meintest du das gar nicht?^^

Wo ich das grade schreibe merke ich das meine Lösung da oben dann gar nicht unbedingt funktionieren kann, da ich da ja auch mit der Variable i arbeite die einfach nur hochzählt...
Das werde ich noch ändern müssen...^^
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 'Komponente existiert bereits'

  Alt 12. Okt 2011, 08:19
Ich meinte ja nicht, dass Du dynamisch erzeugte Komponenten nicht benennen darfst, sondern nur, dass Du es nicht zwingend musst . Wenn Du Namen zur Identifikation benötigst ist es natürlich vollkommen in Ordnung, diese auch zuzuweisen. Bzgl. der ObjectList kann ich ja mal schnell ein Demo-Progrämmchen schreiben, dauert ein paar Minuten.

[edit] Here we go [/edit]
Angehängte Dateien
Dateityp: zip Dynamische Kompos.zip (2,2 KB, 26x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (12. Okt 2011 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#5

AW: 'Komponente existiert bereits'

  Alt 12. Okt 2011, 08:40
Danke für deine Hilfe
Dann hab ich jetzt auch die ObjectList verstanden...^^
  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 23:56 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