Autor Beitrag
delphistart
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Mo 04.12.06 15:33 
Ich habe eine Unit (Unit 1) Auf dem Form-Feld befinden sich mehrere Buttons, die andere Units mit eingabeformularen aufrufen.

Folgendes Problem tritt auf:
Wenn ich ein Formular über den Button in U1 aufrufe, wieder schließe und dann erneut öffne, tritt beim 2. Schließen Folgender Fehler auf:
Im Projekt Projekt1.exe ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler 103' aufgetreten.

In einem anderen Thread wurde mir bereits geantwortet:
Wahrscheinlich liegt es hier daran, dass du das Formular beim ersten schließen freigibst und anschließend beim zweiten Aufruf nicht mehr erzeugst (bzw. auf das nicht mehr existente Formular zugreifen willst).

Ich verstehe nur leideer noch nicht, warum der Fehler dann erst beim schließen auftritt und nicht schon beim öffnen. Ich weis auch nicht wie es die Unit neu erzeugen kann. Wäre mir ohnehin lieber, wenn die Unit/das Formular erst geöffnet werden würde, wenn der Button auch gekickt wird.

Gruß Jonas
DANKE VORAB FÜR EURE ANTWORTEN
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TWillkommen = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Willkommen: TWillkommen;

implementation

uses Unit1,Unit3,Unit4,Unit5;

{$R *.dfm}

procedure TWillkommen.Button1Click(Sender: TObject);
begin
  neuer_artikel.show;
end;

procedure TWillkommen.Button5Click(Sender: TObject);
begin
  modulliste.show;
end;

procedure TWillkommen.Button3Click(Sender: TObject);
begin
  haendlerliste.show;
end;

procedure TWillkommen.Button6Click(Sender: TObject);
begin
  eanziffern.show;
end;

end.


Moderiert von user profile iconjasocul: Source aus dem anderen Thread kopiert.
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mo 04.12.06 15:39 
Wie rufst Du denn das 2.Formular auf?
Wir sind hier keine Hellseher und die Glaskugel sind in der GR!

EDIT: ich würde es so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  F2: TForm2;
begin
  Application.CreateForm (TForm2,F2);
  F2.ShowModal;
  // Variablen setzen
  F2.Free;
end;

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!


Zuletzt bearbeitet von Kroko am Mo 04.12.06 15:54, insgesamt 1-mal bearbeitet
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Mo 04.12.06 15:39 
Servus noch einmal,

also... du kannst in den Projektoptionen einstellen, welche Formulare automatisch erzeugt werden sollen und welche nicht. Da solltest du nur dein Hauptformular automatisch erzeugen lassen.

Die übrigen Formulare erzeugst du zur Laufzeit beim jeweiligen ButtonClick

z.B.:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  if not Assigned(TForm2) do
    Application.CreateForm(TForm2, Form2);
  
  try
    Form2.ShowModal;
  finally
    FreeAndNil(Form2);
  end;
end;
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 04.12.06 15:42 
E/A-Fehler 103 ist ein Zugriffsfehler bei Dateien.
Das dürfte mit den Formularen nur indirekt zu tun haben.
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Mo 04.12.06 23:53 
Titel: Problem gelöst
user profile iconjasocul hat folgendes geschrieben:
E/A-Fehler 103 ist ein Zugriffsfehler bei Dateien.
Das dürfte mit den Formularen nur indirekt zu tun haben.


Vielen Dank dieser Hinweis hat zur Lösung meines Problems geführt. Es war eigentlich so einfach: Ich hatte Das öffnen einer Datei uber OnCreate erzeugt, das schließen jedoch über OnClose. Somit wurde die Datei beim Programmstart geoffnet und beim schließen des Formulars geschlossen. Bein erneuten öffnen und schleißen des gleichen Formulars, wurde dann der OnCreate nicht mehr ausgefürt und die Datei blieb geschlossen. Bei OnClose war die zu schließende Datei demnach garnicht offen und so ist der Dateifehler aufgetreten.
Gelöst hab ich das ganze so: Ich habe einfach die Procedure von OnCreate in die OnShow Procedure geschrieben. So habe ich auch gleich das Problem der Aktualisierung von den Formularen, die auf den Daten anderer Formulare basieren gelöst.


user profile iconcrowley hat folgendes geschrieben:
Servus noch einmal,

also... du kannst in den Projektoptionen einstellen, welche Formulare automatisch erzeugt werden sollen und welche nicht. Da solltest du nur dein Hauptformular automatisch erzeugen lassen.

Die übrigen Formulare erzeugst du zur Laufzeit beim jeweiligen ButtonClick

z.B.:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  if not Assigned(TForm2) do
    Application.CreateForm(TForm2, Form2);
  
  try
    Form2.ShowModal;
  finally
    FreeAndNil(Form2);
  end;
end;


Auch hierfür vielen Dank!
Habe ich gleich umgesetzt! Funktioniert Prima!

Gruß Jonas