Header Einbindung Win Forms Anwendung
-
Hallo Leute!
Ich brauch mal eure Hilfe.
Ich benutze die Express Version von Visual C++ 2005.
Um mein Problem schildern zu können fang ich mal ganz von vorne mit einer
Beispielanwendung an:Ich erstelle ein Neues Projekt (Win Forms Anwendung), füge 1 Button und ein
Textfeld ein. Nun möchte ich den in Textfeld zur Laufzeit eingegebenen Text
auslesen (Click auf Button1) und per MessageBox auf dem Bildschirm ausgeben.Is ja nicht weiter schwer, funktioniert auch einwandfrei.
Nur jetzt kommt der Bock!
Ich erstelle eine neue HeaderDatei (Test.h) und in dieser eine Klasse:#pragma once
#include "stdafx.h"
#include "Form1.h"using namespace System::Windows::Forms;
namespace My
{
public ref class Test
{
String^ TestStr;static void getStr() // auslesen von textBox1
{
TestStr = TestProg::Form1::textBox1->Text;
}static void showStr() //Mittels MessageBox ausgeben
{
TestProg::MessageBox::Show(TestStr);
}
};}
Bis hierhin wird noch alles einwandfrei kompiliert und gelinkt.
Wenn ich jetzt aber beigehe und Test.h in Form1 einbinde um auf meine frisch gebackene Klasse zuzugreifen bekomme ich gleich 9Fehler und eine Warnung
ausgegeben.Ich hab hier schon zig Beiträge gelesen, komm aber einfach nicht weiter.
Ist das eventuelle ein Problem der Mehrfacheinbindung?
Bei C++ hat man ja immer mit diesen Makros gearbeitet (#ifndef, #define).
Das ist doch bei #pragma once überflüssig oder?
Auf jeden Fall brauch ich ein paar Denkanstubse, vielen Dank im voraus...
-
Welche Fehler und welche Warnungen bekommst Du denn? Und wo und bei was?
-
TestProg::Form1::textBox1->Text
Ich nehmne mal an, das die Meldung was mit statischen Membern o.Ä. hat ?
Du benötigst an dieser Stelle die Instanz von textBox1
Ebenso ist MessageBox kein Element des Namensraumes TestProg.
die pragma once geschichte ersetzt die Includeguards ist ist IMHO compilerspezifisch, was bei den WinForms aber nicht das Problem sein sollte
-
"textBox1" ist ja keine statische Member von Form1, deswegen kannst Du auch so nicht darauf zugreifen!
Du musst schon eine Instanz von Form1 erstellen, die Du dann verwenden kannst um auf "textBox1" zuzugreifen (wenn dies auf "public" anstelle von "private" setzt).
Siehe aber dazu:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-162783.html
-
Hi, eins vorweg
ich hab den Code eben nur schnell als Bsp erstellt und gepostet. War ein wenig in Eile. Das mit TestProg::MessageBox::Show(TestStr); war nen Flüchtigkeits fehler! Ehrlich!!!Das mit der Instanz war allerdings nicht ganz so einleuchtend, zugegeben.
Darum der #include Fehler.
Okay.Jetzt hab ich auch wieder mein eigentliches Problem:
Ich kann jetzt von meiner Test.h Datei den Namespace TestProg nicht mehr sehen!Fehlermeldungen: (jetzt nur noch 3)
c:\dokumente und einstellungen\user\eigene dateien\visual studio 2005\projects\testprog\testprog\Test.h(18) : error C2653: 'TestProg': Keine Klasse oder Namespace
c:\dokumente und einstellungen\user\eigene dateien\visual studio 2005\projects\testprog\testprog\Test.h(18) : error C2065: 'textBox1': nichtdeklarierter Bezeichner
c:\dokumente und einstellungen\user\eigene dateien\visual studio 2005\projects\testprog\testprog\Test.h(18) : error C2227: Links von "->Text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.Ich versuch gleich mal das mit dem Property, wobei ich da ehrlich gesagt noch nicht ganz durchgestiegen bin.
-
So,
hab jetzt mal ein Property nach eurem Bsp erstellt und am Ende von Form1
eingefügt! Bekomme jetzt folgenden Fehler:error C2039: 'TestStr': Ist kein Element von 'My'
Mein Code vom Property:
public:
property String^ MyProperty
{
String^ get() { return textBox1->Text; }
void set(String^ TestStr) { textBox1->Text = My::TestStr; }
}Hab ich das soweit richtig gemacht?
-
In Eile zu sein wenn man hilfe von anderen in einem Forum erwartet ist nie gut, wenn Du schon in Eile bist Dein Problem zu posten, warum sollten andere dann die Zeit haben sich das genau anzusehen ?
Ansonsten schau Dir bitte ein paar Grundlagen an,
Fehler dieser Art kommen wieder und wieder vor:My::TestStr
Das ist keine Instanz und den Namensraum My wird es wohl auch nicht geben.
-
Den Namensraum My habe ich doch in meinem Header Test.h erschaffen. (siehe oben)
-
Ich kann in Form1 ja leider garkeine Instanz von Test erstellen.
Ich kann Test ja nicht sehen.
My::Test test;
test.TestStr = "XYZ";Das ist ja mein Problem.