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

Résolu/Fermé
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 15 août 2014 à 16:33
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 23 août 2014 à 12:10
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.
A voir également:

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
15 août 2014 à 17:35
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)

0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
15 août 2014 à 17:51
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 ^^
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
16 août 2014 à 09:04
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
16 août 2014 à 11:28
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!
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
18 août 2014 à 10:31
Ok Merci beaucoup :)

C'est super comme boulot et ça fonctionne bien :) encore merci.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 août 2014 à 14:55
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
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
21 août 2014 à 15:28
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 ;)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 août 2014 à 15:56
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
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
23 août 2014 à 12:10
Super, je vais adapter ça a un tooltip.

Merci beaucoup ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 août 2014 à 11:31
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
0