[VC++ 2005] TreeView -> Unterscheidung Node / Expander

the incredible Leitman

Erfahrenes Mitglied
Hallo liebe Tutorial user ^^


Vielleicht eine kleine Einleitung:
Ein TreeView hat soweit ich weiß eine Collection von TreeNodes.
Je eine Node besteht dabei aus grafischer Sicht aus einem [+] Kästchen, das für den Expand zuständig ist und aus einem Text, eventuell auch noch ein Bild zwischen den beiden.


Ich habe nun ein Programm, in dem ich auch der linken Seite eine TreeView für die Übersicht verwende und rechts davon eine Reihe von Controls für die Detailansicht der atkuell selektierten Node.

atm handle ich das ganze folgendermaßen:
Ich reagiere auf das "NodeMouseClick" Event und hole mir dann aus dem Event die akuelle node (e->Node).
Mit den Informationen des in der node enthaltenen Tags (node->Tag) baue ich mir dann meine Detailansicht auf.

Da ich jedoch nur auf MouseClick Events reagiere, geschieht das natürlich auch, wenn man nur auf das [+] clickt -.-
Genau die möchte ich gerne verhindern.


Also, was ich gerne hätte wäre, das bei Click auf das [+] lediglich die TreeView an dem selektierten Punkt expanded wird, bei Click auf den Text (oder das Bild) jedoch oben genannter Code ausgeführt wird.

Existiert da irgendeine Methode mit der ich das unterscheiden kann?
Oder hat jemand eventuell andere Anregungen für mich?


Hoffe auf Hilfestellung,
vielen Dank und mfG

euer incredible Leitman
 
Hi

Spricht was gegen die Events BeforeSelect bzw. AfterSelect um auf die Auswahl zu reagieren?

Wenn nein solltest du die auch nehmen! ;)
 
ah, du meinst wegen der TreeViewAction Enumeration?
hm... dann könnt ich im Falle von Expand / Colapse einfach die View aufklappen und ansonsten mein Gui befüllen...
oder wie meinst du?

Klingt schon einmal gut ^^
Hab leider atm keine Entwicklungsumgebung zur Hand, werd das aber morgen mal probieren... wollte ohnehin vom Click-Handling wegkommen,
das scheint mir manchmal nicht korrekt zu funktionieren -.-


Danke erstmal,
werd das auf die Weise probieren und wenns funktioniert den Thread erledigen sowie dich rep-plusen xD :)
 
TreeViewAction Enumeration? :confused:

Nein, ich meinte die Event BeforeSelect und AfterSelect. Mit denen kannst du genau das abbilden, was du willst.
 
Hey Nico :D

Sorry, dass ich mich erst jetzt wieder melde, mir ist etwas dazwischengekommen :-(

Hm... ich versteh nicht genau, wie mir das weiterhelfen soll?
Egal ob ich den Text der Node oder das Kästchen zum aufklappen anklicke,
in beiden Fällen wird BeforeSelect, Click und AfterSelect ausgelöst :confused:

Vl habe ich mich unklar ausgedrückt, aber was ich realisieren möchte ist eine unterschiedliche Behandlung der selektierten Node, abhängig davon welcher Bereich angeklickt wurde.

Kannst du mir das vl PseudoCode technisch näher bringen oder kurz noch erläutern, wie du meinst, dass ich Before- und AfterSelect verwenden kann um mein Problem zu lösen?

Was die M$DN dazu sagt:
C++:
private:
   // Handle the After_Select event.
   void TreeView1_AfterSelect( System::Object^ /*sender*/, System::Windows::Forms::TreeViewEventArgs^ e )
   {

      // Vary the response depending on which TreeViewAction
      // triggered the event. 
      switch ( (e->Action) )
      {
         case TreeViewAction::ByKeyboard:
            MessageBox::Show( "You like the keyboard!" );
            break;

         case TreeViewAction::ByMouse:
            MessageBox::Show( "You like the mouse!" );
            break;
      }
   }
 

Neue Beiträge

Zurück