AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neues Forumular? + wie öffnen?

Ein Thema von eLem3ntx · begonnen am 31. Aug 2006 · letzter Beitrag vom 3. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von eLem3ntx
eLem3ntx

Registriert seit: 31. Aug 2006
Ort: Remshalden
22 Beiträge
 
#1

Neues Forumular? + wie öffnen?

  Alt 31. Aug 2006, 15:00
Hallihallo allerseits,

ich hab n prob mit delphi 2005. ich habe ein neues Formular erstellt über 'Neue Einträge'-->'Delphi-Dateien'-->'Formular'.

Wie kann ich jetzt auf Objekte von beiden Formularen von beiden aus zugreifen? ich habs mit formularname.objekt probiert aber das klappt net. was habe ich falsch gemacht, bzw wo muss man was wie definieren damit der zugriff möglich ist und wie erzeugt man im laufenden programm per event ein neues formular, bzw. macht es sichtbar?

thx im vorraus 4 ya helP
eLem3ntx + Floh
Marc
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Neues Forumular? + wie öffnen?

  Alt 1. Sep 2006, 12:14
Hallo,

prüfe zunächst folgende Punkte:
1. Sind die Formulare mit globalen Variablennamen versehen?
2. Sind die 'Objekte', auf die Du zugreifen willst, als private oder public deklariert? Bei private oder protected ist kein Zugriff möglich, bei public immer.
3. Wird das zweite Formular durch das Projekt erzeugt (siehe Quelltext der Projektdatei oder Projektoptionen kontrollieren)?

Für eine Alternative hängt es davon ab, ob das zweite Formular mit Show oder mit ShowModal angezeigt werden soll. Für Show kommt in Frage:
Delphi-Quellcode:
procedure TWinForm1.Button1_Click(sender: Object; e: EventArgs);
begin
  WinForm2.Show;
end;
Für ShowModal kommt in Frage, das zweite Formular nicht automatisch zu erzeugen (in den Projektoptionen aus der entsprechenden Liste entfernen), sondern manuell:
Delphi-Quellcode:
procedure WinForm1.Button1_Click(sender: Object; e: EventArgs);
var frm: TWinForm2;
begin
  frm := TWinForm2.Create(self);
  try
    // übergib irgendwelche Daten an frm
    if frm.ShowModal = System.Windows.Forms.DialogResult.OK
    then begin
      // tue irgendetwas, z.B. hole Angaben zurück
    end;
  finally
    // hier bin ich mir noch nicht klar, ob der Garbage Collector solch eine Anweisung
    // überhaupt benötigt oder nützt oder ob es NET eher durcheinander bringt
    frm.Free;
  end;
end;
Darüberhinaus müssen die Formulare sich unter NET nicht unbedingt gegenseitig kennen. Der Datenaustausch kann auch bzw. sollte über Ereignisse stattfinden. Ich glaube aber, das führt jetzt noch zu weit.

Gruß Jürgen

PS. 1. Die Verfahren von Delphi.NET und C# unterscheiden sich etwas; deshalb kann ich genaue sofortige Lösung, sondern nur Tipps zur Fehlersuche angeben.
2. Ich schreibe zz. fast ausschließlich C#; bitte nicht sauer sein, wenn meine Code-Schnipsel nicht exakt stimmen.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von eLem3ntx
eLem3ntx

Registriert seit: 31. Aug 2006
Ort: Remshalden
22 Beiträge
 
#3

Re: Neues Forumular? + wie öffnen?

  Alt 1. Sep 2006, 13:42
Heyho Jürgen Thomas, danke für deine Antwort hat gut funktioniert jedoch wenn ich die erste Form schließen lasse (Form1.Close) dann wird die zweite Form auch geschlossen. Wie kann man dass umgehen?
Marc
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Neues Forumular? + wie öffnen?

  Alt 1. Sep 2006, 16:18
Zitat von eLem3ntx:
Heyho Jürgen Thomas, danke für deine Antwort hat gut funktioniert jedoch wenn ich die erste Form schließen lasse (Form1.Close) dann wird die zweite Form auch geschlossen. Wie kann man dass umgehen?
Faktisch überhaupt nicht (genauer: mit Klimmzügen, mit denen man in der Projektdatei selbst steuert, welches Formular wann geöffnet und geschlossen wird): Das erste Formular in den Projektoptionen ist das Hauptformular der Anwendung; wenn dieses geschlossen wird, wird auch die Anwendung beendet (und folglich alle weiteren Formulare ebenfalls).

Wenn das elementare Versuche Deinerseits sind, solltest Du das zurückstellen. Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
debjörn

Registriert seit: 2. Sep 2006
9 Beiträge
 
#5

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 18:01
versuchs mal mit:
form1.visible:=false;
oder
form1.destroy;

hab ich eben selbst erst hier im forum gefunden, da ich das selbe problem hatte
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 18:11
Ich würde die Form nicht gleich destroyen, und wenn dann schon mit Delphi-Referenz durchsuchenFree.

Und ansonsten gibts da die Methode Delphi-Referenz durchsuchenHide dafür.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 18:22
Formulare werden nicht mit Delphi-Referenz durchsuchenFree freigegeben, dafür nimmt man Delphi-Referenz durchsuchenRelease.


Beschreibung
Mit Release können Sie das Formular aus dem Speicher entfernen.

Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. Die Methode stellt auch sicher, dass alle Botschaften in der Ereigniswarteschlange des Formulars vor dessen Freigabe bearbeitet werden. Jede Ereignisbehandlungsroutine für das Formular oder für dessen untergeordnete Objekte sollte Release anstelle von Free (Delphi) oder Delete (C++) benutzen. Ansonsten kann ein Speicherzugriffsfehler auftreten.

Hinweis: Release gibt die Steuerung sofort an die aufrufende Routine zurück und wartet nicht, bis das Formular freigegeben wird.


Gruss
Thorsten
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 18:50
Die Hinweise mit Delphi-Referenz durchsuchenTForm.Free falsch und Delphi-Referenz durchsuchenTForm.Release richtig stimmen uneingeschränkt; da war ich in meiner Aussage #2 zu schnell und hatte damit unrecht.

Es bleibt aber der weitere Hinweis:
Zitat von eLem3ntx:
wenn ich die erste Form schließen lasse (Form1.Close) dann wird die zweite Form auch geschlossen. Wie kann man dass umgehen?
Zitat von Jürgen Thomas:
Das erste Formular in den Projektoptionen ist das Hauptformular der Anwendung; wenn dieses geschlossen wird, wird auch die Anwendung beendet (und folglich alle weiteren Formulare ebenfalls).
Für das Hauptformular genügt also Close; andere Formulare, die automatisch erzeugt werden, müssen nicht manuell freigegeben werden, sondern werden automatisch aufgelöst.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 19:02
Zitat von eLem3ntx:
wenn ich die erste Form schließen lasse (Form1.Close) dann wird die zweite Form auch geschlossen. Wie kann man dass umgehen?
Wenn die Hauptform geschlossen wird, dann wird die Anwendung beendet. Da kommt man nicht drumherum. Im Ereignis FormClose kann man allerdings über Action verhindern, dass die Anwendung beendet wird. Also wenn zum Beispiel das Zweite-Formular noch sichtbar ist, dass man dann verhindert, dass das Hauptformular beendet werden kann.
Eine andere Variante ist, dass Zweite-Formular als Showmodal anzuzeigen, dann reagiert das Hauptformular erst wieder auf Benutzeraktionen, wenn das Zweite-Formular geschlossen wurde.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Neues Forumular? + wie öffnen?

  Alt 3. Sep 2006, 19:30
Wenn man showmodal nicht will, ist es wohl deutlich leichter, das Hauptformular mit Hide zu verbergen als das ganze OnClose vollzuschreiben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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