Eintrag in Listenelement markieren



  • Ok dann sorry keine Ahnung 😉


  • Administrator

    Also wenn das m_episode_li ein CListCtrl und zwar das richtige ist und du den 2. Eintrag in der Liste markieren willst, dann sollte es genau so funktionieren. Daher kann ich dir wohl nur mit einem Codeausschnitt weiterhelfen oder du sagst was genau nicht funktioniert (am besten beides zusammen!).
    Grüssli



  • Okay m_episode_li ist ein CListCtrl.
    epi ist ein String der in der Liste gesucht werden soll und ser entsprechende eintrag markiert werden soll

    hier mein code

    m_episode_li.SetFocus();
    for (int i = 0; i <= m_episode_li.GetItemCount(); i++)
    {
    if (m_episode_li.GetItemText(i,2) == epi)
    m_episode_li.SetSelectionMark(i);
    }

    der string epi ist vorhanden und auch richtig aber der eintrag wird nicht hervorgehoben.


  • Administrator

    Hast du auch schon mal im Debug-Modus einen Breakpoint auf die Zeile mit SetSelectionMark gesetzt? Wird das überhaupt ausgeführt?
    Wie lautet der CString-Wert den du in epi reingespeichert hast und wie lautet er in deinem CListCtrl. Grosskleinschreibung beiden Orten gleich?
    Und soll wirklich in der 3. Kolonne gesucht werden?
    Lässt dein CListCtrl auch Markierungen zu?
    Gibt wohl immer noch an die tausend offene Fragen. Der Code so an sich stimmt. Und ich habe hier auch was ähnliches vor mir und das funktioniert. ^^

    Aja übrigens, nimm das <= bei der For-Schleife raus und setz ein < ein, denn das stimmt nicht. Der Index deiner Elemente geht von 0 bis GetItemCount-1. Index ist meistens Nullbasiert.

    Grüssli



  • Eventuell solltest du mal mit dem Debugger durchgehen und beobachten, was während der Schleife passiert. Eventuell kontrollierst du ja die falsche Spalte deines Controls oder die Groß/Kleinschreibung stimmt nicht.

    Auf jeden Fall dürftest du ein Element zu viel überprüfen.



  • Also die Anweisungen werden alle asugeführt, die bediden strings sind absolut gleich hab sie mir ausgeben lassen. wenn ich mit der maus einen eintrag markiere färbt sich dieser. ist das genung um sagen zu können, das die liste markiereungen zulässt.



  • ganmz komisch ist es wenn ich keinen eintrag prüfe sondern nur verscuhe so einen eintrag zu markieren mit
    m_spisode_li.SetSelectionMark(2)

    funktioniert auch nicht


  • Administrator

    Also mit deiner letzten Aussage, würde ich eigentlich fast sagen, dass dann etwas mit deinem CListCtrl nicht stimmt. Wie hast du es denn zugewiesen? Über den Assistenten, oder selber? Wenn selber, wie? Und es ist wirklich das richtige Ctrl?
    Ansonten keine Ahnung, bei mir funktioniert es einwandfrei. Kann also nur sagen, dass du irgendwo ein Fehler gemacht haben musst ^^
    Grüssli



  • hab es über den assistenten eingefügt.
    aber vielleicht noch der hinweis.
    ich habe zwie listenelemente.
    bei der auswahl eines eintrag aus listenelement1 soll einer im zweiten ausgewählt werden.

    danke



  • Wenn ich das richtig nachvollzogen hab, markierst Du zwar den Eintrag, allerdings wird der nicht sichtbar hervorgeben, da das Element evtl. nicht den Focus hat. Du kannst ja mal das CListCtrl mit dem "Auswahl immer anzeigen"-Stil versehen, da siehst Du, ob wirklich nichts markiert ist.

    Ansonsten mache ich das bei mir immer folgendermassen:

    m_CtrlList.SetItemState(idneu, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
    m_CtrlList.SetSelectionMark(idneu);
    

    Bei mir klappt es da auch immer einwandfrei, vielleicht ja bei Dir auch 🙂

    Edit: Jetzt war ich etwas zu langsam 🙂 Ich mache etwas aehnliches, von daher sollte es eigentlich so auch klappen.



  • Ich habe folgende einstellungen gemacht :

    m_episode_li.SetExtendedStyle(LVS_EX_GRIDLINES);
    m_episode_li.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    m_episode_li.SetExtendedStyle(m_auswahl.GetExtendedStyle()| LVS_EX_GRIDLINES);

    ich ahbe auch den haken "auswahl imm er zeigen " aktiviert

    weiß echt nicht mehr weiter



  • basti_1984 schrieb:

    Ich habe folgende einstellungen gemacht :

    m_episode_li.SetExtendedStyle(LVS_EX_GRIDLINES);
    m_episode_li.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    m_episode_li.SetExtendedStyle(m_auswahl.GetExtendedStyle()| LVS_EX_GRIDLINES);

    ich ahbe auch den haken "auswahl imm er zeigen " aktiviert

    weiß echt nicht mehr weiter

    Ich dachte das Problem war im anderen Thread geklärt...
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-146589.html 🙄



  • estartu schrieb:

    basti_1984 schrieb:

    Ich habe folgende einstellungen gemacht :

    m_episode_li.SetExtendedStyle(LVS_EX_GRIDLINES);
    m_episode_li.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    m_episode_li.SetExtendedStyle(m_auswahl.GetExtendedStyle()| LVS_EX_GRIDLINES);

    ich ahbe auch den haken "auswahl imm er zeigen " aktiviert

    weiß echt nicht mehr weiter

    Ich dachte das Problem war im anderen Thread geklärt...
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-146589.html 🙄

    Naja nicht ganz


  • Administrator

    Du hast am Ende aber geschrieben:

    Alles klar, danke!

    Was ist denn immer noch nicht klar? Ist es denn so schwer zu verstehen, das SetExtendedStyle, den alten Wert ersetzt durch den Wert, welcher du übergibst? Die Funktion fügt nicht hinzu, sondern ersetzt! ^^'
    Grüssli



  • ich weiß aber das ist ja nicht das problem sondern das ich einen eintrag in diesem listenelement nicht markieren kann



  • Ja wenn du das wüsstest.... was soll dann

    m_episode_li.SetExtendedStyle(LVS_EX_GRIDLINES); 
    m_episode_li.SetExtendedStyle(LVS_EX_FULLROWSELECT); 
    m_episode_li.SetExtendedStyle(m_auswahl.GetExtendedStyle()| LVS_EX_GRIDLINES);
    

    !?

    m_episode_li.SetExtendedStyle(m_auswahl.GetExtendedStyle()| LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    

    Wäre richtig -.- Wobei das GetExtendedStyles eigentlich nicht nötig ist!

    und mit der Auswahl... naja, bei mir hat es leider auch nach mehreren Funktionen nach einander aufrufens gefunzt 😞 Wobei ich auch stark modefizierte ctrls benutzte 😃

    m_Data.SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED); // "1" Item
    m_Data.SetFocus(); //da Selektierung sonst nicht sichtbar ist
    m_Data.EnsureVisible(nIndex, TRUE);   // Sicherstellen das das Item auch sichbar ist!
    

    Wobei man diese Methode sicherlich noch erweitern könnte, indem man das item was momentan ausgewählt ist findet... GetSelectedItem ... dann schnell dessen itemstate auf nicht ausgewählt setzten... weil sonnst halt das momentan ausgewählte uach noch ausgewählt ist!



  • guten Morgen bin wieder am arbeiten jetzt hat es endlich funktioniert vielen vielen dank


Anmelden zum Antworten