Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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".

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.

... 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.

*ans-hirn-fass*

Ctrl->Select(hitem, TVGN_CARET);

funktioniert schon; nur ich bin nie in den if-Zweig reingekommen

*sorry*:rolleyes:

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.