2008-10-02 11 views
3

Lorsque vous utilisez des infobulles pour afficher une description détaillée d'un TreeNode, l'info-bulle est dessinée au-dessus du noeud, comme s'il complétait le texte du noeud. En outre, si le texte est long, l'info-bulle est positionnée de sorte que le texte dépasse l'écran. Mais ce dont j'ai besoin, c'est de l'info-bulle à afficher juste en dessous du pointeur de la souris et pas au-dessus de TreeNode.Comment changer la position de ToolTip sur un TreeView?

Une idée de comment faire cela?


Show, ne dites pas:

Comment est-il:

how it is http://images6.theimagehosting.com/tooltip2.th.PNG

Comment je veux:

how I want http://images6.theimagehosting.com/tooltip3.th.PNG

Répondre

2

Vous devez définir une info-bulle et écrire un MouseOverEventHandler pour TreeVie w. Dans le MouseOverEventHandler calculer le nœud au-dessus duquel la souris est positionnée, puis afficher la description ToolTip. Assurez-vous également que vous ne définissez pas la description de l'infobulle plus d'une fois, sinon le comportement est plutôt moche.

Une meilleure façon est d'afficher la description dans le StatusStrip - en bas à gauche du formulaire.

Mise à jour:

OK, puisque vous avez clarifié votre question. Vous pouvez utiliser la méthode ToolTip.Show où vous pouvez spécifier les coordonnées:

public void Show(
    string text, 
    IWin32Window window, 
    int x, 
    int y, 
    int duration 
) 

De toute évidence, vous devrez ajouter décalage x et y.

+0

Pas vraiment ce que je veux. En fait, je le fais déjà (en définissant le texte de l'info-bulle sur MonseMove pour chaque nœud). Ce dont j'ai besoin, c'est d'empêcher l'affichage de la forme de l'info-bulle au sommet du nœud, comme s'il complétait le texte du nœud. – Jonas

7

Je n'ai pas trouvé la réponse que je cherchais, mais je l'ai fait fonctionner comme je le souhaitais.

Avant, je tentais de mettre en place l'info-bulle comme suit:

private void treeView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     TreeNode node = treeView1.GetNodeAt(e.X, e.Y); 
     if (node != null) 
     { 
       string text = GetNodeTooltip(node); 
       string currentText = toolTip1.GetToolTip(treeView1); 

       if (text.Equals(currentText) == false) 
       { 
        toolTip1.SetToolTip(treeView1, text); 
       } 
      } 
      else 
      { 
       toolTip1.SetToolTip(tree, string.Empty); 
      } 
     } 
     else 
     { 
      toolTip1.SetToolTip(tree, string.Empty); 
     } 
    } 

Maintenant, je viens de faire treeView1.ShowNodeToolTips=true et quand je crée chaque nœud, je mets juste sa valeur TreeNode.ToolTipText avec le texte de votre choix.

3
private ToolTip toolTipController = new ToolTip() { UseFading = false,UseAnimation = false}; 

protected override void OnMouseMove(MouseEventArgs e) 
{ 
    var node = GetNodeAt(e.X, e.Y); 
    if (node != null) 
    { 
     var text = node.Text; 

     if (!text.Equals(toolTipController.GetToolTip(this))) 
     { 
      toolTipController.Show(text, this, e.Location, 2000); 
     } 
    } 
    else 
    { 
     toolTipController.RemoveAll(); 
    } 
} 
Questions connexes