Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit TForm.Close (https://www.delphipraxis.net/91812-problem-mit-tform-close.html)

fwsp 10. Mai 2007 11:02


Problem mit TForm.Close
 
Hallo,

ich hab ein kleines Problem:
ich habe ein Form, die anzeigen lasse. Im OnShow wird folgender Code ausgeführt. Bei Erfolg soll sich die Form Selbst schließen. Jedoch Passiert das nicht. Im Debugger kann ich sehen, das GoodSyntax True ist, er geht in in den If-Teil. Bearbeitet wohl auch das Close. Aber es schließt sich nicht.

Kann mir jmd helfen?

Delphi-Quellcode:
procedure TfrmCheck.FormShow(Sender: TObject);
var
  i: Integer;
begin
  BtnOK.Enabled := False;
  ProgBar.Max := frmMain.memEdit.Lines.Count;
  frmMain.GoodSyntax := True;
  ProgBar.Position := 1;
  memError.Clear;

  for i := 0 to frmMain.memEdit.Lines.Count - 1 do
  begin
    if not frmMain.RegisterMaschine.CheckSyntax(i) then
    begin
      frmMain.GoodSyntax := False;
      memError.Lines.Add('Fehler in Zeile: ' + IntToStr(i + 1));
    end;
    ProgBar.Position := i + 1;
    Application.ProcessMessages;
  end;

  BtnOK.Enabled := True;
  if frmMain.GoodSyntax then // GoodSyntax ist True
  begin
    Close; //Wird nicht ausgeführt
  end;
end;

messie 10. Mai 2007 11:11

Re: Problem mit TForm.Close
 
In der OnShow-Routine kannst Du das Fenster nicht schließen, weil es erst danach angezeigt wird. Leider gibt es kein OnShowQuery-event, bei dem man sich entscheiden kann, ob das Fenster wirklich angezeigt werden soll.

Grüße, Messie

fwsp 10. Mai 2007 11:13

Re: Problem mit TForm.Close
 
ich hab keinen ansatz, wie ich das ander machen kann, hast nen tipp für mich?

//Edit1
ist es elegant das mit nem timer und ner boolschen variable zu lösen?

Khabarakh 10. Mai 2007 11:22

Re: Problem mit TForm.Close
 
Am Saubersten fände ich eine Methode TfrmCheck.TryShow: Boolean, die du statt Show aufrufst und die dann bei CheckSyntax = false überhaupt erst gar nicht Show aufruft - ein Fenster, das niemals geöffnet wird, muss auch nicht durch merkwürdige Methoden geschlossen sein. Wirklich sauber ist das Ganze aber nicht, denn schon die Abhängigkeiten deiner zwei Forms untereinander finde ich nicht wirklich sauber.

TBx 10. Mai 2007 11:22

Re: Problem mit TForm.Close
 
Zitat:

Zitat von fwsp
ich hab keinen ansatz, wie ich das ander machen kann, hast nen tipp für mich?

Ja, ich denke, dass Deine Abprüfung an der falschen Stelle sitzt.
Wenn ich Deinen Code richtig interpretiere, überprüfst Du in Deinem Eventhandler, ob die Angaben in frmmain korrekt sind. Sind diese nicht korrekt, dann soll das Fenster sichtbar sein.
Diese Prüfung gehört nicht in dieses Formular, sondern in das frmmain. Ich gehe davon aus, daß Du von dort aus das Show von frmCheck aufrufst. Ich würde so vorgehen:
  • Instanz von TfrmCheck generieren
  • eigentlichen Check durchführen und ggf. die erzeugte Instanz füllen
  • wenn Fehler vorliegen, die Instanz anzeigen (mache ich meist modal)
  • dafür sorgen, dass die erzeugte Instanz auch wieder freigegeben wird
und das alles im frmMain

Hope it helps a little bit

onlinekater

fwsp 10. Mai 2007 15:10

Re: Problem mit TForm.Close
 
danke. die idee von onlinekater hört sich ganz gut an. die werd ich umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 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