Visual C++, kleines Problem :)

SirDregan

Mitglied
Hiho!

Ich hab da n kleines Problem, ich will einem Textfeld (oder einem Editfeld) einen Wert aus einer Variable übergeben. Ich hab schon Google durchstöbert aber nix gefunden

Thx schomal für Hilfe!

CyA
 
Iss das wirklich soo schwer?
Ich will doch nur die Value von nem Textfeld durch die value einer Variable ersetzen!

habs schon mit Textfeldname.value = Variable;
und----------- Textfeldname<-Text = Variable;

versucht.
 
Zuletzt bearbeitet:
sorry, *nixpeil*

Ich hab will das mein Feld (Name IDC_XKOO) den Wert von der Variable (m_xkoo) übernimmt.

Wenn ich das mit den oben genannten Befehlen versuche, bringt er mir beim Kompiliren den Fehler: Vor .value muss eine Klasse o.a. stehen
mit <-Text gibts nen Syntaxerror glaubich (bin jetz daheim, Source auffer Arbeit)

CyA
 
Also mal alles in Ruhe erklären:

Gehen wir davon aus, dass Du das Eingabefeld in einem Dialog hast. Den nennen wir jetzt mal CMyDialog

Schön der Reihe nach:
1. Erstelle mit dem Classwizard für CMyDialog eine Membervariable mit dem gewünschten Typ (hier mal ein int) Namen: m_nMyValue
2. Dieser Variable kannst Du nun ganz einfach einen Wert zuweisen:
Code:
CMyDialog MyDialog;
int nWert = 10;
MyDialog.m_nMyValue = nWert;
if (MyDialog.doModal() == IDOK)
{
    nWert = MyDialog.m_nMyValue;
}
3. Hast Du alles mit dem Classwizard erstellen lassen, dann wird automatisch UpdateData(TRUE) sowie UpdateData(FALSE) in Deiner Dialogklasse aufgerufen. Du kannst aber auch eine Übernahme erzwingen mit UpdateData(FALSE)

Probiers mal aus!
 
erstma danke für hilfe!

und zweitmal ;) :

Ich krieg beim kompilieren nen Fehler (bzw.2)
'doModal' : Ist kein Element von 'CMyDialogDlg'

EDIT: Ok selbst wenn ich die doModal() Schleife weglass und nur den Befehl "nWert = MyDialog.m_nMyValue;
eingeb funztz net. Er hat zwar dann den Wert aus 'nWert' in der Variable 'm_nMyValue', aber im Editfeld stehts net. Es muss doch nen Befehl wie z.B.

CMyDialogDlg.MyEditfield = m_nMyValue;

geben, wenn du verstehst was ich meine!
 
Zuletzt bearbeitet:
Sorry müsste DoModal() heissen! Egal! Anbei ist ein Beispiel, schau Dir dieses mal an! Hoffe, dass sich damit Dein Problem lösst!

Das Beispiel zeigt zwei Möglichkeiten, wie Du Werte auslesen kannst.
Hier mit dem DoDataExchange-Mechanismus! Membervariable wird am einfachsten mit dem Classwizard erstellt. Mit UpdateData(TRUE) wird der Wert aus dem Eingabefeld ausgelesen. Wert steht in m_strMyEdit. Den kannst Du dann weiterverarbeiten.
Code:
void CEditSampleDlg::OnAccept() 
{
    UpdateData(TRUE);

    CString strMessage;
    strMessage.Format("Du hast den Text \"%s\" eingegeben!", m_strMyEdit);
    AfxMessageBox(strMessage);
    
}

Das andere Beispiel zeigt Dir, wie Du ein Eingabefeld ohne DoDataExchange direkt auslesen kannst! Ich will hier aber nicht näher darauf eingehen, da es mit DoDataExchange einfacher ist! Schau Dir mal das Beispiel an (ist mit VisualStudio 6.0 erstellt).

Code:
void CEditSampleDlg::OnAccept() 
{
    CEdit* pMyEdit;
    CString strMessage;
    CString strEdit;
        
    pMyEdit = (CEdit*) GetDlgItem(IDC_MYEDIT);
    if (pMyEdit != NULL)
        pMyEdit->GetWindowText(strEdit);

    strMessage.Format("Du hast den Text \"%s\" eingegeben!", strEdit);
    AfxMessageBox(strMessage);
    
}
 

Anhänge

  • editsample.zip
    30,3 KB · Aufrufe: 15
Reinschreiben gut! Dann ändere das Beispiel so um:

Code:
void CEditSampleDlg::OnAccept() 
{
    CString strMessage;

    m_strMyEdit = _T("Trallala das schreibe ich rein");

    strMessage.Format("Folgenden Text schreibe ich jetzt ins Editfeld: \"%s\"", m_strMyEdit);
    AfxMessageBox(strMessage);

    // Ganz wichtig! Damit wird der Wert in der Methode DoDataExchange
    // ins Eingabefeld übertragen.
    UpdateData(FALSE);
   
}

Das andere Beispiel musst Du so ändern:
Code:
void CEditSampleDlg::OnAccept() 
{
    CEdit* pMyEdit;
    CString strMessage;
    CString strEdit;
        
    pMyEdit = (CEdit*) GetDlgItem(IDC_MYEDIT);
    strEdit = _T("Zweite Variante");
    strMessage.Format("Den Text schreibe ich jetzt ins Eingabefeld: \"%s\"", strEdit);
    AfxMessageBox(strMessage);

    if (pMyEdit != NULL)
        pMyEdit->SetWindowText(strEdit);
   
}

Ist jetzt Deine Frage beantwortet?
 

Neue Beiträge

Zurück