AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Formulare von Musterformular ableiten - nochmal
Thema durchsuchen
Ansicht
Themen-Optionen

Formulare von Musterformular ableiten - nochmal

Ein Thema von torf160 · begonnen am 14. Jan 2010 · letzter Beitrag vom 14. Jan 2010
Antwort Antwort
torf160

Registriert seit: 20. Sep 2006
Ort: Bad Oldesloe
24 Beiträge
 
Delphi 3 Professional
 
#1

Formulare von Musterformular ableiten - nochmal

  Alt 14. Jan 2010, 17:09
Hallo, da hab ich mich zu früh gefreut.
(siehe Frage von vorhin)

Die abgeleiteten Formulare funktionieren wunderbar, wenn ich aber in einem abgeleiteten Formular die Variable s ändern will, dann geht das nicht.
Wird die denn nicht mit vererbt?

Auch der Versuch, im abgeleiteten Formular eine Variable s neu zu deklarieren und in einer FormCreate-Prozedur neu zu belegen haut nicht hin.

So sieht das BasisFormular aus:

Delphi-Quellcode:
unit unit_Form2;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
   procedure FormCreate(Sender: TObject); virtual;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  s : string;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  s := edit1.Text;
  ListBox1.Items.Add(s);
  edit1.Text := '';
  edit1.SetFocus;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  ListBox1.Items.Add(s);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  s := 'mein erster Eintrag';
end;

end.
das erste Formular:

Delphi-Quellcode:
unit unit_MyForm_1;

interface

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

type
  TForm3 = class(TForm2)
    procedure FormCreate(Sender: TObject); Override;
  private
    { Private-Deklarationen }
   s : string;
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  ShowMessage('huhu'); // um zu prüfen, ob die Prozedur auch
                        // tatsächlich aufgerufen wird
  s := 'mein abgeleiteter Eintrag';
end;

end.
und das zweite Formular:

Delphi-Quellcode:
unit unit_MyForm_2;

interface

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

type
  TForm4 = class(TForm2)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

end.
Wenn ich nach dem Programmstart Button3 im zweiten Formular anklicke, wird 'mein erster Eintrag' in die ListBox eingetragen.
Versuche ich das im ersten Formular geschieht gar nichts.

Was mache ich da nicht richtig???

torf160
Thomas Hamdorf
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#2

Re: Formulare von Musterformular ableiten - nochmal

  Alt 14. Jan 2010, 17:37
hallo torf160,

Zitat:
Wenn ich nach dem Programmstart Button3 im zweiten Formular anklicke, wird 'mein erster Eintrag' in die ListBox eingetragen.
Das ist ja soweit klar, denke ich.

Zitat:
Versuche ich das im ersten Formular geschieht gar nichts.
Warum hier nichts passiert ist im Grunde ganz einfach.
Schau dir mal deine Deklaration von s an.
Im ersten Formular erzeugst du eine Variable s.
Deine ButtonClick-Methode ist jedoch eine Instanz darüber, kann dieses s aus der abgeleiteten KLasse (zumahl des sogar noch als Private deklariert wurde) also noch garnicht kennen.
Dass heißt, es nimmt statt dessen deine Globale Variable s, die du unter der Basisform deklariert hast.
Im FormCreate von TForm3 wird jedoch die eigene Variable s angesprochen.
Die Globale Variable s bleibt gänzlich unberührt, und erhält somit den String "";

Hoffe, dass konnte helfen
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:32 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