Soyez le premier à donner votre avis sur cette source.
Vue 8 294 fois - Téléchargée 678 fois
'/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
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.