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 Zitieren
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. Zitieren
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? Zitieren
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". Zitieren
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. Zitieren
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. Zitieren
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? Zitieren
Guybrush Threepwood Geschrieben 13. Januar 2003 Geschrieben 13. Januar 2003 Kannst du OnSelchangedTree1() nicht irgendwie selber nach Select() aufrufen? Z.B. mit SendMessage()? Zitieren
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* Zitieren
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 } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.