![]() |
OpenDialog --> Abbrechen
Hallo!
Ich habe in meinem Programm einen OpenDialog. Das öffnen der Dateien funktioniert auch ganz gut aber wenn man auf Abbrechen klickt erhalte ich eine unschöne Fehlermeldung ala 'Cannot open file ""' Was kann man dagegen machen? Habe folgendes probiert:
Delphi-Quellcode:
:roll: Hab keine Ahnung wie man das abfangen könnte...
begin
l:= TStringList.Create; try begin OpenDialog.Execute; filename := OpenDialog.FileName; l.LoadFromFile(filename); Label1.Caption := filename; // Hier steht das Programm nach der Fehlermeldung... end except showmessage('Fehler aufgetreten! Evtl. Keine Datei ausgewählt!'); end end; Dank im Vorraus! MfG Florian :hi: |
Re: OpenDialog --> Abbrechen
Mal schnell umgeschrieben:
Delphi-Quellcode:
begin
l:= TStringList.Create; try begin if OpenDialog.Execute then begin filename := OpenDialog.FileName; l.LoadFromFile(filename); Label1.Caption := filename; // Hier steht das Programm nach der Fehlermeldung... end; end; ... finally l.Free; end end; |
Re: OpenDialog --> Abbrechen
Das dürfte auch gehen.
Delphi-Quellcode:
If Not OpenDialog.Execute Then Exit; //Wenn User nicht auf OK drückt => Exit
Try l := TStringList.Create; filename := OpenDialog.FileName; l.LoadFromFile(filename); Label1.Caption := filename; // Hier steht das Programm nach der Fehlermeldung... Except l.Free; showmessage('Fehler aufgetreten!'); End; |
Re: OpenDialog --> Abbrechen
mal mit
if filename <> '' then ..... versucht |
Re: OpenDialog --> Abbrechen
:wall:
|
Re: OpenDialog --> Abbrechen
Zitat:
|
Re: OpenDialog --> Abbrechen
@Tpercon
Der kam genau hier "l.LoadFromFile(filename);" - LoadFromGarNix funktioniert nicht so gut. :zwinker: |
Re: OpenDialog --> Abbrechen
Hab da von George genommen und es klappt prima! DANKE! :thumb:
MfG Florian :hi: |
Re: OpenDialog --> Abbrechen
wieso fehler
tritt denn ein fehler auf wenn ich auf ein Abbrechen Button drücke ich denke doch nein wenn einer bei mir im programm beim open dialog auf den button drückt passiert nix - nur ABBRECHEN - das bedeutet doch führe keine aktion durch oder sorry doch lieber nicht also auch kein Fehler |
Re: OpenDialog --> Abbrechen
Genau filename ist leer / kein korrekter Pfad. Und warum? Da der OpenDialog mit Abbrechen beendet wurde ist diese Anweisung
Delphi-Quellcode:
schon unsinnig. Daher würde ich auf das erfolgreiche execute abfragen!
filename := OpenDialog.FileName;
|
Re: OpenDialog --> Abbrechen
ahhh
jetzt versteh ich ich bin nur durcheinander gekommen wegen 'Fehler' ja mit try/Except geht es auch ich fand es nur besser abzufragen ob filename leer ist |
Re: OpenDialog --> Abbrechen
@HomerGER
Ich bevorzuge Try/Except Blöcke, da sie in ihrer Handhabung dem Exception-Handler in Oracle ziemlich ähneln. Also entweder mache das wenn irgendein Fehler passsiert oder mach das bei dem Fehler, das bei dem, ... [OffTopic] Ich weiß nicht genau, wie es sich in Delphi verhält, aber in Oracle ist der schnellste Weg durch den Code zu springen, eine Exception auszulösen und weiter unten den Handler zu schreiben. Das ShowMessage 'BlaBla' habe ich nur mit kopiert. @Flomei nutze für Fehlermeldungen lieber MessageDlg('BlaBla', mtError, [mbOK], 0 {oder HelpContext falls in Helpfile definiert} ) das sieht einfach nicht so harmlos aus, wie 'ne simple MessageBox :zwinker: Die meisten User klicken sowas zu schnell weg (ich überlege mir schon bei uns in der Firma die Stühle mit dem Programm zu verbinden und bei Zeitraum (Dlg - Klick) < 0,5 sec einen Stromschlag auszulösen :twisted: Solche User machen den Programmierer für allen Bulls*** verantwortlich :( ) [/OffTopic] |
Re: OpenDialog --> Abbrechen
hmmm
intressantes Argument ich setze sie nur ein wenn ein Fehler zu erwarten ist denn ich nicht erwarten kann :gruebel: zb ich greife auf eine dll zu, was mach ich wenn sie weg ist ? dann halt. von deinen standpunkt hab ich es noch nicht betrachtet |
Re: OpenDialog --> Abbrechen
@GeorgeWNewbie: Das ist aber auch nicht dein Ernst oder?
Delphi-Quellcode:
Kuck mal ins Ausgabe Fensters deines Kompilers. Nur so viel, wWrnungen sollte man ernst nehmen. Borland hat sich schon was dabei gedacht, selbige zu generieren und dem Programmierer anzuzeigen. Und wieder: Tritt keine Exception auf, wird das Objekt nicht freigegeben. :warn:
Try
l := TStringList.Create; filename := OpenDialog.FileName; l.LoadFromFile(filename); Label1.Caption := filename; // Hier steht das Programm nach der Fehlermeldung... Except l.Free; showmessage('Fehler aufgetreten!'); End; Wieder muss es richtig heißen:
Delphi-Quellcode:
Sollte man auch nicht vorhandene Dateinamen im OpenDialog zu lassen, kann man das ganze auch so erweitern:
var
sl: Tsringlist; begin if OpenDialog1.Execute then begin sl := TStringlist.Create; try sl.LoadFromFile(OpenDialog1.Filename); // tu was finally FreeAndNil(sl); end; end;
Delphi-Quellcode:
Exceptionen sollten da benutzt werden, wo sie Sinn machen, wenn es um Zustände geht die man eventuellnicht beeinflussen kann. Hier kann ich aber mittels einer simplen if-Abfrage sicherstellen, dass nichts passiert. Jeder try-except/finally-Block kostet Unmengen an CPU Taktzyklen und erfordert erheblichen organisatorische Aufwand was den Stack und die Register angeht.
var
sl: Tsringlist; begin sFile := ''; if OpenDialog1.Execute then begin if OpenDialog1.Filename <> '' then begin sl := TStringlist.Create; try sl.LoadFromFile(OpenDialog1.Filename); // tu was finally FreeAndNil(sl); end; end; end; |
Re: OpenDialog --> Abbrechen
Sorry Lucky, Ich hätte nicht gedacht, dass das in Delphi so abläuft (ist schon unpraktisch sich den Speicher mit allerhand Objekten zuzustopfen):oops:
Man kann halt nicht alle Gewohnheiten von einer DB-Sprache, wie PL/SQL auf native Sprachen z.B.: Delphi übernehmen. Trotzdem danke werde ich in Zukunft dran denken. :thuimb: |
Re: OpenDialog --> Abbrechen
Zitat:
Zitat:
Zitat:
Nachtrag: Warum man mit try-except-Blöcken sparsam sein sollte ist auch der, dass der Compiler für diese Ausnahmebehandlung teilweise jede Menge zusätzlichen Code generieren muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz