Technician Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Hallo, ich habe eine Methode implementiert, mit der man den Inhalt eines TreeCtrls durchsuchen kann. Der User gibt einen Wert ein, und wenn der Wert als Node des TreeCtrls exisitert, wird der entsprechende Node markiert. Das "Markieren" soll über pCtrl->SelectItem(htiNode); gelöst werden. Der Node wird wie gewünscht expandiert, allerdings ist der Texteintrag daneben nicht blau markiert. Es sieht also so aus, wie wenn man einen Node expandiert, indem man das kleine + anklickt, aber nicht auf den Texteintrag doppelklickt. Wie erreiche ich aber das? Text soll markiert werden. Gruß, Technician
Guybrush Threepwood Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Hast du`s anstatt mit SelectItem() mal mit Select() versucht, da kann man noch einen Parameter übergeben ob die Ansicht aktualiesirt werden soll.
Klotzkopp Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Kann es sein, dass das TreeControl einfach nicht den Fokus hat und der Style TVS_SHOWSELALWAYS nicht gesetzt ist?
Technician Geschrieben 13. Januar 2003 Autor Geschrieben 13. Januar 2003 Originally posted by Guybrush Threepwood Hast du`s anstatt mit SelectItem() mal mit Select() versucht, da kann man noch einen Parameter übergeben ob die Ansicht aktualiesirt werden soll. Der Parameter ist TVGN_CARET Aber diese Aktualisierung hat, soweit ich weiß, keinen Einfluss auf diese "Text-Markierung".
Technician Geschrieben 13. Januar 2003 Autor Geschrieben 13. Januar 2003 Originally posted by Klotzkopp Kann es sein, dass das TreeControl einfach nicht den Fokus hat und der Style TVS_SHOWSELALWAYS nicht gesetzt ist? Das TreeControl hat den Fokus. TVS_SHOWSELALWAYS ist auch gesetzt.
Technician Geschrieben 13. Januar 2003 Autor Geschrieben 13. Januar 2003 ... was ich mich auch wundere: die Methode void CMyFormView::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) wird beim Aufruf von pCtrl->Select(hti, TVGN_CARET); definitiv nicht ausgeführt... Aber genau der Code, der beim manuellen Anklicken ausgeführt wird (nämlich der in OnSelchangedTree1), soll auch beim "automatischen Anklicken", also wenn ich das explizit für genau diesen Node möchte, ausgeführt werden.
Klotzkopp Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Bist du sicher, dass hti gültig ist und auf das richtige Element verweist? Was gibt Select zurück?
Guybrush Threepwood Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Kannst du OnSelchangedTree1() nicht irgendwie selber nach Select() aufrufen? Z.B. mit SendMessage()?
Technician Geschrieben 13. Januar 2003 Autor Geschrieben 13. Januar 2003 *ans-hirn-fass* Ctrl->Select(hitem, TVGN_CARET); funktioniert schon; nur ich bin nie in den if-Zweig reingekommen *sorry*
Narf! Geschrieben 17. Januar 2003 Geschrieben 17. Januar 2003 Vielleicht hilft Dir das: Bei mir haut es jedenfalls hin. void CTest2Dlg::Suchen() { HTREEITEM such=m_Tree.GetRootItem(); //das erste Item greifen BOOL find=0; CString suchtxt; while(find!=1) { suchtxt=m_Tree.GetItemText(such); //ich mache aus dem Item einen Text if(strcmp(suchtxt,Titel)==0) //vergleiche den mit suchtxt { m_Tree.SelectItem(such); //Item wird im Tree gefunden und markiert find=1; } else { if(m_Tree.ItemHasChildren(such)) //Item hat Unteritems { such=m_Tree.GetChildItem(such); suchtxt=m_Tree.GetItemText(such); if(strcmp(suchtxt,Titel)!=0) { if(m_Tree.ItemHasChildren(such)) //Unteritem hat Unteritems { such=m_Tree.GetChildItem(such); suchtxt=m_Tree.GetItemText(such); } } if(strcmp(suchtxt,Titel)==0) { m_Tree.SelectItem(such); find=1; } } } such=m_Tree.GetNextVisibleItem(such); //wenn nicht gefunden, weitersuchen } }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden