![]() |
Element '' hat kein übergeordnetes Fenster
Moin Leute.
Ich bin gerade dabei mir ein wenig Delphi beizubringen. Stolpere aber über einen relative kleinen Stein Namens InvalidOperation Exception mit der o.g. Meldung. Mein Plan (Abstract): Eine Textdatei auslesen und gültige Einträge in einer ListBox darstellen. Mein Code:
Delphi-Quellcode:
Die Meldung besagt ja dass das Befüllen der Listbox illegal ist.
unit Unit1;
interface uses Windows, Messages, StrUtils, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; filename : String; entries : Array[Byte, 1..2] of String; implementation {$R *.dfm} // Hilfsfunnktion procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ; begin Assert(Assigned(Strings)) ; Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end; procedure TForm1.FormCreate(Sender: TObject); var line : String; handle : TextFile; i : Integer; A : TStringList; begin // assign components ListBox1 := TListBox.Create(self); filename := 'Road/to/File'; AssignFile(handle, filename); Reset(handle); i := 0; while not Eof(handle) do begin ReadLn(handle, line); if (AnsiStartsStr('#', line) <> true) AND (Length(line) > 0) then begin // ab hier haben wir gueltige eintraege // temporaerer Container instanziieren A := TStringList.Create(); try Split(' ', line, A); entries[i,1] := a[0]; entries[i,2] := a[1]; ListBox1.Items.Add(entries[i,2]); i:=i+1; finally // Container lösen A.Free; end; // try end; // if end; // loop end; // procedure end. Der Debugger sagt definitiv dass es hier passiert
Delphi-Quellcode:
Seht ihr einen Fehler?!
ListBox1.Items.Add(entries[i,2]);
Vielen Dank im Voraus! Cheers! [edit=SirThornberry]Titel des Beitrags geändert - Mfg, SirThornberry[/edit] |
Re: Element '' hat kein übergeordnetes Fenster (Newbie)
Hallo,
gehe ich Recht in der Annahme, dass die Listbox schon im Designer erstellt wird? Dann darfst Du diese nicht nochmals erstellen, das erledigt die VCL für Dich. Wenn nicht, dann musst Du Deiner Listbox noch ein Parent übergeben, in dem sie angezeigt werden soll. In Deinem Fall das Fenster selbst:
Delphi-Quellcode:
Übrigens läuft Dir nach 256 Einträgen Dein Array über. Du kannst auch einfach eine StringList nehmen, die kann mit Schlüssel-/Wertepaaren umgehen. Dann kannst Du einfach die ganze Datei einlesen und die Kommentarzeilen rausschmeißen. Ich hänge mal ein kommentiertes Beispiel an:
Listbox1.Parent := Self;
Delphi-Quellcode:
Gruß
type
TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private // StringListe Methode definieren Values: TStringList; procedure LoadFile(const Name: String); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // StringListe anlegen und vorbereiten Values := TStringList.Create; Values.NameValueSeparator := ' '; // Datei laden LoadFile('C:\Test.txt'); end; procedure TForm1.FormDestroy(Sender: TObject); begin // Stringliste zerstören Values.Free; end; procedure TForm1.LoadFile(const Name: String); var C: Integer; begin // Datei laden Values.LoadFromFile(Name); // Kommentare und leere Zeilen ausfiltern for C := Values.Count - 1 downto 0 do if (Values[C] = '') or (Pos('#', Trim(Values[C])) = 1) then Values.Delete(C); // Listbox füllen ListBox1.Items.BeginUpdate; try ListBox1.Items.Clear; for C := 0 to Values.Count - 1 do ListBox1.Items.Add(Values.ValueFromIndex[C]); finally ListBox1.Items.EndUpdate; end; end; xaromz |
Re: Element '' hat kein übergeordnetes Fenster (Newbie)
Super!
Klappt! Danke! ;)
Delphi-Quellcode:
habe ich entfernt und es läuft alles super... noch...
ListBox1 := TListBox.Create(Self);
wär super wenn du den thread im augen behältst, falls da noch Fragen auftreten. Was schon fast garantiert ist. Ich komme aus der Java Ecke und habe noch nie mit mit Pascal/Delphi zu tun gehabt.. ist mal ein ganz anderes Konzept ;) Danke nochmal |
Re: Element '' hat kein übergeordnetes Fenster (Newbie)
Wie läft das eigentlich mit dem VCL?
Warum musste ich die Zuweisung herausnehmen? Ist da so eine Art Descriptor der die Formular-Komponenten schon bei (visueller) Erstellung registriert? oder wie? |
Re: Element '' hat kein übergeordnetes Fenster
Bei uns gilt pro Frage ein neuer Thread. Wenn du also eine weitere Frage hat die nix mit dem Titel zu tun hat eröffne einfach einen neuen Thread mit dem neuen Problem. :-)
Um zu vermeiden das die neue Frage, welche nix mehr mit dem ursprünglichen Titel zu tun hat, behandelt wird mach ich hier mal zu. *** LOCKED *** |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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-2025 by Thomas Breitkreuz