Exemple de code permettant la détection des mots à la position de la souris dans les contrôles "TextBox" ou "RichTextBox" vous pouvez l'utiliser par exemple pour afficher la définition du mot survolé par la souris, ou l'affichage d'un "tooltip" avec un contenu relatif au mot..
Vous pouvez associer la procédure de détection aux divers évènements relatif à la souris; sauf, pour raison d'inutilité, les évènements s'effectuant une seule fois par entrée dans la région du "textbox", à savoir: "MouseHover", "MouseEnter", "MouseCaptureChanged" et évidement "MouseLeave"
Il est pourtant possible de le modifier pour ne pas recevoir la position de la souris mais plutôt d'une ... (Votre imagination intervient ici).
Source / Exemple :
'/XDarwin Source/
'Subject : TextBox Control
'Title : Word@Mouse
'Description: Détection des mots dans un contrôle TextBox
'Notes :
'1)Ce code n'est pas très "optimisé" vous trouverer des corrections totalement empiriques sur les valeurs pas besoin de me les indiquer.
'2)Quand au temp processeur lorsqu'on utilise l'évenement MouseMove, Un ptit delay entre deux detections successives le soulagera suffisament.
'3)Les fonctions utilisés pour la detection sont prise en charge par les contrôles RichTextBox, vous pouvez donc utiliser cette méthode pour ces
'derniers
'/Enjoy/
Public Class Form1
#Region "Initialisation"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MousePosCorrection = IIf((TextBox1.BorderStyle = BorderStyle.Fixed3D), New Point(2, 2), New Point(0, 0)) + TextBox1.Location
End Sub
#End Region ' Initialisation........
'====================================================================================================================
#Region "Variables utilisées"
''' <summary>
'''Variable utilisée pour enregistrer des résultats intermédiaires.
'''(le resultat de la derniere fonction appelée parmis GetWordStart et GetWordLength)
''' </summary>
''' <remarks></remarks>
Private TempIndex As Integer
''' <summary>
'''MousePosCorrection: La correction de la valeur MousePosition sur TextBox1 Selon le style de bordure de ce dernier.
''' </summary>
''' <remarks></remarks>
Private MousePosCorrection As Point
Private Word As String
#End Region ' Variables utilisées...
'====================================================================================================================
#Region "Méthode Appellante"
' J'ai choisis d'appeller le traitement par l'évennement MouseMove, mais il est possible de le faire autrement..
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If TextBox1.Text <> Nothing Then
'Décommentez l'instruction suivante si vous voulez que le mot soit séléctionné
'Me.TextBox1.Select(GetWordStart, GetWordLength) : GoTo 0 'L'instruction suivante sera ignoré si celle là est décommentée
Word = TextBox1.Text.Substring(GetWordStart, GetWordLength) : GoTo 1
0: Word = TextBox1.SelectedText
1: text6.Text = Word
End If
End Sub
#End Region ' Méthode Appellante....
'====================================================================================================================
#Region "Fonctions De Sélection"
''' <summary>
''' GetWordStart: Retourne l'index du premier caractere (char) du mot le plus proche de la souris
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function GetWordStart() As Integer
'La Premiere étape consiste à detecter l'index du caractere le plus proche de la souris dans le textbox :
'=============================================================================================================
Dim ClosestCharIndex As Integer
ClosestCharIndex = TextBox1.GetCharIndexFromPosition(PointToClient(MousePosition) - MousePosCorrection)
''Cette opération est effectué par la fonction "GetCharIndexFromPosition(pt as Drawing.point)"
''On affecte au parametre "pt" de cette fonction la valeur: PointToClient(MousePosition) - MousePosCorrection
''Où PointToClient(MousePosition) retourne la position de la souris relativement à notre Formulaire : "Form1"
''MousePosCorrection Corrige cette valeur selon La Position du TextBox et son style de bordure (Fixed3D:2pix)
text1.Text = ClosestCharIndex 'Affiche l'index du caractere le plus proche de la souris
text2.Text = "''" & TextBox1.Text(ClosestCharIndex) & "''" 'Affiche ce caractere
'-------------------------------------------------------------------------------------------------------------
'2ème Etape: Rechercher le début du mot le plus proche:
'=============================================================================================================
'Il s'agit de faire décrémenter l'indice trouver tant que le caractere à la nouvelle valeur de cet indice est
'une lettre sinon arreter la décrémentation; la derniere valeur trouvée sera nécéssairement le début du mot.
While ClosestCharIndex > 0 And Char.IsLetter(TextBox1.Text(ClosestCharIndex))
ClosestCharIndex -= 1
End While
'Petite correction de la valeur si le début du mot n'est pas le premier caractere du text box:
If ClosestCharIndex > 0 And ClosestCharIndex < TextBox1.TextLength Then
ClosestCharIndex += 1
End If
'Enregistrement de la valeur trouvée:
TempIndex = ClosestCharIndex
'--------------------------------------------------------------------------------------------------------------
text3.Text = TempIndex
If ClosestCharIndex < TextBox1.TextLength Then
text4.Text = "''" & TextBox1.Text(TempIndex) & "''"
Else
text4.Text = "Rien à cette position."
End If
'Retourner le résultat:
'======================
Return TempIndex
'----------------------
End Function
''' <summary>
''' GetWordLength: Retourne la longueur du mot commensant par l'index trouvé dans "GetWordStart".
''' (À l'éxécution de "GetWordStart" le résultat de cette derniere est conservé dans "TempIndex"
''' jusqu'à l'appel de la fonction actuelle)
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function GetWordLength()
'On a toujours besoin de TempIndex pour calculer la longueur du mot.
Dim i As Int32 = TempIndex
'Là il s'agit d'incrémenter l'index tant que le caractere à la nouvelle valeur est une lettre
'et qu'on a pas atteind la fin de la chaine TextBox.Text
If i < TextBox1.Text.Length Then
While i < TextBox1.Text.Length - 1 And Char.IsLetter(TextBox1.Text(i))
i += 1
End While
End If
'Calculer la longueur du mot
TempIndex = i - TempIndex
If i = TextBox1.TextLength - 1 Then
If Char.IsLetter(TextBox1.Text(i)) Then
TempIndex += 1
End If
End If
text5.Text = TempIndex
Return TempIndex
End Function
#End Region 'Fonctions De Sélection
End Class
Conclusion :
Voilà, j'espère que ça va vous être utile.
J'apprécierai vos commentaires..
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.