AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Formular soll beim Schließen ein Wert zurückgeben
Thema durchsuchen
Ansicht
Themen-Optionen

Formular soll beim Schließen ein Wert zurückgeben

Ein Thema von delphicoder123 · begonnen am 26. Feb 2019 · letzter Beitrag vom 27. Feb 2019
Antwort Antwort
delphicoder123

Registriert seit: 14. Feb 2019
102 Beiträge
 
#1

Formular soll beim Schließen ein Wert zurückgeben

  Alt 26. Feb 2019, 15:58
Hallo zusammen,

wie schaffe ich es, dass beim Schließen des zweiten Formulars, ein Wert(z.B. string) an das erste Formular übergeben wird?

Wenn möglich, ohne globale oder public Variablen zu verwenden.

Wäre nett, wenn ihr mir eine ausführliche Antwort geben könntet, da ich noch Anfänger bin und manchmal Verständnisprobleme habe.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von timog
timog

Registriert seit: 26. Sep 2006
Ort: Landkreis Oldenburg (Oldb)
117 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 26. Feb 2019, 16:11
Was spricht für diesen Anwendungsfall denn gegen ein öffentliches Feld?

Code:
...
public
// in Form2
  FVariable: string;
...
Code:
// in Form1 der Aufruf
Form2:=TForm2.Create(self);
try
  if Form2.ShowModal = mrOK then
  begin
    ShowMessage(Form2.FVariable);
  end;
finally
  Form2.free
end;
Alternativ kannst Du auch eine dritte unit nehmen, in der die Datenhaltung in einem eigenen Objekt gemacht wird. Kommt wie so oft auf den Anwendungsfall an und ob es wirklich nur eine Variable ist oder ein Dutzend.
Timo
Real Programmers are surprised when the odometers in their cars don't turn from 99999 to 9999A.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 26. Feb 2019, 16:56
Ich füge für solche Fälle (also Dialoge, die immer modal angezeigt werden und (geänderte) Werte zurückliefern), eine public class function Execute hinzu:

Delphi-Quellcode:
class function TMyDialog.Execute(_Owner: TWinControl; var _SomeValue: integer): boolean;
var
  frm: TMyDialog;
begin
  frm := TMyDialog.Create(_Owner);
  try
    TForm_CenterOn(frm, _Owner);
    frm.SetData(_SomeValue);
    Result := (frm.ShowModal = mrOK);
    if Result then
      frm.GetData(_SomeValue);
  finally
     FreeAndNil(frm);
  end;
end;
Statt nur eines Wertes kann man natürlich beliebig viele als Parameter übergeben.

Dazu kommen dann noch jeweils die .SetData und .GetData Methoden mit passenden const bzw. out Parametern. Die setzen die Controls entsprechend der Werte bzw. lesen die Werte aus den Controls aus.

Aufruf dann mit
Delphi-Quellcode:
 if TMyDialog.Execute(Self, SomeValue) then
   WriteLn('Wert wurde auf ', SomeValue, ' gesetzt.');
Thomas Mueller
  Mit Zitat antworten Zitat
delphicoder123

Registriert seit: 14. Feb 2019
102 Beiträge
 
#4

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 26. Feb 2019, 21:38
Was spricht für diesen Anwendungsfall denn gegen ein öffentliches Feld?

Code:
...
public
// in Form2
  FVariable: string;
...
Code:
// in Form1 der Aufruf
Form2:=TForm2.Create(self);
try
  if Form2.ShowModal = mrOK then
  begin
    ShowMessage(Form2.FVariable);
  end;
finally
  Form2.free
end;
Alternativ kannst Du auch eine dritte unit nehmen, in der die Datenhaltung in einem eigenen Objekt gemacht wird. Kommt wie so oft auf den Anwendungsfall an und ob es wirklich nur eine Variable ist oder ein Dutzend.

Wäre es auch irgendwie mit einer private Variablen möglich?
Würde ModalResult := mrCancel oder ModalResult := mrOK etwas bringen?

Geändert von delphicoder123 (26. Feb 2019 um 21:45 Uhr) Grund: Ergänzung eingefügt
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#5

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 27. Feb 2019, 06:53
Wäre es auch irgendwie mit einer private Variablen möglich?
Ja, über ein property:
Delphi-Quellcode:
TForm2 = class(TForm)
  private
    fMyVar:String;
  public
    ...
  property MyVar:string read fMyVar;
end;
in Form1 der Aufruf
Delphi-Quellcode:
Form2:=TForm2.Create(self);
try
  if Form2.ShowModal = mrOK then
  begin
    ShowMessage(Form2.MyVar);
  end;
finally
  Form2.free
end;
Du könntest dem property dann auch noch einen Getter und Setter verpassen und darin in Form2 die entsprechenden Controls setzen bzw auslesen.
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 27. Feb 2019, 09:50
Würde ModalResult := mrCancel oder ModalResult := mrOK etwas bringen?
Ja wenn du das Formular mit ShowModal anzeigst. Da kannst du ganz einfach deinem z. B. OK-Button im Objekt-Inspektor das ModalResult setzen. Bei einem Abbrechen Button genau so. Da brauchst du gar keinen Code schreiben. Das ModalResult wird beim Button-Click automatisch im Form gesetzt. So kannst du es auswerten:

Delphi-Quellcode:
  if DeinForm.ShowModal = mrOK then
    //OK gedrückt
  else
    // anderes ModalResult
Wenn du mehr als nur OK und Abbrechen Button hast gehts auch so:
Delphi-Quellcode:
var
  FormResult: TModalResult;
begin
  FormResult := DeinForm.ShowModal;
  case FormResult of
    mrOK: // OK gedrückt;
    mrYes: // Ja gedrückt;
    ...
  end;

  // Du kannst das case auch um einen Else-Zweig erweitern:
  FormResult := DeinForm.ShowModal;
  case FormResult of
    mrOK: // OK gedrückt;
    mrYes: // Ja gedrückt;
  end
  else
    // ein anderes modalresult das nicht im case ist...
end;
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 27. Feb 2019, 10:28
Ich füge für solche Fälle...class function TMyDialog.Execute(_Owner: TWinControl; var _SomeValue: integer): boolean;... ...
@delphicoder123: Was spricht gegen den Vorschlag von dummzeuch? Das ist der eleganteste und direkteste Weg.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Formular soll beim Schließen ein Wert zurückgeben

  Alt 27. Feb 2019, 10:34
Ich füge für solche Fälle...class function TMyDialog.Execute(_Owner: TWinControl; var _SomeValue: integer): boolean;... ...
@delphicoder123: Was spricht gegen den Vorschlag von dummzeuch? Das ist der eleganteste und direkteste Weg.
Und auch die Variante, die ich seit Jahren in fast identischer Form so nutze.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz