AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Form1 und Form2, vermutlich Initialisierungsfehler

Form1 und Form2, vermutlich Initialisierungsfehler

Ein Thema von Marcel2906 · begonnen am 1. Sep 2011 · letzter Beitrag vom 1. Sep 2011
Antwort Antwort
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Form1 und Form2, vermutlich Initialisierungsfehler

  Alt 1. Sep 2011, 12:02
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;
Angehängte Dateien
Dateityp: zip Busanzeige Class (ankunft + verspätung)_2fenster.zip (977,8 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Form1 und Form2, vermutlich Initialisierungsfehler

  Alt 1. Sep 2011, 12:30
Schon ein ganz kleiner Blick verrät das Problem.

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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu ( 1. Sep 2011 um 16:04 Uhr)
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Form1 und Form2, vermutlich Initialisierungsfehler

  Alt 1. Sep 2011, 13:58
vielen dank...immer diese dummen Fehler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf