In 2 CListCtrl jeweils 1 Zeile selektiren
-
Hallo zusammen!
Ich möchte in zwei verschiedenen CListCtrl jeweils eine Zeile selektieren. Derzeit hab ich das Problem, dass er aus der einen Liste komplett herausgeht, wenn ich in der anderen eine Zeile selektiere.
Ist die richtige Funktion für das aktive Selectieren einer Zeile dann SetHotItem()?
Zur Erklärung: Ich möchte in einer Liste die Selektion ändern, wenn in der anderen etwas anderes gewählt wurde.Viele Grüße,
Ranger
-
Dann mach das doch?
Wo ist Dein Problem? Jedes List Control verwaltet für sich selbst die jeweiligen selektierten Items.Kann es sein, dass Du LVS_SHOWSELALWAYS nicht gesetzt hast und deswegen, bei Focus Verlust, die Items nicht mehr selektiert erscheinen?
-
Danke für die schnelle Antwort.
Leider gibt es ein Problem. Das "Hot Item" sieht nicht aus wie selektiert, sondern da ist die Schrift nur andersfarbig. Naja gut, damit könnte man leben, allerdings läuft das "Hot Item" der Maus nach. Es ist ja dem Namen nach auch das, wo sich die MAus drauf befindet. Ich bräuchte also das Gegenstück zu "GetFirstSelectedItem()".
Auch auf LVS_SHOWSELALWAYS hin wird die vorher selektierte Reihe wieder "losgelassen". Kann es sein, dass dieses Style nicht mit LVS_EX_FULLROWSELECT und LVS_EX_GRIDLINES zusammen funktioniert?Viele Grüße,
Ranger
-
Das Hot Item ist nicht das selektierte Item.
Verwende SetItemState(n,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);Schau Dir mal die Item States and.
-
Hallo!
Erstmal vielen Dank Martin. Ich habe mit den States etwas "rumgespielt", aber nur teilweise einen Erfolg gehabt. Die Probleme sind im Wesentlichen immernoch. Ich fasse die einzelnen Punkte mal zusammen:
m_list_bearbeitet.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_SHOWSELALWAYS);
Hat leider nur den Effekt, dass jeder Eintrag in der Liste, über dem sich der Mauszeiger befindet, markiert wird, ohne ihn aktiv anzuklicken. Das geht so nicht zu behandeln. Wenn in einer Liste etwas gewählt ist und ich wähle danach in der zweiten Liste etwas aus, wird die Auswahl in der Ersten Liste weiterhin entfernt.
LVITEM item; item.mask = LVIF_STATE; item.state = LVIS_SELECTED | LVIS_FOCUSED; item.stateMask = LVIS_SELECTED|LVIS_FOCUSED; m_list_original.SetItemState(2,&item);
Das bringt den erwünschten Erfolg. Ich kann damit eine Zeile aus dem Programm heraus highlighten. Es ist aber so, dass ich, wenn ich die Listen fülle gleich die jeweils ersten ausgewählt darstellen möchte und das geht ja noch nicht.
Habt Ihr noch einen Tip für mich?
Viele Grüße,
Ranger
-
Glasgow_Ranger schrieb:
m_list_bearbeitet.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_SHOWSELALWAYS);
Hat leider nur den Effekt, dass jeder Eintrag in der Liste, über dem sich der Mauszeiger befindet, markiert wird, ohne ihn aktiv anzuklicken. Das geht so nicht zu behandeln. Wenn in einer Liste etwas gewählt ist und ich wähle danach in der zweiten Liste etwas aus, wird die Auswahl in der Ersten Liste weiterhin entfernt.
Das ist ja auch Unfug. LVS_SHOWSELALWAYS ist ein normalter Stil des Fensters und kein LVS_EX! Du kannst diesen incht mit SetExtendedStyle setzen! Du musst ihn bei der Erzeugung des Fensters oder in der Dialog Ressource setzen.
LVITEM item; item.mask = LVIF_STATE; item.state = LVIS_SELECTED | LVIS_FOCUSED; item.stateMask = LVIS_SELECTED|LVIS_FOCUSED; m_list_original.SetItemState(2,&item);
Das bringt den erwünschten Erfolg. Ich kann damit eine Zeile aus dem Programm heraus highlighten. Es ist aber so, dass ich, wenn ich die Listen fülle gleich die jeweils ersten ausgewählt darstellen möchte und das geht ja noch nicht.
Habt Ihr noch einen Tip für mich?1. SetItemState hat noch ene andere Form die weitaus einfacher zu bedienen ist:
m_list_original.SetItemState(2,LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
http://msdn.microsoft.com/en-us/library/9t97k8h9(VS.80).aspx
2. Warum soll das ncicht gehen. Du kannst beim Füllen der Liste doch diese Items sofort selektieten lassen. Ich verstehe Dein Problem nicht.
Und was hindert Dich daran nach Füllen der Liste das Item zu selektieren, wie es Dir gerade schon gelungen ist?
-
Hallo!
Entschuldige die späte Antwort.
2. Warum soll das ncicht gehen. Du kannst beim Füllen der Liste doch diese Items sofort selektieten lassen. Ich verstehe Dein Problem nicht.
Und was hindert Dich daran nach Füllen der Liste das Item zu selektieren, wie es Dir gerade schon gelungen ist?Das Problem begründet sich im Punkt 1. Solange ich die Reihe nicht dauerhaft selektiert bekomme, solange bringt es den Erfolg nicht, weil er natürlicherweise, wie Du ja sagst, das LVS nicht setzen konnte. Somit ist nur der aktiv, den ich zuletzt gesetzt hab.
Ich versuche es nochmal in der richtigen Reihenfolge.
Viele Grüße und Danke
Ranger
-
Gleich nochmal!
Es funktioniert wie beschrieben. Sobald ich das LVS korrekt eingestellt hatte in der Ressource lief alles bestens.
Vielen Dank nochmal.
Ranger
PS: Tip an alle man sollte die Antworten der Profis richtig lesen, dann löst man die Probleme schneller.