Edit->Text auf anderem Formular ändern (bei FormShow)
-
Hallo,
wieso funktioniert es nicht, bei Form1Show den Text von Edit bei Form2 zu ändern?
Es kommt folgende Meldung:--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004019E6 in Modul 'Project1.exe'. Lesen von Adresse 000002F0'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.Mein Code ganz einfach:
Form2->Edit1->Text="abcdef";
-
Hallo
gibt es da dir Form2 schon ?
Mfg
Klaus
-
Ich weiß nicht genau
also mit
Form2->Show();
Form2->Edit->Text="abcdef"
Form2->Close();
gehts au net
-
Hallo
es reicht nicht, nur einen Pointer vom richtigen Typ zu haben. Du must auch eine gültige Instanz dahinter haben. Normalerweise gibt es zu jeder Formklasse TForm2 auch einen automatisch angelegten und initialisierten Pointer Form2. Wenn du auf genau diese eine Instanz zugreifen willst, must du immer den entsprechenden Header includen. Hast du eigene Zeiger, must du darauf achten immer denen eine gültige Instanz zuzuweisen.
Du kannst natürlich auch gleich zur Laufzeit eigene Form-Instanzen erstellen.
TForm2* myform = new TForm2(0); myform->Edit->Text="abcdef" myform->ShowModal(); delete myform;bis bald
akari
-
Hmmm also eigentlich mache ich alels so wie immer (sonst funktioniert es) aber es liegt glaub ich daran das ich es in Form1Show mache
mein gesater code://--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Form2->Show(); Form2->Edit1->Text="abcdef"; Form2->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form2->Show(); }
-
Ach mist

Sorry meine Form1Create
-
Hallo
- Niemals OnCreate oder OnDestroy benutzen (hatten das Thema heute schon einmal)
- Und wenn dann dadrin auch nicht Show aufrufen. Erzeugung der Instanz und Anzeigen sind zwei Schritte die nacheinander ablaufen müßen. Schau dir mein Beispiel an, da ist klar zu erkennen
1. Erstellen der Instanz
2. Zuweisen der Werte an die Controls
3. Anzeigen des Formsbis bald
akari
-
ich benutze öffters OnCreate z.B. um die Registry zu checken oder so, bis jetzt ohne Probleme. Aber Form2 kan erst angezeigt werden, wenn Form1 steht. Denke, weil erst die Hauptform erstellt wird und somit Form2 noch nicht existiert.
-
OldMan00 schrieb:
ich benutze öffters OnCreate z.B. um die Registry zu checken oder so, bis jetzt ohne Probleme.
Überleg dir mal, wann OnCreate wohl aufgerufen wird?
Man kann die Erstellungsreihenfolge von Formularen im Projektquelltext verändern um solche Probleme vorzubeugen. Aber ich würde mich vielleicht sowieso fragen ob der Code da richtig aufgehoben ist wo er jetzt steht? Ist das Anzeigen von Form 2 tatsächlich von Form 1 abhängig? Und soll Form2 tatsächlich schon bei der Erstellung von Form1 angezeigt werden oder erst beim Anzeigen