Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo halli!

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

Und vielleicht kann mir jemand mit der CD-ROM-Kontrolle helfen?! (siehe Laufwerke und ihre Buchstaben)

Geschrieben
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?
Geschrieben

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?

Geschrieben

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

  • 3 Wochen später...
Geschrieben

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:

Geschrieben

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?!?!

Geschrieben
Originally posted by [camper]cleo

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

Ohne das wird's nicht gehen. Ich würde eine rekursive Funktion empfehlen.
Geschrieben

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

Geschrieben
Originally posted by Narf!

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

Nochmal:

Hast Du eine Nachrichtenbehandlungsfunktion für TVN_DELETEITEM erstellt? Wenn ja, was steht drin?

Der MessageMap-Eintrag sollte in etwa so aussehen:

ON_NOTIFY(TVN_DELETEITEM, IDC_TREE1, OnDeleteitemTree)

Geschrieben

komisch bei mir klappts so hast du vielleicht ne messagebox irgendwann mal eingebaut???

hab gerade mal die OnDeleteItem.... überschrieben und reindebuggt. so wie ich das sehe wird diese funktion bei jedem item aufgerufen.

Geschrieben

@Klotzkopp: Keinen Handler benutzt.

@cleo:wird auch bei jedem Item aufgerufen, aber nur bei den nichtmarkierten und ab dem ersten markierten bei jedem nachfolgendem tritt der Fehler auf

Geschrieben

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:

  • 1 Monat später...
Geschrieben

Ich muss mal wieder was hierzu fragen:

Ich lese aus einer Datei einen String aus, den möchte ich in der Treeansicht suchen und markieren, kann sich auch in einer nächsten Ebene befinden.

Wie?

Geschrieben

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

   }

 }

  • 4 Wochen später...
Geschrieben

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?

Geschrieben

Ich habe mir heute mit Depends die dll's anzeigen lassen und auf den Rechnern gesucht und gefunden, daran liegt es also nicht.

Kann es vielleicht am Chipsatz auf dem Board liegen?

Brauche dringend Hilfe!

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