Zum Inhalt springen

Übergabe Objekte in ein Formular


coast

Empfohlene Beiträge

Eine guten Tag miteinander,

ich programmiere seit ca. 2 Jahre hauptsächlich Konsolenanwendungen. Um nun eine benutzerfreundliche Oberfläche zu erschaffen beschäftige ich mich mit GUI. Dazu habe ich eine kurze Frage:

Ich habe ein Formular mit Inhalt bzw. der Benutzer kenn etwas eingeben, und mit einem klick kommt man eine Seite weiter. Ich habe es folgendermaßen realisiert: Mit dem klick wird Formular 1 versteckt (hide()), und Formular 2 aufgerufen (show()). Nun brauche ich die Benutzereingabe aber auf Formular 2 ebenso. Die Eingabe wurden über ein Objekt gespeichert, das logischerweise im ersten Formular erstellt wurde.

Nun ist meine Frage: Kann man das Objekt von Formular 1 in das zweite Formular "übergeben"?

Falls nicht: gäbe es eine andere Lösung getätigte Einträge von verschiedenen Formularen jeweils zu übergeben?

Und falls auch das nicht geht: Gibt es eine andere Möglichkeit, den Inhalt eines Formular zu ändern, so dass man auf einem einzigen Formular bleiben kann?

Nur vorab: das ganze soll ohne Tabs (TabbedNotebook bei BB) realisiert werden!

Vielen Dank für eure Unterstützung!

IDE: Borland Builder 5

OS: Windows Vista bzw. Windows XP

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin gerade auf eine simple, aber doch eigentlich effektive Lösung gekommen ohne die Nutzung von mehreren Frames auzukommen. Korrigiert mich bitte wenn meine Lösung falsch, schlecht oder unelegant ist.

Ich setze die Inhalt auf ein Panel ohne Hervorherbung (BevelOuter = bvNone) mit der gleiche Farbe wie der Hintergrund, und kann diesen somit individuell zeigen oder verstecken (show(), hide()).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun ist meine Frage: Kann man das Objekt von Formular 1 in das zweite Formular "übergeben"?

Natürlich kann man das, aber Du solltest Dir einmal Deine Datenstrukturen überlegen

IDE: Borland Builder 5

OS: Windows Vista bzw. Windows XP

Was soll das helfen? C++ ist zunächst einmal plattform-unabhängige Sprache. Diese Information ist völlig überflüssig. Außerdem möchte ich noch anmerken, dass man durchaus identischen Code unter verschiedenen OS kompilieren kann und sich damit auch Fenster realisieren lassen

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll das helfen? C++ ist zunächst einmal plattform-unabhängige Sprache. Diese Information ist völlig überflüssig. Außerdem möchte ich noch anmerken, dass man durchaus identischen Code unter verschiedenen OS kompilieren kann und sich damit auch Fenster realisieren lassen

Phil

Dann verweise ich auf die immer wieder rummosernten User die sich den Text nichtmal durchlesen ohne die Information der IDE und des Betriebssystems, sondern sich gleich beschweren. Zudem kompiliert der BB standartmäßig nur unter Windows bzw. hat nur einen Windows-Compiler. Deshalb könnte die Information über den BB vielleicht doch nicht so unnütz sein wie du es darstellst?

Deine Auskunft hat mit im übrigen auch nicht weiter geholfen - deshalb, ich zitiere: "Diese Information ist völlig überflüssig"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zudem kompiliert der BB standartmäßig nur unter Windows bzw. hat nur einen Windows-Compiler. Deshalb könnte die Information über den BB vielleicht doch nicht so unnütz sein wie du es darstellst?

Das tut analog Visual Studio auch und doch ist mein C++ Code so geschrieben, dass er sich auch mit einem GCC / G++ unter Linux und FreeBSD kompilieren lässt. Deine Aussage ist schlicht und ergreifend unvollständig und auch falsch, denn ich kann sehr wohl mit einem Compiler unter Windows mit Qt C++ Code entwickeln und auch kompilieren, der auf mehreren Systemen lauffähig ist und eine GUI erzeugen kann

siehe Qt (Bibliothek) ? Wikipedia bzw C++ ? Wikipedia

Deine Auskunft hat mit im übrigen auch nicht weiter geholfen - deshalb, ich zitiere: "Diese Information ist völlig überflüssig"

Du hast Die Frage gestellt, ob Du ein Objekt an ein From(-Objekt) übergeben kannst und die Antwort lautet, dass es geht. Denn letztendlich ist es ein Methodenaufruf bzw Konstruktoraufruf.

Vielleicht solltest Du zunächst einmal überlegen, welche Informationen notwendig sind, damit man Dir überhaupt helfen kann. Ich gehe davon aus, dass Du, wenn Du unter C++ entwickelst die Grundlagen der OOP beherrschst und diese auch anwenden kannst.

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

Hi COM,

also, erstmal: nüllt doch nicht immer gleich so rum. Tragt was Konstuktives bei und nicht immer die Standardspüche.

Warum sollte folgende Information abwägig sein:

IDE: Borland Builder 5

OS: Windows Vista bzw. Windows XP

???

Schonmal nachgeschaut in welchem Foren-Abteil wir uns hier befinden.

Nicht jeder programmiert mit Qt und Co. Nicht jeder programmiert mit der gleichen IDE, nicht jede IDE ist vollständig ISO-konform. Die Info ist also sehr wohl berechtigt.

Und C++Builder bringt von Natur aus ein sehr umfangreiches GUI-Toolkit mit. Warum sollte man also zu plattformunabhängigen Toolkits a´la Qt zurückgreifen, wenn man doch eh nur für Windows coded? Für die älteren C++Builder-Versionen gibt es übrigens keine aktuelle Qt-Anbindung.

So viel gelabert, nichts beigetragen: hier mal was Konstuktives:

Durch ewiges probieren und suchen im i-net bin ich auf folgende zwei Varianten gestoßen:

1.)

Seine Opbjekte (Variablen, etc.) mit in die "UnitX.h"-Datei aufnehmen (entweder in die Class oder unterhalb (müsst mal probieren).

Dann sind die Variablen von Form1 auch für Form2 sichtbar und erreichbar.

2.)

Da es mich allerdings immer gestört hat in die vom C++Builder generierten und verwalteten Dateien einzugreifen suchte ich nach einer weiteren Lösung:

a.) legt eine Header-Datei an.

In dieser deklariert Ihr eure Objekte (z.B. Variablen) und zwar extern:

Snytax: "extern Datentyp Objektname;"

b.) Implementiert (Inhalt zuweisen) die extern-deklarierte(n) Objekt(e) in Euren CPP-Dateien Eurer Wahl, aber nur eine Implementation, nicht mehrfach, sonst meckert der Compiler.

c.) Nun lässt sich das/die extern-deklarierte(s) Objekt/Variable von überall aus ansprechen.

Ich hatte zwar noch nicht viel mit "extern" zu tun. Allerdings, so habe ich mal gelesen, ist ein Objekt, z.B. eine Variable, welche man in einer CPP-Datei deklariert/implementiert, auch nur in dieser zur Laufzeit sichtbar. Durch das Schlüsselwort "extern" hingegen scheinen solche deklarierten Objekte / Variablen Super-Global zu werden, sodass diese von jeder CPP-Datei angesprochen werden kann / für jede sichtbar ist.

So kann ich mir meine eigenen C++Builder-unabhängigen Konstuktionen kreieren, da die vom C++Builder verwalteten Dateien unberührt bleiben.

Kann sein, dass das jetzt vielleicht etwas blöd ausgedrückt war, aber so will ich es mal Laien nahelegen, denn so funktionierts, habs selber getestet und praktiziere es auch selber, mit Erfolg. Wer nähere Infos zu "extern" und OOP haben möchte kann dies gerne noch in Erfahrung bringen, Quellen gibts ja zum Thema, wie Sand am Meer.

Gruß

DITTY :):):)

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.)

Seine Opbjekte (Variablen, etc.) mit in die "UnitX.h"-Datei aufnehmen (entweder in die Class oder unterhalb (müsst mal probieren).

Dann sind die Variablen von Form1 auch für Form2 sichtbar und erreichbar.

Hinter der Entscheidung, ob man eine Variable in eine Klasse steckt oder nicht, und wenn ja, in welche, sollte eine Designüberlegung stehen, nicht Ausprobieren.

Globale Variablen (Definition außerhalb der Klasse) sollten jedenfalls zu Linkerfehlern führen. Man definiert keine Variablen oder Funktionen (außer inline und Templates) in Headerdateien. Außerdem sind globale Variablen grundsätzlich nicht schön, weil keine Möglichkeit der Zugriffskontrolle besteht.

Implementiert (Inhalt zuweisen) die extern-deklarierte(n) Objekt(e) in Euren CPP-Dateien Eurer Wahl,
Eine Definition, ggf. mit Initialisierung, wird benötigt.

aber nur eine Implementation, nicht mehrfach, sonst meckert der Compiler.
Dem Compiler ist das völlig egal, weil der jede Übersetzungseinheit für sich allein betrachtet. Der Linker beschwert sich, weil er mehrere Definitionen der Variablen findet.

Ich hatte zwar noch nicht viel mit "extern" zu tun. Allerdings, so habe ich mal gelesen, ist ein Objekt, z.B. eine Variable, welche man in einer CPP-Datei deklariert/implementiert, auch nur in dieser zur Laufzeit sichtbar.

Zur Laufzeit ist das alles bereits erledigt. Globale Variablen haben immer automatisch externe Verlinkung. Das ändert nichts daran, dass eine Deklaration vorhanden sein muss, wenn man aus einer anderen Übersetzungseinheit darauf zugreifen will.

Durch das Schlüsselwort "extern" hingegen scheinen solche deklarierten Objekte / Variablen Super-Global zu werden, sodass diese von jeder CPP-Datei angesprochen werden kann / für jede sichtbar ist.
Das Schlüsselwort extern erzeugt die oben beschriebene Deklaration, nichts weiter. "Super-Global" gibt's nicht.

Kann sein, dass das jetzt vielleicht etwas blöd ausgedrückt war, aber so will ich es mal Laien nahelegen, denn so funktionierts, habs selber getestet und praktiziere es auch selber, mit Erfolg.

Ganz ehrlich, man sieht deiner Erklärung an, dass da kein solides Grundwissen dahintersteckt, und du dir das selbst zusammengebastelt hast.

Deine Hilfsbereitschaft in allen Ehren, aber wenn du Halbwissen über fragwürdige Implementierungstechniken mit falsch verwendeten Begriffen und falschen Erklärungen an Anfänger weitergibst, finde ich das nicht so gut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Monate später...

Hi erst mal,

Ich hatte zwar noch nicht viel mit "extern" zu tun.

Ich sagte doch, über die genaue Vorgehensweise von "extern" weiß ich nicht viel, aber auch ich Stand Anfangs, genau wie coast vor dem Problem, dass ich es einfach nicht hinbekommen habe, mit mehreren Fenstern auf eine Variable zuzugreifen.

Also hab ich mal ein bisl gegoogled und gebingd.

Beim Stöbern durch zahlreiche Tutorials bin ich hierauf gestoßen:

C-Programmierung: Eigene Header ? Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher

Variablen allgemein verfügbar machen stellt ein besonderes Problem dar, das besonders für Anfänger schwer verständlich ist. Grundsätzlich sollte man den Variablen in Header-Dateien das Schlüsselwort extern voranstellen. Damit weiss der Compiler, dass die Variablen myheaderVar1 und myheaderVar2 existieren, diese jedoch an anderer Stelle definiert sind. Würde eine Variable in einer Header-Datei definiert werden, würde für jede C-Datei, die die Header-Datei einbindet, eine eigene Variable mit eigenem Speicher erstellt. Jede C-Datei hat also ein eigenes Exemplar, ohne dass sich deren Bearbeitung auf die Variablen, die die anderen C-Dateien kennen, auswirkt.

Wenn ich mal gerade kein OOP mache, mach ichs mit extern:

Bsp.:

Header-Datei (welche einfach in jede (Formular)-Unit / Cpp-Datei eingebunden wird) - SuperGlobVar.h:

extern int Variable;
und die Implementierung nehme ich dann einmal in irgendeiner CPP-Datei vor, meistens gleichlautend, wie die Header-Datei - SuperGlobVar.cpp:
#include "SuperGlobVar.h"


int Variable = 0;

Anschließend nurnoch die Header-Datei in jede Unit / .cpp-Datei includen, welche auf ein-und-dasselbe Exemplar Zugriff haben sollen.

Damit funktioniert es immer. Jetzt sehen alle anderen Formulare diese Datei und nicht ihr eigenes Exemplar.

Wie gesagt, für den einen oder anderen Profi vielleicht nicht zufriedenstellend, aber für Anfänger alle male geeignet und vorübergehend eine Lösung.

Achja, nochwas. Meine Variablen meiner eigenen Klassen (class) und Stukturen (struct) deklariere ich ebenfalls als "extern", sonst kommt bei mir das gleiche Problem, dass mehrere Units (.cpp) ihr eigenes Exemplar haben und ich somit nicht .cpp-Übergreifend die in der Class enthaltenen Objekte (z.B. Variablen) verändern kann. Wenn dafür noch jemand eine Lösung hätte, wär ich sehr dankbar.

Gruß

DITTY :):):):)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Beim Stöbern durch zahlreiche Tutorials bin ich hierauf gestoßen:

C-Programmierung: Eigene Header ? Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher

Fällt dir was auf? Das ist für C. Da geht's leider oftmals nicht anders.

Achja, nochwas. Meine Variablen meiner eigenen Klassen (class) und Stukturen (struct) deklariere ich ebenfalls als "extern", sonst kommt bei mir das gleiche Problem, dass mehrere Units (.cpp) ihr eigenes Exemplar haben und ich somit nicht .cpp-Übergreifend die in der Class enthaltenen Objekte (z.B. Variablen) verändern kann. Wenn dafür noch jemand eine Lösung hätte, wär ich sehr dankbar.

Die Lösung dafür ist dieselbe: Lass das mit den globalen Variablen, und mach dir ernsthafte Gedanken über eine saubere Modellierung der Beziehungen, Besitzverhältnisse und Lebensdauer deiner Objekte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...