AGB  ·  Datenschutz  ·  Impressum  







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

ModalResult schließt zwei Fenster

Ein Thema von ahachmann · begonnen am 19. Nov 2004 · letzter Beitrag vom 19. Nov 2004
Antwort Antwort
ahachmann

Registriert seit: 15. Sep 2003
Ort: Hamburg
54 Beiträge
 
Delphi 7 Professional
 
#1

ModalResult schließt zwei Fenster

  Alt 19. Nov 2004, 13:36
Hallo,
Ich habe ein seltsames Problem zu dem ich keine Lösung finden kann.
Aus meinem Hauptfenster öffne ich ein neues mit nem Modalresult. Jedoch nicht direkt mit frmPosition.showModal, sondern die Funktion frmPosition.Execute. In dieser Funktion öffnet sich das Fenster dann selber, um nach dem schliessen noch ein wenig selber aufräumen zu können. So weit so gut. Nun habe ich aber genau den selben Schritt in diesem Fenster noch mal gemacht. D.h. ich habe ein weiteres Fenster über eine Execute funktion geöffnet. Natürlich eine eigene. Beides Methoden der jeweiligen Klassen.
Wenn ich nun das zuletzt geöffnete Fenster mit nem ModalResult := mrOK schliesse, werden beide Fenster geschlossen.

Die Äussere Execute des frmPosition sieht wie folgt aus.
Delphi-Quellcode:
function TfrmPosition.Execute(oPos: CPosition): CPosition;
  var bolValOk: Boolean;
      mrRes : integer;
begin
  oCurrentPos := oPos;
  edtDescription.Text := oCurrentPos.getText;
  edtCount.text := floattostr(oCurrentPos.getCount);
  edtPrice.Text := floattostr(oCurrentPos.getPrice);
  bolValOk := false;
  mrRes := mrOK;
  while(not bolValOk AND (mrRes = mrOk)) do
  begin
      mrRes := self.ShowModal;
{HIER SPRINGT ER DURCH DEN MODALRESULT DES INNNEREN EXECUTE RAUS :-(((((}
      if (mrRes = mrOk)then
      begin
        oCurrentPos.setText(edtDescription.text);
        oCurrentPos.setVat(vats[cmbVat.ItemIndex]);
        oCurrentPos.setPUnit(units(cmbPUnit.ItemIndex));
        try
          oCurrentPos.setCount(strtofloat(edtCount.Text));
          bolValOk := true;
        except
          showmessage('Anzahl ist keine Korrekte Zahl!');
          bolValOk := false;
        end;
        try
          oCurrentPos.setPrice(strtofloat(edtPrice.Text));
        except
          showmessage('Preis ist keine Korrekte Zahl!');
          bolValOk := false
        end;
      end
      else
      begin
        oCurrentPos.destroy;
        oCurrentPos := nil;
      end;
  end;
  Execute := oCurrentPos;
end;
Kennt das jemand und hat vielleicht ne Lösung? Er Spring erst Raus, nachdem er die Innere Execute fertig abgeschlossen hat. Aber die Äussere macht er nicht zu ende. Scheint für mich, als ob das MODALRESULT nicht korrekt gelöscht wird, und das zweite Fenster das selbe MODALRESULT bekommt.
Bin dankbar für jeden Hinweis.
MfG,
A.Hachmann
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: ModalResult schließt zwei Fenster

  Alt 19. Nov 2004, 14:12
So ganz blick ich noch nicht durch. Aber nun ja. Was mir auffällt ist das du direkt destroy aufrufst bei oCurrentPos. Benutze lieber Free.

Ansonsten sehe ich nicht wo dein zweites Execute kommt. Irgendwas fehlt mir da noch.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ModalResult schließt zwei Fenster

  Alt 19. Nov 2004, 14:25
Das Konstrukt, dass eine Form sich selbst modal aufruft (und das noch mit self), ist mir nicht geheuer.

Ein Fenster öffnet sich also selber. Modal sorgt dafür, dass beim Schließen das Result zurückgegeben wird. Zurückgegeben wohin? Das Fenster hat sich doch geschlossen. Wer weiß, was beim Schließen eines Fensters alles geschieht und inwieweit eine Funktion des Fensters dann noch in der Lage ist, irgendwelche Werte zu verarbeiten?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ModalResult schließt zwei Fenster

  Alt 19. Nov 2004, 22:24
Moin ahachmann,

da Du das zweite Fenster mit self.ShowModal öffnest, ist es kein weiteres Fenster, sondern die gleiche Instanz.
Wenn Du ein Fenster einer bestimmten Klasse mehrfach benötigst, musst Du es auch mehrfach erzeugen.
(oder Du erklärst einfach kurz, was Du eigentlich vorhast.)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 02:18 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