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.h

    In 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


Anmelden zum Antworten