Autor Beitrag
cromekk
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 18.06.03 10:07 
Hallo, ich grüble schon seit Tagen an diesem Problem:

Wenn ich eine Zweite Form aufrufen, und z.b. in einem vorhandenen TEdit etwas schreibe, diese Form dann wieder mit close schliesse, und dann direkt wieder diese Form aufrufe, dann steht der Text den ich geschrieben habe immer noch da.

Wie kann ich das umgehen, sprich ich will das die Form immer "neu" geladen wird. Habe schon mmit RELEASE experimentiert, aber ausser Exceptions war nix.

Gruss
cromekk
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 18.06.03 10:24 
hallo,

um das problem zu umgehen musst du die Form bei jedem aufruf neu erzeugen. Sonst zeigst du immer nur die gleiche instanz des Formulars an. Also...

1. Unter Projekt|Optionen nimmst du alle, ausser das Hauptformular aus der Lister der automatisch zu erzeugenden Formulare raus.

2.a In der Prozedur, die dein Zweites Formular aufruft musst du folgendes Einbauen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
...
  LDialog: TForm2;
begin

...
  // den folgenden teil anstelle des Aufrufs von show oder showmodal
  LDialog := TForm2.create(self);
  try
    LDialog.showmodal;
    // jetzt kannst du noch den Wert auslesen
  finally
    FreeAndNil(LDialog);
  end;
...


2.b oder als alternative deklarierst du in der unit des form2 eine Funktion sowas wie...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
...
function executeForm2(var AEingabe: String): Boolean;

implementation

function executeForm2(var AEingabe: String): Boolean;
var
  LDialog: TForm2;
begin
  LDialog := TForm2.create(self);
  try
    result := LDialog.showmodal = mrOK;
    if result then
      AEingabe := LDialog.Edit1.text;
  finally
    FreeAndNil(LDialog);
  end;
end;


verwendest du methode 2b musst du an der stelle, wo du vorher dein Formular angezeigt hast nur executeForm2 reinschreiben und dann hast du anschließend in dem übergebenen Parameter deine Eingabe.

Viel Spaß
Ken
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 18.06.03 12:27 
hmmm.. ich weiss nicht, das sieht mir etwas umständlich aus....

es gibt doch bei Formen das OnShow-Ereignis.
in dieses Prozedur schreibst du dann rein, dass z.B. der Text im TEdit gelöscht wird (den genauen Code kann ich dir nicht geben, habe noch nie mit TEdit gearbeitet...irgendwas wie Edit1.text.clear oder so... ;-) )

Halte ich für eine wesentlich einfachere Lösung. So wird auch die Form nicht immer wieder neu erzeugt, sondern nur Teile davon werden aktualisiert.

Hoffe, das hilft,
Daniel

_________________
We are, we were and will not be.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 18.06.03 12:32 
@Gausi, du hast schon recht. Auf den ersten Blick ist das immer etwas umständlich, dafür ist es wesentlich einfacher zu warten.
Stell Dir vor, du hast nachhern so zwanzig Eingabefelder oder sonstwas, dann ist das neu erzeugen wie von mir als beispiel gegeben wesentlich kürzer, als 20 mal
dieses.text := '';
zu schreiben...
Der befehl nennt sich Edit.text := '';

Ach, und es hört sich an, als ob Du das für schlimm finden würdest, das formular jedes mal neu zu erzeugen. Mich würde mal interessieren, was du daran schlimm findest.
Schließlich sparst Du "wertvollen" Speicherplatz, wenn Du deine Formulare nicht automatisch beim Programmstart erzeugen lässt, sondern erst zur Laufzeit den Speicher zuweist.

Nichts für ungut :wink:

Gruß
Ken
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 18.06.03 13:40 
Stimmt, wenn man viel aktualisiern muss, dann würd ich auch deine Variante nehmen.
Wenn man allerdings nur ein oder zwei Sachen ändern muss, aber die Form des öfteren öffnet und schließt (und den Eindruck hatte ich), dann ist meine Alternative schneller, denke ich mal.

Zu dem Speicherplatz: Es ist halt immer die Frage, was man höher gewichtet, die Zeit oder den Platz. Bei der gegenwärtigen Speicherverfügbarkeit achte ich mehr auf Geschwindigkeit als auf den Platz.

Ist natürlich eine Frage, über die man trefflich streiten kann. Kommt sicherlich auch drauf an, was man für ein Programm schreibt.

Alles Gute,
Daniel

_________________
We are, we were and will not be.