UpdateData Problem
-
also die funktion ist IN meiner Clientclass...
und joah die buttonfunktion OnButtonClient...ist in einer anderen klasse
-
dlg müsste global sein..
-
also dlg...habe ich in der clientclass ...nur ein mal deklariert...und auch nur in der funktion...
und einmal in der anderen klasse von der aus der dialog aufgerufen wurde... !
-
Ellinas schrieb:
also die funktion ist IN meiner Clientclass...
Wenn das eine Member-Funktion des Dialogs ist, geht das sogar noch einfacher - dann hat die nämlich vollen und direkten Zugang zu dessen anderen Membern:
void clientclass::PrintCPS(LPCSTR Tag,float CPS) { m_Message = Tag; UpdateData(); ... }
(wenn du es unbedingt explizit aufschreiben willst, "this->UpdateData();" bringt das selbe Ergebnis)
-
oh dann habe ich dich falsch verstanden...und ich habe mich falsch ausgedrückt diese funktion ist keine member funktion !!
-
clientclass dlg erzeugt nicht den selben Dialog, es muß entweder ein Verweis mitgegeben werden oder dlg global gehalten werden (finde ich am besten, auch wenn es nicht ganz C++ konform ist)
-
Ja, was denn nun, entscheide dich mal
(und das beste wäre es wirklich, die Funktion zu einem Member der Klasse zu machen - oder willst du sie auch noch in einem anderen Zusammenhang verwenden?Wenn du wirklich eine globale Funktion brauchst, mußt du ihr auf irgendeinem Weg die Adresse des existierenden clientclass-Objektes übergeben, damit sie darauf zugreifen kann. Das geht entweder per Parameter (siehe mein Beispiel etwas weiter oben) oder indem du dieses Objekt global anlegst:
clientclass theDlg; void CWillkommensdialog::OnButtonclient() { theDlg.DoModal(); } void PrintCPS(... { theDlg.m_Member="Test"; theDlg.IpdateData(); ... }
(ich bevorzuge die Version als Member-Funktion (und im Notfall die Übergabe als Parameter))
-
Eine Member-Variable ist doch auch "global", im Sinne der Speicherverwaltung. Natürlich ist es besser eine Member-Variable zu erstellen als ein globales Objekt. Aber es ging hierbei das Problem, daß gedacht wurde das Objekt "clientclass" würde immer das selbe Objekt erstellen; also man könnte durch einen neuen Dialog auf den anderen Dialog der "clientclass"-Klasse zugreifen. So habe ich das Problem verstanden.
-
also aber wie mache ich denn daraus eine member funktion ???
Wenn ich das gemacht habe dann ist das überhaupt kein problem mehr !!
-
Ellinas schrieb:
also aber wie mache ich denn daraus eine member funktion ???
Schritt 1: Du ergänzt in der Definition der Klasse "clientclass" (btw. ein *** Name) die Zeile "void PrintCPS(LPCSTR,float);"
Schritt 2: Du änderst das "void PrintCPS(...)" bei deiner Funktionsdefinition um in "void clientclass::PrintCPS(...)"PS @RR: Nein, eine Membervariable ist nicht global, sondern immer lokal bezüglich des enthaltenen Objektes