Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Form1 und Form2, vermutlich Initialisierungsfehler (https://www.delphipraxis.net/162654-form1-und-form2-vermutlich-initialisierungsfehler.html)

Marcel2906 1. Sep 2011 11:02

Form1 und Form2, vermutlich Initialisierungsfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin immer noch bei meiner Bus Anzeigetafel ^^
Aber jetzt nicht mehr mit Pointern, sonder Klassen.

Nun sieht mein Programm ungefähr so aus.

Form 1 = Die Tafel
Form 2 = Eingabe der Linien
Unit 1 = Anzeige (hinzufügen, sortieren etc. im Array)
Unit 2 = Bus (Eingaben werden in Uhrzeit etc. umgewandelt)

Aber mir geht es hauptsächlich um Form 1 und 2.
Form 2 besitzt die Edit Felder zum Eintragen der Linie, Ankunft etc..
Diese Werte sollen dann an Form 1 weiter gegeben werden.
Soweit so gut, doch dies klappt leider nicht.
Bestimmt liegt es an der Initialisierung ^^
Da es zu viel wäre den kompletten Code zu schreiben, hänge ich meine Datei an und poste den Codeabschnitt zur Initialisierung.

Achja, zum Fehler...so wie es jetzt ist, wird immer nur der Anfangs-String von den Edit-Feldern an Form1 gegeben...

Delphi-Quellcode:
unit Busanzeige1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    alleLinien: TButton;
    bearbeiten: TButton;
    loeschen: TButton;
    zehnAnzeigen: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Beenden: TBitBtn;
    Hinzufuegen: TButton;
    newEntry: TButton;
    procedure newEntryClick(Sender: TObject);
    procedure BeendenClick(Sender: TObject);
    procedure alleLinienClick(Sender: TObject);
    procedure loeschenClick(Sender: TObject);
    procedure zehnAnzeigenClick(Sender: TObject);
    procedure bearbeitenClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure HinzufuegenClick(Sender: TObject);

    private
    Anzeige: TAnzeige;
    Eingabe : TForm2;
    procedure Output(LaengeListe:integer);
    end;
Var
Form1 : TForm;
Und hier möchte ich die Eingetragenen werte benutzen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);

   begin
      //Anzeige Inizialisieren
      Anzeige:= TAnzeige.Create;
      Eingabe:= TForm2.Create(Eingabe);
   end;

procedure TForm1.HinzufuegenClick(Sender: TObject);

   begin
      //Eingetragene Werte an Array anhängen
      Anzeige.Add(Eingabe.ELinie.Text,Eingabe.EZiel.Text,
      Eingabe.EAnkunft.Text,Eingabe.EAbfahrt.Text,Eingabe.EVerspaetung.Text);

      //Array nack Ankunft+Verspätung sortieren
      Anzeige.QuickSort(0,(Anzeige.outLaengeListe-1));

      //Liste mit Länge 10 ausgeben
      Output(10);

      //Edit Felder leeren
      Eingabe.ELinie.Clear;
      Eingabe.EZiel.Clear;
      Eingabe.EAnkunft.Clear;
      Eingabe.EAbfahrt.Clear;
      Eingabe.EVerspaetung.Clear;
   end;

himitsu 1. Sep 2011 11:30

AW: Form1 und Form2, vermutlich Initialisierungsfehler
 
Schon ein ganz kleiner Blick verrät das Problem. :roll:

Delphi-Quellcode:
Eingabe:= TForm2.Create(Eingabe);
...
Form2.Visible := true;
Fällt dir was auf?

Du erstellst eine Form und greifst dann auf eine ganz andere Variable zu.




Und genau deswegen sind globale Variablen schnell mal eine ganz böse Sache.


Eine Form läßt du dir von Delphi (siehe DPR / Projektoptionen) erstellen,
eine andere Form erstellst du dir selber
und dann kommst du durcheinander und graufst auf die falsche Variable zu.


PS: Den selben Fehler hatte hier shconmal jemand ... dieser ließ sich eine Form mehrfach von Delphi erstellen,
wobei die erste angezeigt wurde, da sie die Hauptform wurde und da alle die selbe "globale" Variable überschrieben, war auch nur die Letzte dort verlinkt.
Über die Variable war also eine andere Form erreichbar, als der Benutzer sah, weswegen natürlich die Benutzereingaben nie im Programm verwendet wurden.



Tipp: Wenn du Forms selber erstellst, lösche die globale Variable einfach aus der PAS raus (und natürlich nicht vorher vergessen Delphi mitzuteilen, daß es diese Form nicht automatisch, bei Programmstart, erstellen soll).

Marcel2906 1. Sep 2011 12:58

AW: Form1 und Form2, vermutlich Initialisierungsfehler
 
vielen dank...immer diese dummen Fehler :(


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