Veröffentlicht 13. Januar 200322 j 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
13. Januar 200322 j Hast du`s anstatt mit SelectItem() mal mit Select() versucht, da kann man noch einen Parameter übergeben ob die Ansicht aktualiesirt werden soll.
13. Januar 200322 j Kann es sein, dass das TreeControl einfach nicht den Fokus hat und der Style TVS_SHOWSELALWAYS nicht gesetzt ist?
13. Januar 200322 j 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".
13. Januar 200322 j 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.
13. Januar 200322 j ... 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.
13. Januar 200322 j Bist du sicher, dass hti gültig ist und auf das richtige Element verweist? Was gibt Select zurück?
13. Januar 200322 j Kannst du OnSelchangedTree1() nicht irgendwie selber nach Select() aufrufen? Z.B. mit SendMessage()?
13. Januar 200322 j *ans-hirn-fass* Ctrl->Select(hitem, TVGN_CARET); funktioniert schon; nur ich bin nie in den if-Zweig reingekommen *sorry*
17. Januar 200322 j 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 } }
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.