Klassen Interface
-
Sorry hab ich schon 5 mal gelesen.
Und muss immer noch sagen das es im Moment nicht anders geht.
Ich verwenden vc++ expressAlso mein Problem:
Ich möchte ein einzeles Bit (bool) von der Form1 in der Form2 übertragen.
Oder ich sagen mal eher ich möchte von der Form2 aus dieses Bit einlesen können.Ich hab schon diveres Antworten gefunden( Klassenschnittstellen usw.)
aber kriege es irgendwie nicht auf die Reihe.Bei VB ist es sehr einfach, dort kann ich einfach in ein Modul die Variable deklarieren und schon ist die Sache gegessen.
P.s. Bitte ich wieder irgendwelche Kommentare über das doof VC++ Express oder sonst etwas.
Es geht im moment einfach nicht anders.Für eure Hilf wäre ich dankbar.
-
Was genau ist das für ein bool und wieso muss es von Form1 zu Form2 übertragen werden?
-
-
Also ich habe zum Berechnen geschrieben und dieses in umschaltbar Deutsch/Englisch.
Jetzt habe ich die Umschaltung und das entsprechen Merkerbit in der Form1 untergebracht.
Was auch super funktioniert.
Nun habe ich die zweite Form als Hilfe (aufrufbar über den Menustrip) erstellt.
Die soll nun auch per Umschaltung in Englisch sein.
Nun kriege ich das Merkerbit nicht in der zweiten Form ausgelesen.
-
Hast Du schon den von mir verlinkten Post gelesen?
-
Wieso verpasst du der zweiten Form nicht einfach eine Methode, die die Sprache umschaltet und rufst diese von der ersten Form aus auf, wenn die Sprache umgestellt wird?
-
@ theta Ja habe ich aber komme damit nocht nicht wirklich zurecht.
Ja das wäre eine Möglichkeit.
Also wenn ich eine Methode erstelle, klappt es nicht daruf aus der anderen Klasse zu zugreifen.
Eher gesagt wie deklariere ich die Methode und wie kann ich drauf zu greifen.
Sorry bin noch ein Anfänger.
-
Wo genau liegt dein Problem? Du hast eben dein Form Objekt und dann rufst du die Methode drauf auf!?
-
Also ich habe in Form 1
public:
static int Form1::Test()
{int tb1 = Convert::ToInt32(textBox1->Text);
return tb1; }und in Form2 möchte ich diese Methode aufrufen mit:
int z = Form1::Test();
So mein Problem ist er sagt bei auf rufe er finden Form 1 nicht.
Was noch auftritt.
Er sagt das ich die Textbox nicht aufrufen kann weil sie nicht als static deklariert ist
-
So kann dein Problem im Grundsatz gelöst werden:
Bsp. (alles unnötige weggelassen):
Form1.h
ref class Form1 : public Form { public: // Soll von Form2 abgefragt werden können. int Test(); // Eine Test Funktion, welche die Form2 zeigt. void ShowForm2(); };
Form1.cpp
#include "Form1.h" #include "Form2.h" int Form1::Test(); { return Convert::ToInt32(textBox1->Text); } void Form1::ShowForm2() { // Hier wird an die Instanz von Form2 die Instanz von Form1 übergeben! Form2^ form2 = gcnew Form2(this); form2->Show(); }
Form2.h
#include "Form1.h" ref class Form2 : public Form { public: Form2(Form1^ form1) { InitializeComponents(); // Jetzt kannst Du innerhalb von Form2 auf öffentliche Member von Form1 zugreifen. int test = form1->Test(); // Wenn Du den Zugriff auch "später" noch benötigst, z.B. in OnButtonClick(..) musst Du form1 in einer Member Variable (hier this->form1) speichern. this->form1 = form1; } void OnButtonClick(...) { int test = this->form1->Test(); } private: Form1^ form1; };
Wegen der Gegenseitigen Abhängigkeit von Form1 und Form2 ist es zwingend nötig den Code in Sourcen und Header Files aufzusplitten (mindestens soweit wie im Bsp. gezeigt).
Natürlich können die Abhängigkeiten mit Interfaces oder andern Mechanismen reduziert werden, jedoch glaube ich, dass es fürs Verständnis nicht förderlich ist, das im Bsp. schon zu zeigen.
Ich vermute, Dir fehlt das Grundverständnis von Klassen und Objekten!
Edit:
Includes angepasst (hpp -> h)
-
Ja da magst du recht haben. Aber ich finde keine GUTE Literatur dazu.
Wenn du einen Tip hast bin offen für alles.Hm ist alles sehr komplex um nur ein Bit aus zulesen.
Gibt es nicht einfachere Wege ?
-
marccore schrieb:
Wenn du einen Tip hast bin offen für alles.
Einfach dran bleiben, weiter probieren und nicht aufgeben. Es hat viel damit zu tun wieviel man sich mit dem Thema beschäftigt (theoretisch und praktisch).
marccore schrieb:
Hm ist alles sehr komplex um nur ein Bit aus zulesen.
Tja, c'est la vie.
marccore schrieb:
Gibt es nicht einfachere Wege ?
Irgendwie nicht. Jedenfalls keine sinnvollen.
-
Gibt es nicht eine Möglichkeit eine Variable Global zu machen.
Noch eine Frage:
Warum hast du denn .hpp Datein includiert, ich habe nur .h files.
-
marccore schrieb:
Gibt es nicht eine Möglichkeit eine Variable Global zu machen.
Doch, das geht auch, fällt aber unter die "nicht sinnvollen" Lösungen.
marccore schrieb:
Noch eine Frage:
Warum hast du denn .hpp Datein includiert, ich habe nur .h files.
Macht der Gewohnheit - ist hier natürlich falsch und desshalb auch schon korrigiert.
-
Kannst mir mal ein Beispiel nennen wie man diese nicht erstrebenswerte Lösung
umsetzen können.Mir geht es erstmal nur um die Lösung meines Problems.
Auch wenn sie nicht elegant oder schön ist.
-
Die Lösung Deines Problems ist: Verwende C#
Dann hast Du dieses ganze Problem mit den includes und all dem Zeugs nicht... und global machst Du einfach durch "public static ...".http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/