AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

zwischen Forms wechseln

Ein Thema von Hansa · begonnen am 11. Aug 2010 · letzter Beitrag vom 16. Aug 2010
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: zwischen Forms wechseln

  Alt 13. Aug 2010, 22:36
Erweitere die Form um eine Prozedur, der du den Caller übergibst
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

AW: zwischen Forms wechseln

  Alt 13. Aug 2010, 23:59
Caller, was ist das ? Soll das die aufrufende Form sein ? Falls dem so ist : Form1 ruft Form2 auf. Form2 merkt sich den Namen der aufrufenden Form. Jetzt will Form2 zurück zu der aufrufenden Form1.

Dasselbe Szenario kann aber auch mit Form93 passieren. Auch die geht zu Form2, merkt sich dass sie von Form93 aufgerufen wurde und dann soll es wieder zurück von Form2 zu Form93 gehen. Nicht zu Form1.

Form2 (die immer gleich bleibt) die weiss jetzt, dass sie von Form1 oder eben Form93 aufgerufen wurde. Genau dahin soll sie zurück. Über den Namen, der in der Variablen "AufrufFormName" gespeichert ist, soll sie genau dahin wieder zurück.
Gruß
Hansa
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: zwischen Forms wechseln

  Alt 14. Aug 2010, 00:45
Hallo Hansa,

was willst Du denn genau machen?

Also einfach zwischen den Forms hin und herschalten, kann man so machen...

Form1:
Delphi-Quellcode:
unit Main;

interface

uses
  Forms, Classes, StdCtrls, Controls,
  Form2;

type
  TfrmEins = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmEins: TfrmEins;

implementation

{$R *.dfm}

{ TfrmTemplate }

procedure TfrmEins.Button1Click(Sender: TObject);
begin
  frmZwei.Caller := Self;
  frmZwei.Show; // Form2 aufrufen
end;

end.

...und Form2:
Delphi-Quellcode:
unit Form2;

interface

uses
  Forms, Classes, StdCtrls, Controls;

type
  TfrmZwei = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FCaller : TForm;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    property Caller : TForm read FCaller write FCaller;
  end;

var
  frmZwei: TfrmZwei;

implementation

{$R *.dfm}

procedure TfrmZwei.Button1Click(Sender: TObject);
begin
  FCaller.SetFocus; // Zurück zu Form1. Zum Beispiel so...
end;

procedure TfrmZwei.Button2Click(Sender: TObject);
begin
  Close; // ...oder so. ;-)
end;

end.

Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: zwischen Forms wechseln

  Alt 14. Aug 2010, 07:47
Man könnte auch die Show-Methode entsprechend Überladen
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

AW: zwischen Forms wechseln

  Alt 15. Aug 2010, 17:46
Man braucht da keine Properties. Ich war aber wohl zu sparsam. Merkt man sich die komplette aufrufende Form und nicht nur den Namen, so ungefähr :

frm1.AufrufForm := self; dann läuft alles wie gewünscht.

SetFocus ist übrigens auch mit Vorsicht zu geniessen. So gehts allerdings (aus der aufgerufenen Form heraus) :

AufrufForm.BringToFront; Wie man dasselbe Szenario nur mit Hilfe des Form-Namens hinbekommt, das ist mir noch nicht klar. Irgendwie denke ich, dass auch das gehen müsste.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#6

AW: zwischen Forms wechseln

  Alt 16. Aug 2010, 02:11
Jedes Form kann doch einen Pointer auf sich selbst via Self liefern, warum willst Du den Umweg über den Namen gehen? Ich finde ein Konstrukt wie

SecondForm.Show(Self);

viel eleganter als da den Namen des Forms zu übergeben und dann später anhand des Namens nach dem richtigen Form zu suchen. Einfach wie von mkinzler schon angedacht TForm.Show überladen und fertig ist die Laube. Ggf. einziger Arbeitsaufwand: Überall im Projekt TForm durch die eigene abgeleitete Klasse ersetzen. Wenn Du nicht viel doppelten (eher vielfach identischen) Code schreiben willst, brauchst Du eh eine eigene Ableitung von TForm, warum also nicht gleich den Weg des geringsten Aufwands gehen? Durch die Überladung von TForm.Show kannst Du auch das Property einsparen, brauchst nur das private Field in der Klasse um den Aufrufer zu merken.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)

Geändert von OldGrumpy (16. Aug 2010 um 02:14 Uhr) Grund: coole Uhrzeit und Nachtrag ;)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:59 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