Zum Inhalt springen

Tree-Ansicht erstellen


Narf!

Empfohlene Beiträge

Original geschrieben von Narf!

Wie kann ich Elemente in eine Tree-Ansicht einfügen bzw. das Level festlegen?

MFC oder nicht? Falls ja, mit CTreeCtrl::InsertItem. Wenn Du mit Level meinst, wo das neue Element eingefügt werden soll: Du musst bei InsertItem das Parent-Element angeben, in Form eines HTREEITEM. Ein solches bekommst Du beim Aufruf von InsertItem für das neu eingefügte Element zurück. Wenn Du ein Element auf der obersten Ebene anlegen willst, musst Du als Parent TVI_ROOT angeben.

Siehe auch:

http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_CTreeCtrl.3a3a.InsertItem.asp

Und vielleicht kann mir jemand mit der CD-ROM-Kontrolle helfen?! (siehe Laufwerke und ihre Buchstaben)
Hat Dir ffGebaecks Antwort nicht weitergeholfen?
Link zu diesem Kommentar
Auf anderen Seiten teilen

Tachchen!

Danke für die Tree-Tipps, es hat geklappt.

Aber nun das nächste Problem:

Wenn ich ein Item aus der Liste auswähle, dann möchte ich den Text des Items in einer Variable speichern, um sie mit einem anderen String zu vergleichen. Wie bekomme ich den Item-Text in eine Variable?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dafür hättest Du kein neues Thema beginnen müssen, ich führ das mal zusammen ;).

Aber zur Frage:

Um überhaupt etwas davon mitzubekommen, wenn sich die Selektion eines Tree Controls ändert, musst Du im Klassenassistenten für das Control eine Nachrichtenbehandlungsfunktion für die Nachricht TNV_SELCHANGING einrichten.

Die generierte Funktion sieht dann in etwa so aus:

void CDeinDlg::OnSelchangedTreeXy(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

*pResult = 0;
}[/CODE] Diese Funktion wird aufgerufen, wenn sich die Auswahl ändert. An den Text des Elements kommst Du mit CTreeCtrl::GetItemText, dafür brauchst Du das HTREEITEM des Elements als Parameter. Das wird hier aber zum Glück mitgeliefert, in der NM_TREEVIEW-Struktur. Du musst also nur folgenden Code an der TODO-Stelle einfügen, und schon hast Du den Text in einem CString:
[CODE]CString strItemText = m_DeinTreeCtrl.GetItemText( pNMTreeView->itemNew.hItem );

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

Noch 'n Problem:

Wenn ich den Tree das erstemal aufbauen lasse, geht alles klar. Bei DeleteAllItems macht er keine Probleme.

Wenn ich aber den Tree ein zweites Mal aufbauen lasse, lösche ich den Inhalt der drin steht mit m_Tree.DeleteAllItems(). Dabei bekomme ich jetzt eine seltsame Fehlermeldung: MessageBox ohne Text! Was soll das? Die kommt bei jedem Item, das gelöscht wird. Danach habe ich zwar die neue Tree-Ansicht, aber wenn ich darin herum navigiere, kommt wieder diese Fehlermeldung.

PANIK! :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

oh cool muss ich kein neues aufmachen.

hab da auch mal ne frage. hab den namen vom item und brauch das handle hab aber keine funktion gefunden die das bewerkstelligen könnte. hab ich da was übersehen???

wenns nicht geht wie mach ich das am blödsten ohne dass ich mir jeden text geben lasse und dann die strings vergleiche?!?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit pCtrl baue ich meine Tree-Ansicht auf und lösche vorher den Inhalt mit der dritten Zeile.

Beim ersten Aufbau geht ja alles klar.

CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1);

ASSERT(pCtrl != NULL);

pCtrl->DeleteAllItems();

Den habe ich auch versucht, aber das war nichts. Egal wo ich den im Programm stehen hatte.

//m_Tree.DeleteAllItems();

Es klappt alles bis eben auf das Löschen. :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab das jetzt mal mit dem Debugger probiert. Wenn ich es beim Haltepunkt bei

pCtrl->SetFocus() weiterlaufen lasse, gibt er mir diese Fehlermeldung:

Nicht abgefangene Ausnahme in test2.exe (GDI32.DLL): 0xC0000005: Access Violation.

Nicht abgefangene Ausnahme in test2.exe (GDI32.DLL): 0xC0000005: Access Violation.

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Damit geht's:

void xKlasse::Suchen()

 {

  HTREEITEM such=m_Tree.GetRootItem(); //m_Tree - Control

  BOOL find=0;

  CString suchtxt;


  while(find!=1)

   {

    suchtxt=m_Tree.GetItemText(such);


    if(strcmp(suchtxt,Titel)==0) //Titel - global, aus Datei gelesen

     {

      m_Tree.SelectItem(such);


      find=1;

     }


    else

     {

      if(m_Tree.ItemHasChildren(such))

       {

        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);

   }

 }

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

So, bin mal wieder am verzweifeln. :confused:

Auf einigen Rechner funktioniert die Tree-Ansicht nicht richtig.

Mein Programm startet, der Dialog wird angezeigt und auch die Tree-Ansicht ist gefüllt und alles an seinem Platz.

Auf einigen Rechnern gibt es aber das Problem, dass man in der Tree-Ansicht nicht mit den Pfeiltasten navigieren kann, d.h. der blaue Balken ist nicht da.

Wenn ich aber mit der Maus auf ein Item klicke, ist alles ok. Das Item wird markiert und OnSelChange() arbeitet. Drücke ich nun wieder auf eine Pfeiltaste, ist wieder alles beim Alten.

Wo kann ich das Problem finden und beheben?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...