AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit 2. Formular

Ein Thema von gfjs · begonnen am 23. Jan 2006 · letzter Beitrag vom 25. Jan 2006
Antwort Antwort
Seite 3 von 3     123   
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#21

Re: Problem mit 2. Formular

  Alt 25. Jan 2006, 16:48
@ Elvis

NEIN! - Ich bin nicht eingeschnappt! Sorry, wenn der Eindruck entstanden ist. Manchmal nervt es mich selber, wenn ich mit allzu simplen Fragen ins Forum muss. Im übrigen ist es oft so, dass ich aus der Diskussion, die sich über die ursprüngliche Frage hinweg entwickelt, noch zusätzliche Informationen bekomme, die mir helfen, besser durch zu blicken. Dein Tip mit dem SDK hilft mir im Moment nicht wirklich weiter, da C# und Konsorten für mich noch echte Fremdsprachen sind. Aber irgendwie werd' ich mich schon durchbeißen.

Servus aus München

gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#22

Re: Problem mit 2. Formular

  Alt 25. Jan 2006, 21:15
Moin Thorsten,
Du hattest als Beispiel einen Dialog bentzt, richtig.
Direkt danach kam diese Frage:
Zitat:
Wenn ich ein Formular mit "Close" schließe, wird dann automatisch "Free" aufgerufen oder kann ich es dann einfach mit "Show" wieder anzeigen?
Und danach kam die Erklärung, das ein mit Show geöffnetes Fenster mit Close aufgeräumt wird. Dein Beispiel hatte den Dialog mit Free ( In D.Net ist Free ein Synonym für Dispose ) aufgeräumt.

Zitat:
Ich habe mich dann mal mit dem Show-Aufruf beschäftigt und bekam nur Probleme.
Das passt doch zu dem Thema, in das wir abgerutscht sind. Wo kneift es denn?

Oh und nun zu den Dialekten...
KhabaDings ist ein C# Fan, während ich eher ein Chrome Fan bin. Biedes sind aber .Net Sprachen und es ist in der .Net Szene durchaus üblich, Dinge, die nicht sprachbezogen in der eigenen Sprache zu erklären... (home is where...). Die Klassen und deren Verhalten sind ja absolut identisch. Es mag vllt noch hinzukommen dass anscheinend keiner von uns beiden einen D.Net compiler zur Hand hat.
Robert Giesecke
  Mit Zitat antworten Zitat
omata

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

Re: Problem mit 2. Formular

  Alt 25. Jan 2006, 22:14
So, ich glaube ich weiss jetzt warum wir immer aneinander vorbeireden und ich versuche mein Problem jetzt nochmal zu beschreiben.

In Delphi (Win32) kann man sich ja Fenster beim Start automatisch initialisieren lassen. Diese Vorgehenweise finde ich sehr schlecht (Ausnahme natürlich die Hauptform). Wenn ich andere Fenster öffnen will, erstelle ich sie mir, zeige sie mit ShowModal und gebe den Speicher dann wieder frei. Das war ja auch das Beispiel was ich auf den Anfangspost geschrieben habe.

Nun gibt es aber ja auch die Möglichkeit mit Show das Fenster anzuzeigen. Bei Delphi (Win32) bleibt das gleiche Fenster immer aktiv auch wenn es geschlossen wird und wird beim Beenden des Programms automatisch freigeben. Oder man erstellt es selber und gibt es auch wieder selber frei.
Das Entscheidene ist jetzt das man in (Win32) immer das gleiche Fenster behält, während bei NET immer ein neues Fenster erstellt wird. Das heisst mein Aufrufbeispiel...
Delphi-Quellcode:
with TWinForm1.create do
  show;
erstellt immer ein neues Fenster, wenn ich also ein zweites Fenster sehe und nochmal auf der Hauptform obiges Ereignis auslöse, dann wird noch ein zweites Fenster angelegt und sichtbar. Das ist denke ich manchmal sinnvoll, aber was ist wenn es nicht sinnvoll ist? Wenn man immer nur ein Fenster haben möchte? Wie müsste man das dann realisieren? Der Benutzer kann das zweite Fenster schliessen, ich möchte ihm aber den Inhalt wieder präsentieren, wenn er dieses zweite Fenster wieder über die Hauptform sichtbar macht.
Aber ich denke das führt schon zu weit. Bleiben wir bei der einfachen Frage: "ich möchte nur ein zusätzliches Fenster sehen", egal wie oft ich die zweite Form mit Show aufrufe.
Gut das geht zum Beispiel über eine Private-Variable, die ich ja initialisieren kann. Allerdings was ist wenn der Benutzer das Fenster schliesst? Dann wird das Fenster freigegeben und die Private-Variable zeigt nicht mehr auf ein gültiges Objekt. Wie weiss ich jetzt das ich das Fenster neu initialisieren muss?

Hoffe mein eigentliches Problem wurde jetzt etwas verständlicher. Den mit ShowDialog (ShowModal) ergeben sich diese Probleme ja nicht, mit Show allerdings schon und genau das ist meine Verständnisfrage, wie könnte man soetwas sauber lösen.

Wieder hoffnungsvolle Grüsse,
Thorsten
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#24

Re: Problem mit 2. Formular

  Alt 25. Jan 2006, 23:33
Du willst also die globale Variable des d32 Designers simulieren?
Der Trick wäre eine class property, die beim Zugriff eine Instanz anlegt und dieser AllowDisposing false über gibt.
Delphi-Quellcode:
class property Instance : Form1 read get_Instance;
property AllowDisposing : Boolean := true;
Delphi-Quellcode:
class function Form1.get_Instance: Form1;
begin
   if not assigned(fInstance) then
   begin
      fInstance := new Form1();
      fInstance.AllowDisposing := false;
   end;
   
   result := fInstance;
end;
Im FormClosing event noch das hier:
Delphi-Quellcode:
procedure Form1.Form1_FormClosing(sender: Object; e: FormClosingEventArgs);
begin
   if not AllowDisposing then
   begin
      e.Cancel := true;
      Hide();
   end;
end;
Damit ein Disosed fInstance auch wieder neu angelegt wird, müsste Dipose angepasst werden:
Delphi-Quellcode:
method Form1.Dispose(disposing: boolean);
begin
   if disposing then
   begin
      if assigned(components) then
         components.Dispose();
      if self = fInstance then
         fInstance := nil;
   end;
   inherited Dispose(disposing);
end;
Im HauptForm sowas:Form1.Instance.Show();
Das hätte auch den Vorteil, dass man weiter hin neue Instanzen von Form1 anlegen könnte, die sich beim Close zertören.

Edit, bin etwas handicapped, da ich eine andere Tastatur benutze... (Zu oft Alt + S statt Alt + D getippt )
Robert Giesecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 01:20 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