![]() |
zweites Formular lässt sich nicht anzeigen
Ich will in meinem Programm ein zweits Formular anzeigen lassen, doch irgenwie kommt mit dem Befehl show nur eine Zugriffsverletzung raus.
Kann mir da jemand helfen?
Delphi-Quellcode:
program myToDo;
uses Forms, unmain in 'unmain.pas' {frmmain}, unnew in 'unnew.pas' {frmnew}; {$R *.res} begin Application.Initialize; Application.CreateForm(Tfrmmain, frmmain); Application.Run; end.
Delphi-Quellcode:
unit unmain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst, Buttons; type Tfrmmain = class(TForm) lstToDo: TCheckListBox; cmdNew: TBitBtn; cmdchange: TBitBtn; cmdDelete: TBitBtn; lstSortItems: TListBox; procedure cmdNewClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frmmain: Tfrmmain; procedure SortTasks(); implementation uses unnew; procedure SortTasks(); Begin showmessage('hallo'); end; {$R *.dfm} procedure Tfrmmain.cmdNewClick(Sender: TObject); begin frmnew.Show; end; end.
Delphi-Quellcode:
unit unnew;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type Tfrmnew = class(TForm) GroupBox1: TGroupBox; txttitle: TEdit; GroupBox2: TGroupBox; txtday: TEdit; txtmonth: TEdit; txtyear: TEdit; cmdInputNew: TBitBtn; Label1: TLabel; Label2: TLabel; procedure cmdInputNewClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frmnew: Tfrmnew; implementation uses unmain; {$R *.dfm} procedure Tfrmnew.cmdInputNewClick(Sender: TObject); begin unmain.frmmain.lstToDo.AddItem(txtday.Text + '.'+ txtmonth.Text + '.' + txtyear.Text + ': ' + txttitle.Text, unmain.frmmain.lstToDo); frmnew.Hide; end; end. |
Re: zweites Formular lässt sich nicht anzeigen
Hallo,
Und wo wird die Form erzeugt? Zitat:
|
Re: zweites Formular lässt sich nicht anzeigen
Hast du das so gemeint:
"Tfrmnew.Create(self).Show;" wenn ja, dann danke. Das funktioniert wunderbar. Früher als ich meine VB-Phase haate, ging das einfach mit .show, aber man lernt nie aus. |
Re: zweites Formular lässt sich nicht anzeigen
kann es event. sein, dass du in deiner Projektdatei irgendwie aus Versehen eine Zeile gelöscht hast, die dort jetzt nämlich eigentlich noch mit anwesend sein müsste, und zwar diese:
Delphi-Quellcode:
Irgendwie spricht dafür auch die Existenz der folgenden Zeile (in der Uses-Klausel deiner Projektdatei):
Application.CreateForm(Tfrmnew, frmnew);
Delphi-Quellcode:
Beide Zeilen werden nämlich automatisch erzeugt, wenn ich über das Hauptmenue Datei->Neu->Formular meinem Projekt eine weitere Form zufügen möchte. ...Und dementsprechend werden also auch alle nicht dynamisch erzeugte Formen am Programmstart erst einmal durch solche Anweisungen gemeinsam erzeugt. Womit also auch dein erster Show-Form-Versuch:
unnew in 'unnew.pas' {frmnew};
Delphi-Quellcode:
so dann eigentlich korrekt gewesen wäre. Dein aktueller Versuch, die Form dynamisch mittels
frmnew.Show;
Delphi-Quellcode:
zu erzeugen, ist jedoch eher falsch, weil du danach bei jedem neuen Click auf den cmdNew-Button (den nehm ich jetzt mal an) dann nämlich immer wieder eine neue solche Form erzeugen würdest, ohne eine alte solche davor überhaupt noch freigeben zu können. Hierzu hättest du den Ptr "frmnew" bei der Erzeugung der Form nämlich zuerst entsprechend mit laden müssen:
Tfrmnew.Create(self).Show;
Delphi-Quellcode:
um dann nachher irgendwann diese wieder mittels der Free-Methode freigeben zu können:
frmnew := Tfrmnew.Create(self);
// danach dann event: frmnew.Show;
Delphi-Quellcode:
(Solltest du jedoch die wahrscheinlich irgendwie verloren gegangene erste Zeile oben wieder reinstallieren wollen, dann brauchst du jetzt kein eigenes Free'n dieser Form mehr auszuführen (wird dann beim Ende der Application automatisch erledigt)) usw. usf... *g*
frmnew.free;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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