FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireIntéraction du C++/CLI avec le framework .NetWinFormsTreeView

Utilisons un TreeView appelé ici "TreeView1" possédant nécessairement dans ce cas de figure une ImageList pour sa collection de TreeNode.
La capture de l'événement Click se fait ici par la méthode TreeView->MouseDown afin de récupérer les coordonnées du pointeur de la souris.
La méthode ci-dessous GetNodeIconeRectangle permet de calculer le Rectangle de l'icone du TreeNode sélectionné. Il ne reste plus alors qu'à vérifier si le Point localisé du pointeur de la souris appartient à l'icone du TreeNode sélectionné.

 
Sélectionnez

private: System::Void treeView1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
{
	Point p(e->X, e->Y);
	TreeNode ^selectedTreeNode = this->treeView1->GetNodeAt(p);
	Rectangle ^imgRectangle;
	if (selectedTreeNode !=nullptr)
	{
		imgRectangle = GetNodeIconeRectangle(selectedTreeNode);
		if (imgRectangle->Contains(p))
		{
			//traitement
		}
	}
}
private : Rectangle ^GetNodeIconeRectangle(TreeNode ^node)
{
	System::Drawing::Size^ s = node->TreeView->ImageList->ImageSize;
	int h = node->TreeView->ItemHeight;
	Rectangle ^r = node->Bounds;
	int x = r->X - s->Width;
	int y = r->Y + ((h - s->Height)/2);
	Point p(x,y);
	return gcnew Rectangle(p, *s);
}				
				
Créé le 9 mai 2006  par nico-pyright(c), neguib

Ce code permet de charger l'arborescence du disque dur C:\ dans un TreeView de la même façon que l'Explorateur Windows.
Ce code nécessite un contrôle TreeView nommé TV et un Button nommé BTN.

 
Sélectionnez

private: System::Void BTN_Click(System::Object^  sender, System::EventArgs^  e) 
{
    TV->Nodes->Add("C:\\");
    this->Explorer(TV->Nodes[0]);    
}
 
private: void Explorer(TreeNode^ node)
{
    try
    {
        node->Nodes->Clear();
        for each(String^ s in Directory::GetDirectories(node->FullPath))
        {
            node->Nodes->Add(Path::GetFileName(s));
        }
    }
    catch(Exception ^) {}
}
 
private: System::Void TV_AfterExpand(System::Object^  sender, System::Windows::Forms::TreeViewEventArgs^  e) 
{
    for each(TreeNode^ tn in e->Node->Nodes)
        this->Explorer(tn);
}				
				
Créé le 9 mai 2006  par HULK, neguib

Il faut pour cela traiter l'évènement MouseMove du TreeView :

 
Sélectionnez

      /// <summary>
      /// Evènement MouseMove du treeView1
      /// </summary>
	private: System::Void treeView1_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
	{
		// Récupération du TreeNode survolé
		TreeNode ^currentNode = treeView1->GetNodeAt(e->X, e->Y);
		// Vérification que la souris survole bien un TreeNode
		if (currentNode != nullptr)
			textBox1->Text = "Le node survolé est " + currentNode->Name;
	}
      
Créé le 27 mars 2007  par Jérôme Lambert
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.