2017-04-05 5 views
1

J'écris un code qui met en évidence les mots en double dans un texte. Le code fonctionne bien lorsque j'ajoute un bouton et l'utilisateur doit appuyer sur le bouton pour vérifier les doublons. Mais je veux faire un code de vérification automatique. J'ai mis mon code dans un sous-programme Handles RichTextBox.TextChanged. Le problème est que le code sélectionne le mot cible et le met en surbrillance, mais la sélection reste ainsi lorsqu'une nouvelle lettre est tapée, cela permet de voir clairement ce qui a été mis en surbrillance.Mettez en surbrillance un texte spécifique pendant que l'utilisateur tape

aidez-moi s'il vous plaît.

voici mon code:

Private Sub RichTextBox_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox.TextChanged 
     Try 

     Call duplicate_check() 

    Catch ex As Exception 
     MessageBox.Show("error in RichTextBox.TextChanged") 
    End Try 
End Sub 

fonction de contrôle en double:

Private Sub duplicate_check() 
     Try 
      ' read line by line and get input 
      Dim LineByLineInput() As String = RichTextBox.Lines 
      Dim selectionStart, selectionLength As Integer 
      Dim i, j As Integer 

      For lineNumber = 0 To UBound(LineByLineInput) 
       selectionStart = 0 
       selectionLength = 0 
       'get index of first char index in the current line 
       Dim count As Integer = lineNumber 
       While count <> 0 
        selectionStart += RichTextBox.Lines(count - 1).Length + 1 
        count -= 1 
       End While 
       ' get line as string 
       Dim line As String = RichTextBox.Lines(lineNumber) 
       ' split line into array of strings 
       Dim input() As String = line.Split(" ") 
       'check for duplicates 
       i = 0 
       For j = i + 1 To UBound(input) 

        If input(i) = input(j) Then 'compare each 2 consecutive words if they are the same 
         selectionStart += input(i).Length + 1 
         selectionLength = input(i).Length 
         RichTextBox.SelectionStart = selectionStart 
         RichTextBox.SelectionLength = selectionLength 
         RichTextBox.SelectionBackColor = Color.Yellow 

        Else 
         selectionStart += input(i).Length + 1 
        End If 
        i += 1 
       Next 
      Next 
     Catch ex As Exception 
      MessageBox.Show("error duplicate_check()") 
     End Try 

    End Sub 
+0

Pourquoi le double doivent rester sélectionné? Et s'il y avait plusieurs doublons? Mettez le texte en surbrillance et laissez-le continuer à taper sans interférer. –

+0

@AFriend Comment désélectionner le texte après l'avoir mis en surbrillance? –

+0

Jetez un oeil à [ce lien] (http://stackoverflow.com/a/13220947/6144259) –

Répondre

1

Après votre appel duplicate_check, avez-vous essayé de régler la sélection du RichTextBox à la position ancienne?

Voir ci-dessous:

Private Sub RichTextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles RichTextBox1.TextChanged 
     Try 
      ' Get current position 
      Dim cur_pos As Integer = Me.RichTextBox.SelectionStart 
      Call duplicate_check() 
      ' Set back to old position 
      Me.RichTextBox.SelectionStart = cur_pos 
      ' Unselect what your sub duplicate_check has selected 
      Me.RichTextBox1.SelectionLength = 0 

     Catch ex As Exception 
      MessageBox.Show("error in RichTextBox.TextChanged") 
     End Try 
    End Sub 

Si cette solution est bon pour vous, vous devriez changer votre duplicate_check Sub pour faire ce changement et non dans le RichTextBox1_TextChanged Sous

+0

oui il fait un autre problème, si l'utilisateur déplacé le curseur à l'emplacement spécifique (pour éditer le texte ou le s.th) le curseur ira de nouveau à la fin du programme .. N'importe quelle personne m'aide –

+0

J'ai édité ma réponse pour adresser ce problème – chateaur