Inséré un élément au milieux d'une chaîne de caractères

[Résolu/Fermé]
Signaler
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
-
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
-
Bonjour à tous,

Voilà,je suis entrain de faire une petite application en VB.

Et j'utilise pour la première fois un contrôle de type "Tooltip" (un infobulle)

Ce que ce tooltip va afficher est enfaîte la description d'une action.Cette action peux varier, et que donc la description aussi. C'est pourquoi j'utilise une variable pour la définir.

Le problème c'est que comme le text d'explication est assez long cela créé une long ligne d'infobulle.

J'ai découvert que pour que l'infobulle ne soit pas autant grand et qu'il soit "multiligne" il faut utilisé un objet de ce type : environement.NewLine

Comme dans le code suivant :

Me.ToolTipProviderCtl.SetToolTip(Me.Button1, "this is" & environment.NewLine & _
    "a multiline" & environment.NewLine & "tooltip!")


Ma question : Est-ce que vous connaîtrez un moyen d'intégré ce code "environement.NewLine" dans ma chaîne de caractère ?

Ainsi mon info bulle apparaîtra en 3-4 lignes au lieu d'une très longues lignes.

Merci pour votre attention et vos réponses.

4 réponses

Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Bonjour,

Comme ceci:

  Dim texte As String
        texte = "this is" & Environment.NewLine & _
            "a multiline" & Environment.NewLine & _
            "tooltip!"
        Me.ToolTip1.ToolTipTitle = " Info"
        Me.ToolTip1.SetToolTip(Me.Button1, texte)

Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
54
Non tu n'as pas compris en très gros j'ai ça :)

Public str as String

Sub DefinirAction ()

str = "this is a multiline tooltip!"
End sub

Sub Definirtootip
Me.ToolTip1.ToolTipTitle = " Info"
Me.ToolTip1.SetToolTip(Me.Button1, str)
End sub



Donc comme ça pas de retour ligne.

Ce que j'aimerait c'est une méthode qui puisse me permettre d'ajouter un Environment.NewLine au milieu de la chaine. Par exemple, après 20 caractère, le prochain " " (espace) se transforme en Environment.NewLine.

Si non je serai obligé de le faire manuellement pour chaque action et tester à chaque fois si ça donne qqchose de stasifesant.

Après s'il y a pas d'autre moyen je ferai ça ^^
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Vois si cela te convient:

Mettre dans un Form : 1 button et 1 ToolTip

Voici le code:

Option Strict On
Imports System.Text.RegularExpressions
Public Class Form1
    'http://plasserre.developpez.com/cours/vb-net/?page=langage-vb2#LV-E-4-c
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim myValue As String
        Dim defaultValue As String
        defaultValue = "Si myLines() est un tableau de String, je veux ajouter ces lignes bout à bout en les séparant d'un retour à la ligne, On peut ajouter 2 paramètres permettant d'indiquer le nombre de ligne maximum et forcer l'élimination des lignes vides. "
        myValue = InputBox("Entrez le message que vous voulez afficher dans le ToolTip", "Afficher ToolTip", defaultValue, 100, 100)
        ' If user has clicked Cancel, set myValue to defaultValue 
        If myValue Is "" Then myValue = defaultValue
        ' On crée un Regex
        Dim R As New Regex("\s* \s*2")
        ' décomposition de ligne en champs
        Dim Nom As String() = R.Split(myValue)
        Dim myText As String = String.Join(ControlChars.CrLf, Nom)
        Me.ToolTip1.SetToolTip(Me.Button1, myText)
    End Sub
End Class


Je t'ai mis le site de manipulation des chaines de caractères
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Quelques explications:

Dans cet exemple c'est le 2 qui fait le retour à la ligne

Voici un autre exemple où j'ai placé _ pour chaque retour à la ligne:

 Dim myValue As String
        Dim defaultValue As String
        defaultValue = "Si myLines() est un tableau de String, je veux ajouter ces lignes bout à bout en les_ séparant d'un retour à la ligne. On peut ajouter 2 paramètres permettant d'indiquer_ le nombre de ligne maximum et forcer l'élimination des lignes vides. "
        myValue = InputBox("Entrez le message que vous voulez afficher dans le ToolTip", "Afficher ToolTip", defaultValue, 100, 100)
        ' If user has clicked Cancel, set myValue to defaultValue 
        If myValue Is "" Then myValue = defaultValue
        ' On crée un Regex
        Dim R As New Regex("\s*\s*_ ")
        ' décomposition de ligne en champs
        Dim Nom As String() = R.Split(myValue)
        Dim myText As String = String.Join(ControlChars.CrLf, Nom)
        Me.ToolTip1.SetToolTip(Me.Button1, myText)


Tu peux donc choisir ton retour à la ligne!
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
54
Ok Merci beaucoup :)

C'est super comme boulot et ça fonctionne bien :) encore merci.
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Bonjour skk201,

Ton post m'a donné l'idée de faire un snippet pour couper un texte tout les x mots ou mettre ce texte en x lignes automatiquement.

Si cela t'interesse:

https://codes-sources.commentcamarche.net/source/100708-couper-un-texte-tous-les-x-mots-les-x-caracteres-ou-en-x-lignes?utm_source=greenarrow&utm_campaign=&utm_medium=mail

Bonne programmation
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
54
Super c'est génial d'inspirer des gens comme toi.

J'y jetterai un oeil meme si la solution que tu m'as proposer convient très bien :)

Si tu veux amélioré ton code tu pourrai même imaginer un retour ligne après x caractères.

Donc si ça doit couper un mot en deux ça le switch de ligne ;)
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Pour la découpe tout les x caractères on en parle sur ce post:

https://forums.commentcamarche.net/forum/affich-30620530-decouper-une-chaine-de-caractere-tous-les-8-caracteres#p30636459

Mais je ne pense pas que cela soit possible, car si tu tombes sur un article le, la, un, etc., c'est très compliqué. après cela fait usine à gaz. Je pense qu'il faut coder le plus simplement possible. Car si on se replonge dans le code quelques années plus tard, je ne t'explique pas la galère!

@ + Le Pivert
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
54 >
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021

Super, je vais adapter ça a un tooltip.

Merci beaucoup ?
Messages postés
7569
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2021
664
Finalement ce n'était pas très compliqué pour faire un retour à la ligne après x caractères, sans couper de mot:

 'couper le texte tout les x caracteres
    Private Sub coupercaractere(ByVal chaine As String, ByVal x As Integer, ByVal text As TextBox)
        Dim a, i, countcaract As Integer
        countcaract = chaine.Length 'nombre de caracteres dans la chaine
        If x = 0 Or x > countcaract Then Exit Sub
        For i = x To chaine.Count - 1 Step x
            a = (InStr(i, chaine, " ")) 'chercher l'espace le plus près
            chaine = (chaine.Insert(a, "_ "))
        Next
        text.AppendText(chaine)
        afficher_texte()
    End Sub
    Private Sub afficher_texte()
        ' On crée un Regex
        Dim R As New Regex("\s*\s*_ ")
        ' décomposition de ligne en champs
        Dim Nom As String() = R.Split(TextBox1.Text)
        Dim myText As String = String.Join(ControlChars.CrLf, Nom)
        TextBox1.Text = myText
    End Sub


et pour appeler:

        coupercaractere(str, 50, TextBox1) 'mettre le texte sur x caracteres sans couper de mot (chaine, nbre caractères, TextBox)TextBox multiligne


Si cela peut être utile

Bon WE