Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Register- und Listensteuerelement, zugriff

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2004, 12:56 Uhr
~krozey
Gast


hallo,

eins vorweg, ich bin anfänger und bitte darum dies bei antworten zu berücksichtigen.

mein problem:

ich habe eine dialogbasierte anwendung erstellt, auf dieser befindet sich ein listensteuerelement sowie eingabe felder. dort können daten eingetragen werden, diese daten können auch gespeichert und geladen werden; alles funktioniert.

aus platzgründen möchte ich das mit dem registerkartensteuerelement aufteilen, in das erste register kommt das listensteuerelement und in das zweite register die eingabefelder.

mit der anleitung von uwe aus der FAQ 'Registerkarten in mein Projekt aufnehmen' habe ich 2 register in meiner anwendung. in das erste register habe ich das listensteuerelement eingefügt, das zweite register ist noch leer.

das problem ist jetzt, wie bekomme ich spalten in das steuerelement das sich im dialog für das erste register befindet und wie kann ich mit einem steuerelement das sich auf dem einem dialog befindet das steuerelement ansprechen das sich auf dem anderen dialog befindet (anders die daten in den eingabe feldern vom zweiten dialog in das listenelement vom ersten dialog)

die spaltennamen und -breite habe ich zuvor im OnInitDialog() festgelegt, aber das funktioniert nicht mit dem listenelement das sich jetzt im ersten registerdialog befindet

das alte listensteuerelement hiess 'IDC_DATEN', die member-variable 'm_Daten' vom typ 'CListCtrl' die in der klasse CTemp_protokollDlg (klasse des hauptdialogs) steht
das neue heisst 'IDC_REG1_DATEN', die member-variable 'm_RDaten' vom gleichen typ die in der klasse CSeite1 steht

im 'OnInitDialog()' habe ich die spalten bisher so die spaltennamen festgelegt


Code:
m_Daten.InsertColumn ( 0, _T("Datum "), LVCFMT_LEFT, -1, 0 );
m_Daten.InsertColumn ( 1, _T("Uhrzeit "), LVCFMT_LEFT, -1, 1 );
... usw



was ich probiert habe war das ich eine membervariable festgelegt habe typ 'CSeite1' name 'm_cSeite1'. dann habe ich in 'OnInitDialog()' von 'CTemp_protokollDlg' ein 'm_cSeite1.Initialisieren();' reingepackt und dann eine memberfunktion in der klasse 'CSeite1' vom typ 'void' und deklaration 'Initialisieren()' erstellt. dort habe ich dann


Code:
m_RDaten.InsertColumn ( 0, _T("Datum "), LVCFMT_LEFT, -1, 0 );
m_RDaten.InsertColumn ( 1, _T("Uhrzeit "), LVCFMT_LEFT, -1, 1 );
... usw



es wird ohne fehler kompiliert, der debug-release bringt die fehlermeldung 'debug assertion', der endrelease bringt eine meldung mit zugriff auf nicht unterstützter funktion oder so ähnlich

wenn ich stattdessen aber nur ein 'MessageBox(...);' reinpacke anstatt die spalten festzulegen, startet die anwendung wobei erst die messagebox kommt und danach erst das dialog.



ich hoffe ihr versteht was ich meine
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2004, 15:33 Uhr
mmc20
puss in boots


hallo, das ist nicht ganz so schwierig...
um von deinem hauptdialog auf die registerdialoge zuzugreifen:

C++:

    CSeite1* RegDlg1 = (CSeite1*)m_cTabCtrl.m_tabellenSeite[0];
    CSeite1* RegDlg2 = (CSeite2*)m_cTabCtrl.m_tabellenSeite[1];

    RegDlg1->memberFunktionDesRegisterDlg1();
    RegDlg2->memberVariable = irgendwas;
// dies funktioniert aber erst nachdem die dialoge initialisiert wurden !



aus einem der registerDlg auf den hauptdialog must du's so machen:

C++:

    ((CDeinDlg*)GetParentOwner())->memberVariable = irgendwas;



und vom registerDlg1 zum registerDlg2 ...

C++:

((CSeite2*)((CDeinDlg*)GetParentOwner())->m_cTabCtrl.m_tabellenSeite[1])->memberFunktion();



aber eleganter ist es natürlich das ganze mit nachrichten zu machen, und auf diese dann mit den entsprechenden dialogen reagieren.

Dieser Post wurde am 09.12.2004 um 15:35 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2004, 22:18 Uhr
~krozey
Gast


hi,

das mit dem auf die dialoge zugreifen funktionert mit dem code .. thx

jedoch hab ich nun nen anderes problem ..

wenn der user beenden will und daten geändert wurden wird er gefragt ob er die änderungen speichern will. wenn die antwort ja ist wird die funktion aufgerufen die sich in einer anderen klasse befindet .. wenn ich diese ausführen will spuckt der compiler die meldung aus:

Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "CSeite1" erfolgte

was kann ich da machen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: