none
Sélection avec RichTextBox RRS feed

  • Question

  • Salut !

    Quand on sélectionne du texte dans un TextBox, il sélectionne bien correctement le texte depuis le point de départ jusqu'au point où l'on relâche le bouton.

    Avec RichTextBox, la sélection est merdique. Il faut le dire. Si on a le texte "254[12][36]" et que l'on veut sélectionner "[36]" et bien RichTextBox sélectionne "][36]". Pourquoi ?

    Idem pour "Le chat mange la souris." si l'on veut sélectionne "Le chat mange la souris" (sans le point) et bien on ne peut pas. RichTextBox sélectionne le point aussi.

    Donc comment supprimer cet autosélection merdique qui est tout sauf intelligente ? Merci

    samedi 17 janvier 2015 09:41

Réponses

  • Eurêka !

    Il ne suffisait pas simplement de mettre la classe mais de remplacer le RichTextBox par le nouveau après l'avoir exécuter en mode debug.

    Un grand merci ! Donc pour ceux qui veulent voici comment faire :

    1. Ajouter une nouvelle classe (nommée ClassRTB) et copier ce qui suit :

    	Inherits RichTextBox
    	Protected Overrides Sub OnHandleCreated(e As EventArgs)
    		MyBase.OnHandleCreated(e)
    		If Not MyBase.AutoWordSelection Then
    			MyBase.AutoWordSelection = True
    			MyBase.AutoWordSelection = False
    		End If
    	End Sub
    

    2. Exécuter le programme et fermer.

    3. Dans la boîte à outils de la Form (tout en haut), il y a un nouveau objet qui s'appelle ClassRTB.

    4. Supprimer le RichTextBox ancien (s'il y en a un) et mettez ce nouveau RichTextBox.

    Encore merci pour cette astuce.

    • Marqué comme réponse Michel56100 lundi 19 janvier 2015 11:27
    lundi 19 janvier 2015 11:27

Toutes les réponses

  • Bonjour, MicSoft,

    Cela est lié à la propriété AutoWordSelection. Est-ce qu'il y a un changement, si vous la définissez à false?

    Vous pouvez consultez: RichTextBox.AutoWordSelection, propriété

    Cordialement,
    Dimitar


    dimanche 18 janvier 2015 09:40
    Modérateur
  • Bonjour,

    la valeur est bien à False car je l'avais vu ça. Mais, c'est vrai qu'il y a un changement. Toutefois, cela n'empêche pas RichTextBox de sélectionné à sa manière. Faites le teste que j'ai un vous verrez que même cette propriété à False, le problème est là.

    A bientôt

    dimanche 18 janvier 2015 12:16
  • Oops pas très clair : Faites le teste que j'ai mis vous verrez...
    dimanche 18 janvier 2015 12:18
  • Bonjour MicSoft,

    Vous pouvez essayer avec la méthode suivante: RichTextBox.AutoWordSelection broken? (surtout si vous utilisez .NET 3.5)

    Cordialement,
    Dimitar


    dimanche 18 janvier 2015 14:07
    Modérateur
  • Bonjour !

    Merci pour ce lien qui m'a aidé. En fait, J'avais mis l'AutoWordSelection à False dans l’événement Me.Onload seulement. J'en ai mis un autre dans l’événement RichTextBox1.Click et du coup ça marche bien maintenant.

    Merci !

    • Marqué comme réponse Michel56100 dimanche 18 janvier 2015 14:21
    • Non marqué comme réponse Michel56100 dimanche 18 janvier 2015 14:29
    dimanche 18 janvier 2015 14:20
  • Re !

    J'ai parlé trop vite. En fait, ça ne marche qu'une fois sur deux. Même dans l’évènement MouseDown, c'est pire.

    Oui je suis avec .Net 3.5 car c'est vb 2008.

    dimanche 18 janvier 2015 14:29
  • Bonjour MicSoft,

    Tout en bas de l’article en anglais RichTextBox.AutoWordSelection Property (.NET 3.5) , il y a deux solutions de ce problème (Community Additions). Autant que je voie, vous en avez essayé la première. La deuxième utilise l’héritage de classes. Le code est en C# et voici le résultat d’une conversion automatique:

    Public Class FixedRichTextBox
    	Inherits RichTextBox
    	Protected Overrides Sub OnHandleCreated(e As EventArgs)
    		MyBase.OnHandleCreated(e)
    		If Not MyBase.AutoWordSelection Then
    			MyBase.AutoWordSelection = True
    			MyBase.AutoWordSelection = False
    		End If
    	End Sub
    End Class

    J’espère qu’il n’y a pas d'erreur de conversion et que cela vous aidera.

    Cordialement,
    Dimitar


    lundi 19 janvier 2015 07:34
    Modérateur
  • Bonjour et merci.

    Hélas, cela ne fait rien. J'ai mis le copier/coller de votre classe à la suite de la classe Form1 mais cela ne marche pas. J'ai fait "ajouter une classe" puis j'ai collé le texte (sans rien d'autre dans ce fichier) mais rien à faire.

    Si je la met avant la classe Form1 j'ai ce message d'erreur : Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre. Assurez-vous que "ScriptEdit.Form1.resources" a été correctement incorporé ou lié dans l'assembly "ScriptEdit" au moment de la compilation ou que tous les assemblys satellites requis sont chargeables et complètement signés.

    Ce que je ne comprends pas, c'est que l'AutoWordSelection est à False par défaut dans RichTextBox.
    lundi 19 janvier 2015 10:15
  • Bonjour, MicSoft,

    Vous devez la mettre à la suite de la classe Form1. Ensuite, avez-vous instancié un objet de la classe FixedRichTextBox dans le fichier Form1.Designer.vb?

            Me.RichTextBox1 = New FixedRichTextBox() 'au lieu de Me.RichTextBox1 = New System.Windows.Forms.RichTextBox()

    Cordialement,
    Dimitar

    lundi 19 janvier 2015 11:26
    Modérateur
  • Eurêka !

    Il ne suffisait pas simplement de mettre la classe mais de remplacer le RichTextBox par le nouveau après l'avoir exécuter en mode debug.

    Un grand merci ! Donc pour ceux qui veulent voici comment faire :

    1. Ajouter une nouvelle classe (nommée ClassRTB) et copier ce qui suit :

    	Inherits RichTextBox
    	Protected Overrides Sub OnHandleCreated(e As EventArgs)
    		MyBase.OnHandleCreated(e)
    		If Not MyBase.AutoWordSelection Then
    			MyBase.AutoWordSelection = True
    			MyBase.AutoWordSelection = False
    		End If
    	End Sub
    

    2. Exécuter le programme et fermer.

    3. Dans la boîte à outils de la Form (tout en haut), il y a un nouveau objet qui s'appelle ClassRTB.

    4. Supprimer le RichTextBox ancien (s'il y en a un) et mettez ce nouveau RichTextBox.

    Encore merci pour cette astuce.

    • Marqué comme réponse Michel56100 lundi 19 janvier 2015 11:27
    lundi 19 janvier 2015 11:27
  • Bonjour, MicSoft,

    Oui, on peut y parvenir par la boîte à outils mais aussi en modifiant l’instanciation dans le fichier Form1.Designer.vb, comme je viens de vous conseiller.

    Cordialement,
    Dimitar



    lundi 19 janvier 2015 11:33
    Modérateur
  • Ah je ne vois pas là. Ca veut dire quoi instancier ?Mais comme ça marche ainsi, je vais laisser. Merci
    lundi 19 janvier 2015 11:47
  • Dans le dossier de votre projet, il y a le fichier Form1.Designer.vb. Là, vous pouvez trouver la ligne Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() (après avoir ajouté un RichTextBox) que vous pouvez changer en Me.RichTextBox1 = New FixedRichTextBox() (après avoir déclaré votre classe dérivée). Cela doit avoir le même effet.

    Si une réponse vous a aidé, vous pouvez la marquer comme réponse.

    Cordialement,
    Dimitar

    lundi 19 janvier 2015 11:55
    Modérateur
  • Ah ok ! Merci
    lundi 19 janvier 2015 12:20