![]() |
Delphi XE6 ComboBox im Frame wirft Exception bei Items
Moin,
in meiner Anwendung wird dynamisch ein Frame erzeugt. Der Kind-Frame enthält u.a. eine TComboBox:
Delphi-Quellcode:
Der Frame wirft eine Exception, aber nur, wenn in den Items ein String (oder nur ein einzelnes Zeichen) ist:
type
TblaFrame = class(TBasicFrame) cb: TComboBox; ...
Delphi-Quellcode:
Ist Items leer, läuft die Kiste an. Wenn ich allerdings Items hinzufüge gibt es wieder eine Exception:
private
ProtokollFrame: TBasicFrame; ProtokollFrame := TblaFrame .create(Self); Typ= EReadError - Error= Fehler beim Lesen von cb.Items.Strings: Element 'blaFrame' hat kein übergeordnetes Fenster
Delphi-Quellcode:
Was meint die Meldung: "Element 'blaFrame' hat kein übergeordnetes Fenster"
cb.Items.add('1');
oder cb.Items.Strings[0] := '1'; oder auch bei cb.Items.Clear; Alle anderen Frames, die so aufgerufen werden arbeiten korrekt. Die haben auch keine ComboBox.... Hat jemand eine Idee dazu?:cyclops: |
AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items
Delphi-Quellcode:
ProtokollFrame.Parent := Panel1; // Das, worauf ProtokollFrame erscheinen soll.
// oder ProtokollFrame.Parent := Form1; // oder ProtokollFrame.Parent := Self; // Janachdem, was hier Self ist und ob man ein Frame darauf platzieren kann / darf. // eventuell noch: ProtokollFrame.Align := alClient; // alTop ... // oder ProtokollFrame.Top := 0; // Oder welche Koordinaten, Höhe, Breite ... sonst gewünscht sind. ProtokollFrame.Left := 8; ProtokollFrame.Height := 15; ProtokollFrame.Width := 42; |
AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items
Danke für den Tipp !
Was ich unterschlagen hatte, waren die folgenden Zeilen nach create:
Delphi-Quellcode:
Da create(Self) vor ..Parent:=PanelStandard kommt, wäre es eine Erklärung für "Element 'blaFrame' hat kein übergeordnetes Fenster"
ProtokollFrame := TblaFrame.create(Self);
... ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird. ProtokollFrame.Parent := PanelStandard; //TPanel da wegen der ComboBox sowieso eine Exception passiert. Der Ursprung der Exception ist jedoch die ComboBox mit einem Item, und hier passiert es schon bei create. Wie der Debugger im CPU-Fenster zeigt, springt er hier auf 004CB08C
Code:
was jedoch kein gültiger Maschinenbefehl zu sein scheint:004CB087 008CB04C0055E8:
004CB08C 55 push ebp
004CB08D E81AFDFFFF call HandleException 004CB092 59 pop ecx 004CB093 E89CE9F3FF call @DoneExcept 004CB098 33C0 xor eax,eax 004CB09A 5A pop edx 004CB09B 59 pop ecx 004CB09C 59 pop ecx 004CB09D 648910 mov fs:[eax],edx
Code:
004CB06C E893E7FFFF call TReader.PropertyError
004CB071 33C0 xor eax,eax 004CB073 5A pop edx 004CB074 59 pop ecx 004CB075 59 pop ecx 004CB076 648910 mov fs:[eax],edx 004CB079 EB1D jmp $004cb098 004CB07B E9C4E5F3FF jmp @HandleOnException 004CB080 0100 add [eax],eax 004CB082 0000 add [eax],al 004CB084 C0DD41 rcr ch,$41 004CB087 008CB04C0055E8 add [eax+esi*4-$17aaffb4],cl 004CB08E 1AFD sbb bh,ch 004CB090 FFFF db $ff $ff 004CB092 59 pop ecx 004CB093 E89CE9F3FF call @DoneExcept 004CB098 33C0 xor eax,eax Übrigens, gibt es keine Probleme, wenn alternativ statt der ComboBox eine RadioGroup verwendet wird. |
AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items
Delphi-Quellcode:
Da die Combobox wohl 'nen Parent braucht (und zwar vor ihrer erstmaligen Benutzung / Befüllung ..., wäre es eventuell sinnvoll ihr vor der erstmaligen Benutzung / Befüllung ... einen Parent zuzuweisen.
ProtokollFrame := TblaFrame.create(Self);
... ProtokollFrame.Parent := PanelStandard; //TPanel ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird. Was wir nicht wissen: Was bitte ist denn Self? Ein TForm, ein TPanel, 'ne Bratkartoffel ;-), ...? Self muss halt etwas sein, auf das man 'ne ComboBox legen darf. In der IDE, im Formulardesigner, kann man 'ne ComboBox ja auch nicht zwingend überall drauflegen, wobei die IDE "schlau genug ist", die entsprechenden Komponenten erst garnicht in der Komponentenauswahl anzubieten. Sollte Self z. B. ein Datenmodul sein, so wird das scheitern, bei 'nem WebModul ebenfalls.
Delphi-Quellcode:
ProtokollFrame := TblaFrame.create(PanelStandard);
ProtokollFrame.Parent := PanelStandard; //TPanel ... ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz