2 Forms 1 Komponente
-
hallo,
Ich habe zum üben mit VC++ 2 Forms erstellt. Auf der einen habe ich eine Combobox, auf der anderen eine textbox. Wie geht es, dass wenn ich ein item der Combobox, z.b 'A' auswähle, in der textbox auf der anderen Form ein 'A' ausgegeben wird, wenn ich dann in der Combobox 'B' auswähle in der textbox das 'B' ausgegeben wird. Und immer so weiter. Ich habe schon mal mit Delphi programmiert, und da gibt es ja sowas wie:
Form1.Komponente.Komponenteneigenschaft ...
Gibt es sowas auch in VC++, dass ich jetzt z.B schreibe:
Form1->textbox1->Text = Form2->Combobox1->SelectedItem;
Kann mir jemand helfen und sagen wie ich es machen kann wenn es so nicht geht?
danke,
ticky
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hier, dass sollte Dir helfen...
Link kill...
Gruß, Doug_HH
-
Die Lösung von Doug_HH ist die nicht ganz so .Net(te) Lösung
Man würde eher Properties benutzen.
-
hallo.
Danke für eure antworten, aber ich verstehe nicht so ganz, wie du das meinst mit demDoug_HH schrieb:
Link kill...
Gruß, Doug_HH
und wie ich...
Talla schrieb:
Man würde eher Properties benutzen.
das jetzt verwenden müsste. welche Properties meinst du denn? Von der Komponente?
Könntet ihr mir das bitte noch einmal genauer erklären?Gruß
ticky
-
Hmm, der Link ist nicht mehr da, des ist dann natürlich blöd. Im Prinzip gehts darum dass du die Werte auf die du zugreifen möchtest veröffentlichst da die Steuerelemente ja zum Glück per Default als private generiert werden vom Designer. Doug_HH hat dafür get und set methoden definiert und meine Antwort zielt jetzt darauf hinaus statt get und set Methoden wie sie in C++ und Java üblich sind, lieber .Net Properties zu benutzen. Wenn du nicht weiß was das ist gibts dafür Google und auch auf Codeprojekt gibts nen Artikel wie man Propeties in C++/CLI benutzt.
-
Hallo Ticky,
hier mal ein kleines Beispiel in Richtung Properties...
// Einsatz von Properties.cpp: Hauptprojektdatei. /*######################################################### Einsatz von Properties ##########################################################*/ #include "stdafx.h" using namespace System; //die Klasse esel ref class esel { private: Int32 sturheit; Int32 gewicht; //die öffentlichen Methoden public: void arbeiten(); void fressen(); Int32 wiegen(); void init(); //die Propertties //für den Namen ohne get() uns set() property String^ name; //für das Gewicht in Gramm nur mit get() property Int32 gewichtInGramm { //die get()-Methode Int32 get() { return gewicht * 1000; } } //für die Sturheit //dir Rümpfe der Methoden liegen außerhalb der //Klassenvereinbarung property Boolean istEselStur { Boolean get(); void set(Boolean sturWert); } }; //die get()-Methode für die Property istEselStur Boolean esel::istEselStur::get() { if (sturheit < 9) { return true; } else { return false; } } //die set()-Methode für die Property istEselStur void esel::istEselStur::set(Boolean sturWert) { if (sturWert == true) { sturheit = 20; } else { sturheit = 5; } } void esel::arbeiten() { if (sturheit > 9 || gewicht < 10) { //bitte in einer Zeile eingeben Console::WriteLine("Der Esel kann nicht arbeiten!"); } else { sturheit++; gewicht--; //bitte in einer Zeile eingeben Console::WriteLine("Der Esel hat jetzte gearbeitet."); } } void esel::fressen() { gewicht++; if (sturheit > 0) { sturheit--; } Console::WriteLine("Der Esel hat jetzt gefressen."); } Int32 esel::wiegen() { return gewicht; } void esel::init() { gewicht = 15; sturheit = 5; } int main(array<System::String ^> ^args) { //Instanz eseöchen erzeugen esel^ eselchen = gcnew esel; //Das Eselchen bekommt einen Namen über Property eselchen->name = "Bonito"; //die Methoden aufrufen eselchen->init(); eselchen->arbeiten(); eselchen->fressen(); //bitte in einer Zeile eingeben Console::WriteLine("Der Esel wiegt {0} Kilo.",eselchen->wiegen()); //Abrufen der Properties //bitte in einer Zeile eingeben Console::WriteLine("Er heißt {0} und wiegt {1} Gramm.",eselchen->name, eselchen->gewichtInGramm); if (eselchen->istEselStur) { Console::WriteLine("Der Esel ist Stur."); } else { Console::WriteLine("Er ist nicht Stur."); } //Setzen der Properties //die folgende Anweisung ist nicht möglich, da //gewichtInGramm keine set()-Methode hat //eselchen->istEselStur = true; //Abrufen der Properties if (eselchen->istEselStur) { //bitte in einer Zeile eingeben Console::WriteLine("{0} ist jetzt stur.",eselchen->name); } else { //bitte in einer Zeile eingeben Console::WriteLine("{0} ist nicht stur.",eselchen->name); } return 0; }
Nun mach ich den Link nochmal auf, da mein Speicher auf meinem Server begrenzt ist, kann ich die Datei nicht all so lange drauf lassen...
http://www.rb-softarticle.com/Aufgabe1.rar
Was spricht eigentlich gegen dieser Variante?
Das Prinzip der Datenkapslung?Gruß, Doug_HH
-
Vielen Dank für eure Antworten. Ich schau sie mir mal durch. Sieht aber schon vielversprechend aus. ^^
Gruß,ticky
-
Doug_HH schrieb:
Was spricht eigentlich gegen dieser Variante?
Das Prinzip der Datenkapslung?
Gruß, Doug_HHNein, aus Sicht der Datenkapselung sind beide Varianten(Funktionen/Properties) sicherlich gleichberechtigt - wichtig ist halt das private Felder nur über festgelegte Zugriffe veröffentlicht werden, und nicht einfach öffentlich gemacht werden so das jeder von außen beliebig drauf zugreifen kann.
Properties sind von Vorteil da sie in .Net eine besondere Rolle spielen und nicht nur einfache Zugriffsfunktionen sind.
Properties können wie Variablen angesprochen werden, sieht man ja bei dir hier:eselchen->istEselStur
Das mag in C++ vielleicht nicht ganz so doll auffallen, aber in C# sieht man dass der Code dadurch klarer und leichter verständlich wird.
Ein weiterer Punkt wäre z.B. Serialisierung: Der XML Serialisierer serialisiert per Default z.B. nur Properties, keine Felder.
Dann gibts da z.B. noch das PropertyGrid, welches nen sehr beliebtes Steuerelement ist. Das funktioniert halt nur mit Properties, da man ja noch den Properties die verschiedensten Attribute mitgeben kann, einfachen Feldern kann man das nicht.
Und was noch gerade im Windows Forms Bereich nen interessantes Thema ist, das DataBinding - auch das funktioniert wiederum nur mit Properties.Das sind nur ein paar Beispiele die zeigen sollen das Properties unter .Net halt ein besonderes Feature ist, das man auch nutzen sollte.