Mit der Tastatur in einer CListCtrl navigieren
-
Hallo,
ich habe eine CListCtrl - Box erstellt (Report). Jetzt möchte ich mit den Tasten "UP" und "DOWN" innerhalb dieser Liste navigieren.
Wie funktioniert das?
-
Meinst du nur mit Up und Down oder auch mit Up und Down?
Das geht nämlich schon von Haus aus.
-
Bei mir funktioniert das nicht von Haus aus. Welche Optionen müssen denn aktiviert sein?
Meine Frage: wie kann ich ein bestimmtes ITEM in der ListCtrl als "selected" markieren? Gibt es einen Befehl in der Art SetSelectet(item)?
-
Choceur schrieb:
Bei mir funktioniert das nicht von Haus aus. Welche Optionen müssen denn aktiviert sein?
Wenn es bei dir nicht funktioniert, fang einfach die Up/Down-Taste ab, mittels
PreTranslateMessage()if(pMsg->message == WM_KEYDOWN) { if(pMsg->wParam == VK_UP) { AfxMessageBox("Up"); } else if(pMsg->wParam == VK_DOWN) { AfxMessageBox("Down"); } }
Choceur schrieb:
Meine Frage: wie kann ich ein bestimmtes ITEM in der ListCtrl als "selected" markieren? Gibt es einen Befehl in der Art SetSelectet(item)?
Das geht mit SetSelectionMark()
http://www.c-plusplus.net/forum/viewtopic.php?t=88686&highlight=setselectionmark
http://www.c-plusplus.net/forum/viewtopic.php?t=50718&highlight=setselectionmark
http://www.c-plusplus.net/forum/viewtopic.php?t=85507&highlight=setselectionmark
http://www.c-plusplus.net/forum/viewtopic.php?t=54430&highlight=setselectionmarkDas sollte reichen ...
Gruß
:: NoName ::
-
Ich weiß das diese Beiträge gehast sind aberhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfMFCClassListing.asphier hast du sämmtlich Funktionen dieser Klasser aufgelistet und erklärt
-
So ich habe damit jetzt auch gerade ein Problem,
und zwar funktioniert das hoch und runter navigieren optisch einwandfrei. Jedoch möchte ich ein Info zu der ausgewählten Zeile in weitere CEdits schreiben. Die sich natürlich beim Zeilenwechsel per Tastatur auch ändert.
Mein Problem ist nun, das zuerst OnKeyDown ausgeführt wird und wenn DAS abgearbeitet ist, die markierung erst weiter springt. Ich habe somit immer den alten index und nicht den der aktuellen zeile
gibt es eine Nachricht die gesendet wird sobald sich die Markierung geändert hat? Ich suche die ganze Zeit schon, finde aber leider nix
Windows macht das zum Beispiel im Arbeitsplatz doch auch, für die Dateiinfos etc.
-
Ich habs so gelöst:
LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR; // Index der markierten Zeile holen int n = m_lscOrte.GetSelectionMark(); // Ist überhaupt etwas ausgewählt? if (n > -1) { // Index anpassen if ((pLVKeyDown->wVKey == VK_UP) && (n > 0)) { // Pfeil-rauf also einen Index runter n--; } else if ((pLVKeyDown->wVKey == VK_DOWN) && (n+1 < m_lscOrte.GetItemCount())) { // Pfeil-runter also einen Index rauf n++; } // Daten zu der Zeile speichern m_strPlz = m_lscOrte.GetItemText(n, 0); m_strOrt = m_lscOrte.GetItemText(n, 1); // In Felder übertragen UpdateData(FALSE); }
Hoffe du steigst durch, sonst pflege ich noch mehr Kommentare ein.
-
Hi,
thx, danke ich habs inzwischen genauso gelöst, ich dachte nur es gibt vielleicht ne schönere Möglichkeit, also ne Message die gesendet wird
Hab das genauso wie du, nur wird am Ende dann die Methode mit der Verarbeitung aufgerufen, aus der OnClick-Methode ruf ich die Verarbeitungmethode dann auch noch auf.
Dann lass ich es halt auch so.. :p
mfg
tobi
-
Och, du könntest bestimmt auch im Listcontrol selber rumbasteln, dass es dir eine Nachricht schickt - aber bis darauf, dass ich die Zeilen da immer wieder (bei komplexeren Masken auch mit Funktionsaufruf) schreibe, bin ich damit bisher sehr gut zurechtgekommen.
-
och nönö
ich brauche das halt nur weil das Framework in dem sich das Ganze befindet selber nicht direkt darauf zugreifen kann (das mit den Edits hab ich als leichte erklärung geschrieben, weils im Prinzip aufs gleiche rauskommt) und infos über die gewählte Zeile fürs Framework in einem Objekt aktuell gehalten werden müssen.
Das kommt einfach mit in den eigenen Assistenten rein und beim generieren einer neuen Liste ist die Funktionalität dann immer sofort gegeben, das muss reichen