Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Zugriff von Variablen auf anderes Formular

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.09.2010, 12:59 Uhr
Dominik_88



Hi zusammen

Wie kann ich bei C++ Builder 5 die Variablen von einem Formular auf die andere Formular übertragen. z.B.
Bei Unit1/Form1 habe ich folgende Variablen deklariert: int a=6; int b=8;
Und bei Unit2/Form2 folgende Variablen deklariert: int c=9; Bei Form2 habe ich Label1 eingebaut.
Nun möchte ich im Unit2/Form2 folgende Aussage überprüfen (Vergleich von 2 Variablen in verschiedenen Formulare):

if (a==c) {Form2 -> Label1 -> Caption = "wahre Aussage";}
else {Form2 -> Label1 -> Caption = "falsche Aussage";}

Das Problem ist aber, dass bei Unit2/Form2 dieses a nicht deklariert ist. Ich hätte nur gerne den Wert von a auf Unit2/Form2 übernehmen, egal ob ich bei Unit2/Form2 eine neue Variable deklariere, etwa int d=a, damit der Wert von a aus Unit1/Form1 auf Unit2/Form2 übernommen wird, aber dann bleibt das Problem, da a nicht deklariert ist.

Hat jemand von euch eine Idee? Vielen Dank im Voraus

Lg Dominik
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2010, 22:15 Uhr
Hans
Library Walker
(Operator)


Hi,

bin mir jetzt nicht ganz sicher, aber ich denke, das ist ein Fall für den Einsatz von extern, da ja Unit1/Form1 und Unit2/Form2 in zwei verschiedenen Dateien stehen, die vom Compiler separat übersetzt werden.

Vergleiche Dein Problem mal mit diesem Beispiel, evtl. ist das die Lösung.

C++:
// Datei_1.cpp

#include <iostream>

using namespace std;

extern int a, b;

void f1();
void f2();

int main()
{
  f1();
  f2();
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
  return 0;
}




C++:
// Datei_2.cpp

int a, b;

void f1()
{
  a=5;
}

void f2()
{
  b=8;
}



Das ergibt:

Code:
E:\Watcom>externtest
a = 5
b = 8

E:\Watcom>



Zu beachten ist bei dem Beispiel, das es ein Charactermode Programm ist, also in der Konsole (DOS-Fenster, Kommandozeile) läuft. Ich hab es hier externtest genannt. Und die externen Variablen müssen am Anfang, d.h. vor main definiert werden. Wie man das jetzt genau im Borland C++ Builder umsetzt, weis ich gerade nicht, aber das ist auf jeden Fall das Prinzip der verwendung von extern.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.09.2010, 09:06 Uhr
ao

(Operator)


Formulare sind Objekte. Das heißt, für die Interaktion zweier Formular-Instanzen gilt dasselbe wie für die Interaktion von beliebigen Objekt-Instanzen:

Damit Form2 auf Membervariablen von Form1 zugreifen kann, müssen Instanzen beider Forms gleichzeitig existieren. Die Instanzen müssen Referenzen aufeinander austauschen - zumindest in eine Richtung, damit Form2 Form1 auslesen kann.

Außerdem muss das Member Form1::a öffentlich zugänglich sein, entweder direkt (was unschön ist) oder über eine Get-Methode.

Denk nochmal über das Klassendesign nach. Wenn du hier Fehler machst oder schlampig arbeitest, wirst du es wahrscheinlich irgendwann bereuen. Konkret schaffst du hier eine Abhängigkeit zwischen den Forms, d.h. Form2 kann ohne Form1 nicht existieren. Das schränkt die Wiederverwendbarkeit von Form2 stark ein. Außerdem stellst du Anforderungen an Form1 (a muss sichtbar sein) - mit drei oder vier solcher Anforderungen versaut man sich schnell das Klassen-API.

Ist das wirklich richtig so, Form2 fragt Form1::a ab? Oder ist a eher eine Basis-Eigenschaft beider Klassen oder ein Initialisierungswert, mit dem beide Klassen gefüttert werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.09.2010, 18:38 Uhr
Hans
Library Walker
(Operator)


Ups! - da lag ich mit meiner Vermutung aber ziemlich weit daneben...
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: