variable weitergeben
-
häh
wie sieht denn do eine set funktion aus??
muss ich die dann von einem fenster zum anderen weiter reichen oder überspringt die variable einfach das eine fenster??
also ich habe jetzt eine variable CFileDialog file_dlg, die ich später zu CString file_name = file_dlg.GetPathName(); mache.
Da ist aber der typ CString oder??
-
Ja, das ist ein CString.
Hier ein Beispiel für eine Set-Funktion:
void SetString (CString strText) { m_strText = strText; }Und ja, du musst das von Fenster zu Fenster weiterreichen, wenn immer eines das jeweils nächste öffnet.
-
diese funktion setzt ich jetzt dort hin wo ich die variable zuerst aufgerufen/erstellt hab.
und mit member-funktionhinzufügen oder
ich frag lieber nicht das dann gar nichts mehr geht.
-
Okay, mal deinem Namen entsprechend:
CDlg1: Hier wird der Text eingegeben und landet in der Variablen strText.
In der Klasse gibt es dann auch folgenden Codeschnipsel:CDlg2 dlg; dlg.SetText(strText); dlg.DoModal();In CDlg2 gehört die Set-Funktion, die Variable zum Zwischenspeichern und folgender Schnipsel:
CDlg3 dlg; dlg.SetText(m_strText); dlg.DoModal();In CDlg3 gibt es dann die Set-Funktion und eine Variable zum Zwischenspeichern (ja, es muss sie in beiden Klassen geben).
Dann kannst du die Variable im dritten Dialog auswerten.Memberfunktion hinzufügen ist ein Weg. Du kannst das aber auch von Hand einbauen.
Wenn du diese Erklärung nicht verstehst, solltest du dich mal um Informationen zum Thema Klassendesign kümmern - oder dein Problem so detalliert beschreiben, dass ein eventuelles Mißverständnis aufgeklärt wird.
-
also ich habe ein variable vom typ CString die sich file_name nennt, in ihr steht der pfad von file_dlg, diese ist vom typ CFileDialog.
So ich habe insgesamt drei fenster. im ersten "erstelle" ich die variable, die ich dann aber erst im dritten wieder brauche. sprich im dritten möchte ich etwas unter diesen pfad speichern.
Wie gebe ich diese funktionen mit der hand ein???
-
*Haarerauf*
Eine Funktion von Hand anzulegen ist einfach:
Du schreibst ihre Definition in die Headerdatei deiner Klasse und den Rumpf in die Cpp-Datei. Dabei kannst du dich an dem Schema orientieren, das die anderen Funktionen dort einhalten.
PS: Das sind C++ Grundlagen. Du bist wohl noch nicht lange dabei?
-
sorry,
aber irgendwie steh ich auf dem schlauch....
kann das sein das setText eigentlich setString heissen sollte????
ist eigentlich auch egal es zeigt mir immer einen fehler an ....
-
Der Funktionsname ist total egal, ich wusste ja nicht, wie die Funktion bei dir heisst.
Was für ein Fehler?
-
so ganz komisch
kein normaler, hab leider alles raus gelöscht sonst würde ich es dir sagen können.
wenn ich das richtig verstanden hab erstelle ich zweimal die funktion setString, einmal in in der zweiten und einmal in der dritten klassé/fenster.
so dann hab ich die Variablen file_name schicke ich mit
m_...dlg.SetString(file_name) an die funktion setString dort ist die hilfs Variable strfile_name, so und dann muss ich ja das ganze ans dritte fenster weiter schicken
usw.
kann das sein das es einfacher geht wenn ich eine neue klasse erstelle und auf diese dann immer zugreife....
-
Also, du scheinst meine Erklärung verstanden zu haben.

Natürlich geht es auch anders, viele Wege führen nach Rom.

Du könntest eine Variable in der von CWinApp abgeleiteten Klasse anlegen, dir mit AfxGetApp einen Zeiger auf die holen und dann da speichern und abfragen. Das ist auch ein Weg - ich würde ihn nicht gehen wollen. Geschmackssache.
Es gibt noch andere Möglichkeiten, aber nach DEN Verständigungsschwierigkeiten wäre es zuviel...
Tipp für's nächste Mal: Beschreibe genauer, welche Klasse welche aufruft und wie der Ablauf gedacht ist. (In dem Stil: Ich gebe in Klasse Bla den Text ein, Klasse soundo fragt den ab, ruft Klasse laber auf und die ruft dann Klasse sülz auf, wo das verarbeitet werden soll.)
Viel Erfolg noch

-
hallo,
steh bei der neuen klasse schon vor einem rätsel....
daher war es wahrscheinlich keine so gute idee.
aber vielleicht kannst du ja helfen was gibt es den ausser CObjekt für klassen für den typ???
Die mag er glaub ich nicht, zumindest bei mir nicht:error C2504: 'CObjekt' : Basisklasse undefiniert
und wie definier ich sie????
-
*hüstel*
Meinst du vielleicht CObject?

(Man beachte das c statt dem k)
-
ich habe es so und so geschrieben aber jedesmal gibt es einen fehler...
ist das den die richtige klasse (CObject) oder gibt es da noch andere besser geeignete??
dann muss ich doch im prinzip nur einer variablen den inhalt von file_name übergeben und auf die kann ich dann zugreifen, oder muss ich noch eine varible haben???
-
So langsam hat mich die Blondseuche erwischt, ich versteh dich einfach nicht mehr. Wenn du dein Preoblem nicht mal in klaren Worten beschreibst, gebe ich auf.
-
Das problem ist das ich nichts geregelt bekomme...
ich bekomme es einfach nicht gebacken, nach deinen vorgaben eine variable,klasse ect zu erstellen.Alles was ich möchte ist ein kurzer einfacher weg eine varible vom typ cstring zwei dialogfelder weiter zuschicken, sei es nun über eine extra klasse oder sonst wie.
ich habe das jetzt schon einpaar mal probiert mit dem setstring von dir aber das klapp gar nicht.
Ich bin wahrscheinlich einfach nur zu rein blond
-
estartu_de schrieb:
Du könntest eine Variable in der von CWinApp abgeleiteten Klasse anlegen, dir mit AfxGetApp einen Zeiger auf die holen und dann da speichern und abfragen. Das ist auch ein Weg - ich würde ihn nicht gehen wollen. Geschmackssache.
wie mach ich das genau
member -funktion vom typ Cwinapp, deklaration afxgetapp???
oder wie ????
-
Pass mal auf, ich bin auch blond und finde deine Bemerkung irgendwie nicht wirklich witzig - sie ist eine Ausrede.
Guck doch mal in die MSDN, AfxGetApp ist ein Befehl, den du dort findest.
-
entschuldigung, war eigentlich nicht böse oder so gemeint...
darunter steht in der msdn:
AfxGetApp
CWinApp* AfxGetApp( );Return Value
A pointer to the single CWinApp object for the application.
Remarks
The pointer returned by this function can be used to access application information such as the main message-dispatch code or the topmost window
aber mehr nicht,....
-
Okay, schon verziehen...
Du hast also die Hilfe gelesen, aber nicht verstanden.
Also, du kriegst da einen Zeiger auf ein CWinApp Objekt. Den musst du auf dein App-Objekt casten und dann kannst du auf dessen Member zugreifen.
Du musst also in etwa folgendes machen:
In deiner von CWinApp abgeleiteten Klasse (ich nenne sie ab jetzt CMyApp) erstellst du eine neue Variable (Typ CString, ich nenne sie hier m_strText) die public ist (um Arbeit zu sparen - solltest du irgendwann besser machen).
Der Zugriff von aussen funktionier dann wie folgt:
CMyApp* pApp = dynamic_cast<CMyApp*>(AfxGetApp()); ASSERT(pApp); if (pApp) { pApp->m_strText = "Beispieltext"; // Reinschreiben CString strTemp = pApp->m_strText; // Auslesen }Unbekannte Befehle schlag bitte zuerst in der MSDN nach.
-
hallo,
danke das du mir hilfst, aber irgendwie komme ich mit deiner hilfe nicht weiter.... ich bin daran gewöhnt schritt für schritt alles gesagt zu bekommen (Buch: Visual c++ 6 in 21 Tagen), daher komm ich nicht mit was ich machen soll. ich hab eine abgeleitete klasse von winapp, woher kommt die ....????
Ausserdem wohin mit diesem teil von code den du gepostet hast.
ich bekomme eine warnung und das prog lässt sich schon gar nicht mehr öffnen...