Anfängerfrage - Doppelklick in Listbox -> Ausgabe des gewählten Strings



  • Hi,

    ich versuche seit ein paar Tagen VC++ zu "lernen" klappt auch alles ganz super, nur habe ich jetzt ein kleines Problem, ich habe mir einen Dialog erstellt, welcher eine Listbox enthält, diese Listbox fülle ich mit verschiedenen Strings.

    Nun möchte ich bei einem Doppelklick auf einen dieser Einträge, den selektierten Angezeigt bekommen, von mir aus in einer MessageBox oder so. Später soll der selektierte Wert dann an einen zweiten Dialog übergeben werden. Erstmal reicht mir aber die Messagebox denke ich.

    Ich bin mittlerweile soweit, das wenn ich einen Eintrag doppelt Anklicke eine Messagebox angezeigt bekomme. Aber ich weiß nicht wie ich den Inhalt des selektierten Eintrags auslesen kann um mir diesen anzeigen zu lassen.

    Soweit bin ich:

    void CSelectADlg::OnLbnDblclkFruechte()
    {
    	CListBox* fruechte = (CListBox*) GetDlgItem( IDC_FRUECHTE );
    	fruechte->MessageBox("TEXT!");
    }
    

    Und da wo jetzt TEXT! steht, möchte ich gernen den Inhalt des selektierten Eintrags stehen haben... wie stelle ich das an???

    LG



  • Hallo, wenn du Funktionen zu einer Klasse suchst, dann schau in die MSDN und such nach den "class members" der Klasse. Einen Link zur MSDN findest du über der Threadliste des MFC Forums.
    Ich hab für dich schon mal geschaut: http://msdn.microsoft.com/en-us/library/k8cseaky.aspx

    Du brauchst zwei Funktionen. Eine, die dir zurückgibt die wievielte Zeile gewählt ist und eine die dir den Text einer gegebenen Zeile gibt. 🙂



  • Benutze CListBox::GetCurSel(), um die ausgewählte Zeile zu ermitteln.



  • Hey ihr Beiden,

    vielen Dank hat super geklappt. Habe die Sache jetzt so gelöst:

    CListBox* fruechte = (CListBox*) GetDlgItem( IDC_FRUECHTE );
    	int GCS = fruechte->GetCurSel();
    	CString Buffer;
    	int n = fruechte->GetTextLen(GCS);
            fruechte->GetText(GCS, Buffer.GetBuffer(n));
    	MessageBox(Buffer);    
    	Buffer.ReleaseBuffer();
    

    Vielleicht könntet ihr mir jetzt noch kurz einen Tipp geben, wie ich den ausgelesenen String nachher an ein weiteren Dialog übergebe, geschieht das im DoModal???

    Nochmal vielen vielen Dank,

    LG



  • Mach Dir eine get()-Methode in Deine Dialogklasse und frage den Rückgabewert von DoModal() auf IDOK ab. Dann kannst Du Dir bei positivem Ergebnis den Wert aus dem Dialog abholen und den nächsten Dialog damit versorgen. Such mal hier im Forum, zu diesem Thema gab es hier schon jede Menge Threads.



  • Okay mache ich. Dank dir. 👍

    Liebe Grüße



  • Grummel schrieb:

    Hey ihr Beiden,

    vielen Dank hat super geklappt. Habe die Sache jetzt so gelöst:

    CListBox* fruechte = (CListBox*) GetDlgItem( IDC_FRUECHTE );
    	int GCS = fruechte->GetCurSel();
    	CString Buffer;
    	int n = fruechte->GetTextLen(GCS);
            fruechte->GetText(GCS, Buffer.GetBuffer(n));
    	MessageBox(Buffer);    
            Buffer.ReleaseBuffer();
    

    Den Rückgabewert von GetCursel() solltest Du ggfs. noch auswerten für den Fall, dass keine Zeile selektiert ist. Und das GetText() mit CString geht auch einfacher:

    CListBox* fruechte = (CListBox*) GetDlgItem( IDC_FRUECHTE );
        int GCS = fruechte->GetCurSel();
        if (GCS >= 0)
        {
            CString Buffer;
            fruechte->GetText(GCS, Buffer);
            MessageBox(Buffer);
        }
    


  • Hi Jencas,

    gute Sache, ich hatte lediglich das MSDN Beispiel 1 zu 1 übernommen. Nochmals vielen Dank für eure Hilfe.

    LG



  • Kein Problem. Hier wird gerne geholfen!


Anmelden zum Antworten