Kein Zugriff auf TextBox1->Text
-
Jochen Kalmbach schrieb:
Dann deklariere halt das Test in der Klasse (h-Datei) und implementiere es in der cpp-Datei!!!
PS: Anfängern rate ich dringend von C++/CLI ab... da es nur verwirrend ist und oft mit "normalem" C++ durcheinander gebracht wird!
Ok,
Danke. Wenn ich es aber trotzdem lernen will, wie sollte ich dann am besten vorgehen, um C++/CLI vernünftig zu lernen? Hast du ein paar gute Tipps für mich? Irgendwie muss ich ja anfangen....Vielen Dank für die Hilfe
-
Das wichtigeste ist eigentlich erst mal, dass Du C++ kannst. Dann wäre z.B. das Trennen von h- und cpp-Datei schon bekannt gewesen
Du kannst Dich aber auch natürlich durchbeisen...
-
Jochen Kalmbach schrieb:
Das wichtigeste ist eigentlich erst mal, dass Du C++ kannst. Dann wäre z.B. das Trennen von h- und cpp-Datei schon bekannt gewesen
Du kannst Dich aber auch natürlich durchbeisen...Sorry,
Ich glaube da liegt ein Missverständnis vor. Ich konnte im C++ Builder 6 problemlos neue cpp's (inkl. .h) anlegen, andere includieren (z.B. eine Form1.h) und dann problemlos auf eine Textbox in der Form1 zugreifen durch Form1->TextBox1->Text o.ä. Seit ich mit VS2005 arbeite ist das nicht nach bekannten Vorgehensweisen möglich. Egal wieviele cpp und h ich anlege und wie ich diese includiere, mir ist der Zugriff auf die zuvor genannte Form1.h und damit auf die Textbox verweigert. Das VS2005 erkennt den Zugriff an und wirft fehler wie " Form1: nicht deklarierter Bezeichner.."Ich hoffe du verstehst wie ich das meine? Das Problem sind nicht einfache includes oder anlegen neuer Workspaces, sondern dass es scheinbar mit C++/CLI bzw Visual Studio 2005 ganz anders funktioniert als mir bisher bekannt.
-
Nein, ich verstehe nicht was Dein Problem ist...
Wo ist denn bitte in Deinem Code//function.cpp #include "stdafx.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; int Test ( void ) { MessageBox::Show(Form1->textBox1->Text); return 0; }
Ein "#include "Form1.h"" ???
Woher soll er also Form1 kennen???
Was soll hier anders Funktionieren als bisher???? Es wäre mir ein Rätsel wenn der C++Builder dies ohne ein include gekonnt hätte...Ganz abgesehen davon, dass man *nie* direkt auf Member-Variablen zugreifen sollte (und die deshalb in Windows-Forms auf private sind). Und wenn man schon C++/CLI verwendet, dann macht man dies über properties.
-
Das Problem ist, das Du Dich nicht mit den Grundlagen beschäftigt hast.
C++ != die IDE macht alles.Die Grundlagen bleiben die gleichen, unabhängig davon welchen Compiler Du einsetzt. So wird ein #include public,private etc. z.B. bei jedem C++ Compiler funktionieren.
//function.cpp #include "stdafx.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; int Test ( void ) { MessageBox::Show(Form1->textBox1->Text); return 0; }
In dieser Unit ist weder eine Definition noch eine Deklaration von Form1 vorhanden.
Abgesehen davon sollte man es vermeiden auf Member direkten zugriff zu nehmen. Wenn man das elegant lösen möchte, kann man get und set Methoden verwenden. In C++/CLI wurden hierfür speziell Properties eingeführt.
-
Jochen Kalmbach schrieb:
Nein, ich verstehe nicht was Dein Problem ist...
Wo ist denn bitte in Deinem Code//function.cpp #include "stdafx.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; int Test ( void ) { MessageBox::Show(Form1->textBox1->Text); return 0; }
Ein "#include "Form1.h"" ???
Woher soll er also Form1 kennen???
Ganz abgesehen davon, dass man *nie* direkt auf Member-Variablen zugreifen sollte (und die deshalb in Windows-Forms auf private sind). Und wenn man schon C++/CLI verwendet, dann macht man dies über properties.Ok, Verstehe was du meinst. Meine ganzen includes laufen über die "globale" Includedatei stdafx.h. Dort sind die function.h, Form1.h etc. Durch diese stdafx sind alle nötigen Dateien includiert mit #pragma once. Hätte ich vielleicht vorher dazusagen sollen.
Letztes mal werd ich dich nerven: Stichwort Eigenschaften:
Wie würdest also du diese textbox auslesen?
Vielen Dank...
-
Erst mal dafür sorgen, das deine Funktion überhaupt an eine Instanz von Form1 gelangen kann.
Danach schau mal in der Onlinehile nach Property, die sind da eigentlich gut erklärt.
-
Oh,
hab grad gesehen, dass du ja noch editiert hast und noch ein paar Antworten dazu geschrieben hast.
/*
Ok, ich verstehe aber so ungefähr auf was du hinaus willst. Trotzdem: Selbst wenn ich mit Get arbeite, wie bekomme ich Zugriff auf die Form1 (sie ist ja includiert in stdafx.h s.o). Ich muss doch so oder so über Form1->... auf die Objekte zugreifen (was ich bisher nicht geschafft habe)oder sehe ich da was falsch?*/
... hab grad noch die letzte gelesen. Danke für die Hilfe.... So wirds dann schon gehen
-
ReiHa schrieb:
Wie würdest also du diese textbox auslesen?
ref class Form1 : public Form { // ... public: property String ^MeinText { String^ get() { return this->textBox1->Text; } void set(String^ value) { this->textBox1->Text = value; } } };
-
Jochen Kalmbach schrieb:
ReiHa schrieb:
Wie würdest also du diese textbox auslesen?
ref class Form1 : public Form { // ... public: property String ^MeinText { String^ get() { return this->textBox1->Text; } void set(String^ value) { this->textBox1->Text = value; } } };
Echt Spitze!! Danke dass du dir die Mühe nochmal gemacht hast. Freut mich
So kann ich jetzt mal weiterlernen in C++/CLI!CU