ShapeContainer et ToolTip, un mauvais couple ?
Bonjour,
Sous VB 2008 Express, le but est de relier des étiquettes (labels) par des lignes (créer un organigramme)
Contrainte 1 : Les lignes ne peuvent apparaître SUR une étiquette
Contrainte 2 : Une infobulle doit apparaître lorsque la souris survole une étiquette
NB : Les étiquettes (labels) sont si nombreuses qu'elles ne peuvent être toutes visibles à l'écran. La feuille (form) contient donc le composant ToolTip, deux ascenseurs (un HScroll et un VScroll) ainsi que deux conteneurs (Panel_liens et Panel_labels).
Ces panels sont plus grands que la taille de l'écran. Les Scroll permettent de voir une partie des Panels. Ces panels ont la même origine et les mêmes dimensions, ils sont donc superposées. Ces panels agissent donc comme des calques. Sur le premier calque sont placés les lignes (liens). Sur le second calque (qui superpose le premier) sont placés les étiquettes. Comme les étiquettes sont placées sur le second calque (ayant son Backcolor = transparent), les lignes n'apparaissent pas sur l'étiquette.
Les données (contenu Text des labels, contenu Tooltip des labels, position des labels, les X1,Y1,X2,Y2 des lignes) sont stockées dans une base de données. Si une étiquette est déplacée via la souris, les liens suivent et les nouvelles positions sont enregistrées. Tout baigne !
Le hic, c'est l'infobulle !
Une fois, les liens placés, il m'est impossible de voir le contenu d'une infobulle. Si les infobulles apparaissent, ce sont les liens qui n'apparaissent plus ....
Les lignes sont des Microsoft.VisualBasic.PowerPacks.LineShape (la version antérieure était écrite en VB6 et utilisait le contrôle line )
Je crois que c'est le Microsoft.VisualBasic.PowerPacks.ShapeContainer qui empêche aux infobulles d'apparaître ... Le code ci-dessous met en évidence mon problème.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
Public Class Form1
' Le projet fait référence à Microsoft.VisualBasic.PowerPacks.VS.dll
Private ligne As Microsoft.VisualBasic.PowerPacks.LineShape
Private canvas As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
Private Panel_liens As Panel
Private panel_labels As Panel
Private etiquette As Label
Private infobulle As ToolTip
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
infobulle = New ToolTip
Panel_liens = New Panel
With Panel_liens
.Left = 50 : .Top = 50 : .Height = 250 : .Width = 250
.Parent = Me
.BackColor = Color.Aquamarine ' pour distinguer le Panel de la Form
End With
canvas.Parent = Panel_liens ' empêche l'affichage des info-bulles ...
' sauf si la ligne ci-dessus est commentée, mais alors c'est la ligne qui n'apparaît plus ...
' panel qui est "sur" le Panel_liens, avec les mêmes dimensions et transparent
panel_labels = New Panel
With Panel_labels
.Location = Panel_liens.Location
.Size = Panel_liens.Size
.BackColor = Color.Transparent
.Parent = Panel_liens
End With
Call afficher() ' affiche une étiquette et un lien
End Sub
Private Sub afficher()
' ajoute une étiquette
etiquette = New Label
With etiquette
.Text = "contenu étiquette"
.Left = 50 : .Top = 50 : .Height = 18 : Width = 100
.Visible = True
End With
infobulle.SetToolTip(etiquette, "contenu infobulle")
panel_labels.Controls.Add(etiquette)
' ajoute une ligne (qui passe sous l'étiquette)
ligne = New Microsoft.VisualBasic.PowerPacks.LineShape
With ligne ' ligne verticale
.X1 = 150 : .Y1 = 0 : .X2 = 150 : .Y2 = 300
.Visible = True
.Parent = canvas
End With
End Sub
End Class |
Pour voir le problème, disparition de l'infobulle ou de la ligne, il suffit de commenter ou décommenter une seule ligne. Celle qui commence par "canvas.Parent = ..." dans le Form1_Load
D'avance merci pour vos suggestions.