Tabulation de texte dans RichTextBox

Résolu
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 - Modifié par ucfoutu le 16/08/2016 à 19:25
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 - 17 août 2016 à 18:22
Bonjour,
J'essaye en vain depuis un bout de temps de faire une sorte de tabulation dans un RichTextBox, mais je n'y arrive pas.

J'ai trouver la fonction String.Format({0,-3} {1,-25},str1,str2) qui est sensé aligner mon str1 à gauche dans un champ texte de 3 caractères puis mon str2 aussi à gauche mais dans une zone de 25 caractères.

Hélas je ne sais pas pourquoi mais quand je fais :

compteur = 3
string1() = {3,4,6}
string2() = {Bière,Pizza 4 fromages,Sandwich}
string3() = {6.30,40.90,18.62}
StringFinal = Nothing

For i as integer = 0 to compteur -1
StringFinal += VbCrlf & String.Format({0,-3} {1,-25} {2,10}, str1(i), str2(i), str3(i))
Next


Il m'affiche :
http://pastebin.com/RWXs2fbG
3   Bière                   6.30
4 Pizza 4 fromages 40.90
6 Sandwich 18.62

Au lieu de :
http://pastebin.com/fmcPfSuw
3   Bière                       6.30
4 Pizza 4 fromages 40.90
6 Sandwich 18.62



Je ne comprend pas pourquoi cela ne fonctionne pas, et je comptais sur vous pour m'éclairer.

Merci de votre réponse.

4 réponses

Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1
17 août 2016 à 13:53
Résolu par vb95 :

Bonjour Arnoid ainsi qu'à Ucfoutu

Le contrôle dans lequel s'affiche le texte doit avoir une Font proportionnelle, c'est-à-dire que les espaces doivent occuper autant de place qu'une lettre .
Essayes avec le Font "Consolas" dans la propriété Font du contrôle où le texte est affiché

Une Form, une TextBox multiligne avec sa propriété Font sur "Consolas" et le code suivant

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim string1() As String
        Dim string2() As String
        Dim string3() As String

        string1 = {"3", "4", "6"}
        string2 = {"Bière", "Pizza 4 fromages", "Sandwich"}
        string3 = {"6.3", "40.9", "18.62"}

        For i As Integer = 0 To 2
            TextBox1.Text += String.Format("{0,-3} {1,-25} {2,10}", string1(i), string2(i), string3(i)) & Environment.NewLine
        Next

    End Sub
End Class
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
16 août 2016 à 19:27
Bonjour,
J'ai :
1) mis ton code entre balises code
2) déplacé ta discussion vers le sous-forum (VB.Net) adéquat
3) ajouté des représentations graphiques de tes résultats pour éviter des va-et-viens entre tes deux liens.
Un VB.Nettiste devrait passer par là (je n'en suis pas un)
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1
16 août 2016 à 19:29
Bonsoir, ucfoutu

Merci d'avoir fait cela, je m'excuse de ne pas avoir choisi le bon sous-forum.
Bonne soirée
0
vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022 158 > Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016
Modifié par vb95 le 17/08/2016 à 13:42
Bonjour Arnoid ainsi qu'à Ucfoutu

Le contrôle dans lequel s'affiche le texte doit avoir une Font proportionnelle : c'est-à-dire que les espaces doivent occuper autant de place qu'une lettre .
Essayes avec le Font "Consolas" dans la propriété Font du contrôle où le texte est affiché

Une Form, une TextBox multiligne avec sa propriété Font sur "Consolas" et le code suivant

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim string1() As String
Dim string2() As String
Dim string3() As String

string1 = {"3", "4", "6"}
string2 = {"Bière", "Pizza 4 fromages", "Sandwich"}
string3 = {"6.3", "40.9", "18.62"}

For i As Integer = 0 To 2
TextBox1.Text += String.Format("{0,-3} {1,-25} {2,10}", string1(i), string2(i), string3(i)) & Environment.NewLine
Next

End Sub
End Class
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1 > vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022
17 août 2016 à 13:42
Bonjour vb95

Le texte est d'abord créer dans une simple string je doit donc déclarer une richtextbox par le code qui ne serait pas visible sur mon contrôle ?

Mais ensuite je met mon string dans une
RichTextBoxPrintCtrl 
Qui est un dériver de
richtextbox 
me permettant d'imprimer avec la mise en forme "facilement", et je n'arrive pas à changer sa police..

Merci votre réponse !
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1 > vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022
Modifié par Arnoid le 17/08/2016 à 13:48
D'accord je viens de voir la modification !

Merci beaucoup je test cela tout de suite !

Modif : Génial merci encore cela fonctionne parfaitement !
0
vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022 158 > Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016
17 août 2016 à 14:12
C'est parfait alors ! Bonne soirée
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1
17 août 2016 à 13:34
J'ai aussi découvert depuis peu la fonction
vbTab.PadRight(nbr)
qui aligne la chaîne soit à droite soit à gauche en rajoutant des espaces.

Mais toujours le même problème ..
0
vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022 158
Modifié par vb95 le 17/08/2016 à 14:08
Le problème vient du fait que la police de caractères utilisée n'est pas proportionnelle !
Que tu alignes avec String.Format ou PadRight ou PadLeft ou une fonction codée par toi-même le problème restera toujours !
Tu dois travailler avec une RichTextBox classique avec une Font proportionnelle puis ensuite pour imprimer envoyer le contenu de cette RichTextbox dans RichTextBoxPrintCtrl
0
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
17 août 2016 à 14:34
Bonjour,

Juste trop tard mais bon.

Si tu fais comme ceci, (c'est du c# mais facile a traduire) cela devrait fonctionner avec toutes les polices de caractères.

http://stackoverflow.com/questions/154204/modifying-default-tab-size-in-richtextbox

Je n'ai pas testé.

Bonne journée
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1 > cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017
17 août 2016 à 14:48
Bonjour cgandco

Merci de votre réponse, j'ai regarder cela pourrais m'aider pour la suite de mon programme, merci !

Bonne journée
0
vb95 Messages postés 3060 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 28 septembre 2022 158 > cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017
Modifié par vb95 le 17/08/2016 à 15:07
bonjour cgandco

Ton code en C# ne fait que poser des taquets de tabulation
Ce qui fait que les différents éléments seront tous alignés à gauche à partir du taquet : il n'est pas possible de faire de l'alignement à droite sauf si on utilise une police proportionnelle et que l'on calcule l'alignement pour chaque élément à droite ( soit le nombre d'espaces à inclure à gauche de l'élément)
De plus les offsets de tabulation sont exprimés en pixels
Beaucoup moins souple et performant que String.Format tel qu'utilisé plus haut

voir : https://msdn.microsoft.com/fr-fr/library/system.windows.forms.richtextbox.selectiontabs(v=vs.110).aspx
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
17 août 2016 à 14:49
Bonjour

Pourquoi ne pas utiliser un datagridview pour afficher les
donnnées sous forme de tableau et ensuite imprimer le datagridview.

http://vb.net-informations.com/datagridview/vb.net_datagridview_printing.htm
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1
Modifié par Arnoid le 17/08/2016 à 15:05
Bonjour,

Ce code imprime une sorte de photo du datagridview, moi je voudrais plutôt sous forme de texte basique.

Merci quand même.
Bonne journée
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56 > Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016
17 août 2016 à 15:45
Cela imprime ton dgv comme il est
fais un petit test
ajoute à ta form 3 controls
PrintDocument
PrintPreviewDialog
et un button

Button1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseClick

PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.WindowState = FormWindowState.Maximized

If PrintPreviewDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
PrintPreviewDialog1.Document.Print()
End If

End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim bm As New Bitmap(DataGridresult.Width, DataGridresult.Height)
DataGridresult.DrawToBitmap(bm, New Rectangle(0, 0, DataGridresult.Width, DataGridresult.Height))
e.Graphics.DrawImage(bm, 0, 0)
End Sub


ps DataGridresult c'est le nom de ta datagridview
0
Arnoid Messages postés 35 Date d'inscription mardi 17 février 2015 Statut Membre Dernière intervention 5 novembre 2016 1 > cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019
Modifié par Arnoid le 17/08/2016 à 16:02
Merci ShayW

J'avais déjà testé précédemment mais je doit rajouter une en tête centrer et cela ne m'arrange pas pour le datagridview.

Mon ticket :

https://1drv.ms/i/s!ArJuty0iDx8-jkJxaoQruFJtiKKE

Bonne journée !
0