33 ToolTipController
Th3maz1ng edited this page 2024-08-19 20:47:41 +00:00

ToolTipController

Retour

Comment utiliser le ToolTipController de DevExpress, c'est ce que nous allons voir ici

Introduction

Le ToolTipController est un contrôle permettant de gérer l'affichage des infobulles.
Il est déclenché par un passage de la souris sur d'autres éléments devexpress.

En voici un apperçu : ToolTip

Utilisation du ToolTipController avec un Ctrl_XtraGrid
  1. Partie Designer
  1. Déposez via le designer VisualStudio un ToolTipController
  2. Allez dans l'onglet des propriétés de votre Ctrl_XtraGrid afin d'assigner votre ToolTipController à la propriété ToolTipController.
    ToolTip
  1. Partie code
    L'étape précédente va permettre au ToolTipController de générer un événement lorsque la souris passera sur le Ctrl_XtraGrid.

Nous allons maintenant voir comment gérer cette événement afin de définir le texte à afficher dans l'infobulle :

    Private Sub ToolTip_GetActiveObjectInfo(sender As Object, e As ToolTipControllerGetActiveObjectInfoEventArgs) Handles ToolTipController1.GetActiveObjectInfo
        Dim info As ToolTipControlInfo = Nothing
        If e.SelectedControl Is Ctrl_XtraGrid1 Then
            Try
                'Les deux lignes qui suivent permettent de récupérer les informations qui sont dans la cellule sur laquelle en passe la souris
                Dim view As GridView = CType(Ctrl_XtraGrid1.GetViewAt(e.ControlMousePosition), GridView)
                Dim hi As GridHitInfo = view.CalcHitInfo(e.ControlMousePosition)
                'Permet de stocker le texte de l'infobulle
                Dim ToolTipText_l As String = String.Empty
                
                'On sort de la fonction si l'évennement est déclanché en dehors d'une cellule du tableau
                If Not hi.InRowCell Then Exit Sub

                Dim viewInfo_l As GridViewInfo = CType(GridView1.GetViewInfo, GridViewInfo)
                If hi.Column.FieldName.Split("_"c).Count = 2 Then
                    'On recupere la date et on l'affiche dans le tooltip
                    Dim objdp_l As ObjectifDateEffetDataPack = TryCast(GridView1.GetDataRow(hi.RowHandle).Item(hi.Column.FieldName), ObjectifDateEffetDataPack)
                    If objdp_l IsNot Nothing Then
                        ToolTipText_l = "Date d'effet : " + objdp_l.DateEffet.ToString("dd/MM/yyyy")
                    Else 'On la calcule :
                        Dim year_l As Integer = 0
                        If hi.Column.FieldName.Split("_"c)(0) = "AM1" Then
                            year_l = (Annee_c.AddYears(-1)).Year
                        ElseIf hi.Column.FieldName.Split("_"c)(0) = "A" Then
                            year_l = Annee_c.Year
                        ElseIf hi.Column.FieldName.Split("_"c)(0) = "AP1" Then
                            year_l = (Annee_c.AddYears(1)).Year
                        End If
                        Dim date_l As Date = Utils.GetWeekStartDate(hi.Column.FieldName.Split("_"c)(1), year_l)
                        ToolTipText_l = "Date d'effet : " + date_l.ToString("dd/MM/yyyy")
                    End If

                    Dim Position_l As Object = hi.HitTest.ToString() + hi.RowHandle.ToString()
                    info = New ToolTipControlInfo(Position_l, ToolTipText_l)
                ElseIf hi.Column.FieldName = "LIBELLE" Then
                    ToolTipText_l = If(GridView1.GetDataRow(hi.RowHandle).Item("DESCRIPTION").ToString = "", "Pas de description", GridView1.GetDataRow(hi.RowHandle).Item("DESCRIPTION").ToString)
                    'Pour finir, on définit le texte de l'infobulle
                    Dim Position_l As Object = hi.HitTest.ToString() + hi.RowHandle.ToString()
                    info = New ToolTipControlInfo(Position_l, ToolTipText_l)
                End If
            Catch ex As Exception

            Finally
                'Puis on affiche l'infobulle.
                e.Info = info
            End Try
        End If
    End Sub

Attention Vous ne pouvez pas afficher une infobulle sur un contrôle qui n'est pas actif (aka : Enabled = False), afin de contourner le problème, rendez le contrôle actif et mettez-le en lecture seule (Properties.ReadOnly = True).

AstuceAfin de vous aidez dans le processus de débogage, n'oubliez pas d'utiliser des points d'arrêt pour, par exemple, voir si l'événement est bien déclanché etc ...


Si vous avez des suggestions d'ajouts, de corrections, m'en faire part Merci

Dernière maj : 18/07/2019