Entwickler-Ecke
Dateizugriff - Opendialog. Fehler beim beenden
Gintonik - Di 27.03.07 16:50
Titel: Opendialog. Fehler beim beenden
Hallo, ich habe in meinem Programm mehrere Opendialoge. Ich kann die Dateien öffnen und er verarbeitet die auch. Mein Problem taucht auf, wenn ich den Dialog öffne, keine Datei wähle und auf abbrechen klicke. Dann kommt eine Fehlermeldung (Out of Bounds...). Wie kann ich die unterdrücken?
THX, Marcel
Christian S. - Di 27.03.07 16:53
Hallo!
Da ich nicht glaube, dass das ein Bug im OpenDialog selber ist, werden wir wohl die Prozedur sehen müssen, in der der OpenDialog aufgerufen wird, um Dir zu helfen. Sonst kann man da wenig zu sagen.
Grüße
Christian
Calculon - Di 27.03.07 16:53
ist immer 'ne komfortable Lösung. Aber eigentlich dürfte dein Problem nicht auftreten, wenn du alles korrekt machst. Poste dochmal etwas Code.
Gruß
Calculon
--
Gintonik - Di 27.03.07 16:55
So greife ich auf meine Dateien zu...
Delphi-Quelltext
1: 2:
| if OpenDialog1.Execute then F.LoadFromFile(OpenDialog1.FileName); |
Christian S. - Di 27.03.07 16:57
Wenn der OpenDialog nicht mit "OK" beendet wird, ist F (was immer das genau ist ;-)) leer. Falls Du das nicht prüfst, kann es leicht passieren, dass Du auf einen Eintrag zugreifen willst, der gar nicht da ist.
Gintonik - Di 27.03.07 16:59
F ist ein zur LAufzeit erzeugtes Stringgrid
Hier ist der ganze Qualcode...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.LoadStringGridFromFile(StringGrid: TStringGrid); var F: TStringList; i: Integer; begin F := TStringList.Create; try if OpenDialog1.Execute then F.LoadFromFile(OpenDialog1.FileName); StringGrid.RowCount := StrToInt(F[0]); StringGrid.ColCount := StrToInt(F[1]); for i := 0 to (StringGrid.RowCount - 1) do StringGrid.Rows[i].CommaText := F[i + 2]; finally F.Free; end; end; |
JayEff - Di 27.03.07 16:59
Gintonik hat folgendes geschrieben: |
So greife ich auf meine Dateien zu...
Delphi-Quelltext 1: 2:
| if OpenDialog1.Execute then F.LoadFromFile(OpenDialog1.FileName); | |
Genau. Die Execute-Methode ist eine Funktion, deren Rückabewert ein Boolean-Wert ist. Sie gibt true zurück, wenn auf ok, und false, wenn auf Abbrechen gedrückt wurde.
Ist es garantiert, dass FileName leer ist, wenn man auf Abbrechen drückt, Christian? Ich glaube, wenn eine Datei ausgewählt ist, dann ist FileName auch im Abbrechen-Fall gleich dem Pfad der ausgewählten Datei.
Kann mich aber auch täuschen ;)
Gausi - Di 27.03.07 17:03
Da fehlen wohl begin...end ;-)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.LoadStringGridFromFile(StringGrid: TStringGrid); var F: TStringList; i: Integer; begin F := TStringList.Create; try if OpenDialog1.Execute then begin F.LoadFromFile(OpenDialog1.FileName); StringGrid.RowCount := StrToInt(F[0]); StringGrid.ColCount := StrToInt(F[1]); for i := 0 to (StringGrid.RowCount - 1) do StringGrid.Rows[i].CommaText := F[i + 2]; end; finally F.Free; end; end; |
jakobwenzel - Di 27.03.07 17:03
Da fehlt einfach nur ein Begin und ein End, damit der ganze Bereich nur ausgeführt wird, wenn der Dialog mit OK bestätigt wurde.
Gintonik - Di 27.03.07 17:08
Das isses Jungs, SUPER !!! Ich glaube ich brauche so langsam ne Brille ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!