Variabenübergabe zwischen verschiedenen Klassen (VC++)
-
Hallo!
Programmiere für ein Mobiles Datenerfassungsgerät mit dem BS WindowsCE.net in den eMbedded VC++.
Nun mein Problem:
Wie kann ich einer Variablen einen Wert zuweisen, der in einer Variablen einer anderen Klasse abgelegt wurde.
Bsp. habe eine Klasse CArtikel : CObjekt angelegt und Variablen public gemacht. Meine andere Klasse CMsgDlg1 : CDialog besitz die Variable mit dem Wert. Nun habe ich den Zugriff von CMsgDlg1 zu CArtikel mit:class CMsgDlg1 : public CDialog { // Construction public: CMsgDlg1(CWnd* pParent = NULL); // standard constructor CArtikel Artikel; int GetDS(int DS); ...vorgenommen.
In der Funktion GetDS(int DS) sollen nun die Daten übergeben werden.
int CMsgDlg1::GetDS(int DS) { int ret =0; m_ssvnr = Artikel.vorgang; m_sbnr = Artikel.benutzer; m_sartnr = Artikel.anummer; m_smenge = Artikel.menge; m_sTime = Artikel.datzeit; }Doch wenn ich nun Artikel. eingebe, werden die Variablen nicht angezeigt. Somit werden auch keine Werte übernommen.
Kann es daran liegen, dass die Basisklassen untersiedlich sind??? Muss meine CArtikel - Klasse noch irgendwie mit der Klasse CDialog konfrontiert werden???
Wie muss das dann aussehen???
Vielen Dank im Voraus!!!mfg motorbine
-
Aloha,
zeig doch mal an welcher Stelle Du in Deinem Dialog Du von CArtikel eine Instanz anlegst, bzw. wo Du Deine Variablen wie vorgang, benutzer etc. initialisierst.
Du includierst auch CArtikel in der CMsgDlgl ???
Grüße
BOA
-
Hallo,
in der Artikel.h
class CArtikel : public CObject { public: CString vorgang; CString benutzer; CString anummer; CString menge; CString datzeit; sDB DB; CArtikel(); virtual ~CArtikel(); };in der Artikel.cpp ist #include MsgDlg1.h und
in der MsgDlg1.cpp ist #include Artikel.hIn der MsgDlg.h befindet sich folgendes:
class CMsgDlg1 : public CDialog { // Construction public: CMsgDlg1(CWnd* pParent = NULL); // standard constructor CArtikel Artikel; int GetDS(int DS); // Dialog Data //{{AFX_DATA(CMsgDlg1) enum { IDD = IDD_MESSAGEDLG1 }; CString m_ssvnr; CString m_sbnr; CString m_smenge; CString m_sdat; CString m_sartnr; CString m_sTime; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMsgDlg1) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CMsgDlg1) virtual BOOL OnInitDialog(); afx_msg void OnBdspeichern(); afx_msg void OnBexit(); virtual void OnCancel(); afx_msg void OnSvnr(); afx_msg void OnBnext(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };mfg motorbine
-
Aloha,
wofür das folgende ?
in der Artikel.cpp ist #include MsgDlg1.h und
Benötigst Du die Klasse MsgDlgl in CArtikel ?
Du hast eine Membervariable in MsgDlgl von Cartikel angelegt. Jetzt mußt Du ja noch den Variablen(vorgang,benutzer usw.) Werte zuweisen, bevor Du in Deiner GetDS() auf irgendwelche Werte zugreifst.
An welcher Stelle weist Du den Variablen in Cartikel die Werte zu ? Das muß natürlich vor dem Benutzen von GetDS() passieren.
Grüße
BOA
-
Entschuldigung, die #include MsgDlg1 ist in der Artikel.cpp rausgenommen.
Die Wertzuweisung erfolgt nach der Überprüfung der Eingabefelder, bevor ich die neue Eingabeoberfläche öffne. Die Messagebox zeigt mir auch die richtigen Werte an.void CDatenDlg::OnBerfassung() { // TODO: Add your control notification handler code here CString str; CString str1; GetDlgItemText(IDC_EVNR, str); //Eingabefeld EVNR an str übergeben GetDlgItemText(IDC_EBENR, str1); //Benutzernummernanzeige //Eingabefelder überprüfen GetDlgItemText(IDC_EVNR, m_svorgnr); //Eingabefeld überprüfen GetDlgItemText(IDC_EBENR, m_sbennr); if (m_svorgnr.GetLength()<=0 || m_svorgnr<"0000000001") //Eingabelänge & Textinhalt { MessageBox(_T("Bitte korrekte Vorgangsnummer eingeben!")); GetDlgItem(IDC_EVNR)->SetFocus(); //Cursor auf Eingabefeld setzen } else if (m_sbennr.GetLength()<=0 || m_sbennr<"0000000001") { MessageBox(_T("Bitte korrekte Benutzernummer eingeben!")); GetDlgItem(IDC_EBENR)->SetFocus(); } else { m_dMsgDlg.m_dMsgDlg1.Artikel.vorgang=m_svorgnr; MessageBox(m_dMsgDlg.m_dMsgDlg1.Artikel.vorgang); m_dMsgDlg.m_dMsgDlg1.Artikel.benutzer=m_sbennr; MessageBox(m_dMsgDlg.m_dMsgDlg1.Artikel.benutzer); m_dMsgDlg.DoModal(); //Dialogfenster Artikel erstellen } UpdateData(FALSE); }Die Funktion GetDS() wird dann erst in der Ausgabeoberfläche gebraucht und aufgerufen. (Erst nachdem alle 5 Felder eingegeben, überprüft und der Wert übernommen werden sollte.)
mfg motorbine