Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
Modifié par Karin.code le 11/10/2016 à 09:36
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 2018
-
14 oct. 2016 à 12:13
Bonjour ou Bonsoir,
en créant le code suivante je voulais remplir une ListView non d'une façon verticale mais d'une façon horizontale comme le montre l'image suivante :
j'avais beau chercher je n'ai rien pu trouver, alors j'ai décidé de créer mon propre code
je rempli la Textbox1 avec une valeur, je clique sur le bouton "Remplir"
dans la ListView une 1er colonne est crée et rempli par la valeur de la Textbox1
je rempli la Textbox1 avec une nouvelle valeur et je clique sur le bouton "Remplir"
dans la ListView une 2ème colonne est crée et rempli par la nouvelle valeur de la Textbox1
ainsi de suite :
voici le code
Dim i As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.View = View.Details If i = 0 Then ListView1.Items.Add("") ListView1.Columns.Add("Valeur " & 0, 75, HorizontalAlignment.Left) ListView1.Items(0).SubItems.Add(TextBox1.Text) ElseIf i > 0 Then ListView1.Width = ListView1.Width + 75 ListView1.Columns.Add("Valeur " & i, 75, HorizontalAlignment.Left) ListView1.Items(0).SubItems.Add(TextBox1.Text) End If TextBox1.Clear() i = i + 1 End Sub
mais le problème est que quand je clique sur le bouton "Remplir" la colonne est crée mais elle sera vide même si la Textbox1 n'est pas vide
quand je rempli la Textbox1 avec une nouvelle valeur et je clique sur le bouton "Remplir" une nouvelle colonne est crée mais elle n'est pas rempli avec la nouvelle valeur de la Textbox1 mais avec l'ancien valeur, même chose pour tous les autres colonnes
aidez-moi s'il vous plaît
Merci pour votre future aide
Bonjour,
Après quelque essais j'ai finis par trouver une solution plutôt satisfaisante, voici le code :
Dim i As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.View = View.Details If i = 0 Then ListView1.Columns.Add("Valeur " & 0, 0, HorizontalAlignment.Center) ListView1.Items.Add("") ListView1.Width = ListView1.Width + 75 ListView1.Columns.Add("Valeur " & 1, 75, HorizontalAlignment.Center) ListView1.Items(0).SubItems.Add(TextBox1.Text) ElseIf i > 0 Then ListView1.Width = ListView1.Width + 75 ListView1.Columns.Add("Valeur " & i + 1, 75, HorizontalAlignment.Center) ListView1.Items(0).SubItems.Add(TextBox1.Text) End If TextBox1.Clear() TextBox1.Focus() i = i + 1 End Sub
et pour éviter l'alignement à gauche par défaut de la première colonne j'ai ajouté cette partie :
kikou93
Messages postés417Date d'inscriptionmardi 4 février 2014StatutMembreDernière intervention24 septembre 20181 11 oct. 2016 à 11:46
Bonjour Karin.code,
Le ligne numéro 7 (
ListView1.Width = ListView1.Width + 75
) n'est pas nécessaire car elle ajoute un espace vide dans la Listview
et aussi pour la première colonne (La colonne avec le nom "Valeur 1") une Scrollbarre horizontale sera affiché (pour manque d'espace) pour remédier à ça (pour que la Scrollbarre horizontale ne s'affiche pas )
ajouter le code suivant :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ListView1.Scrollable = False End Sub
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié par vb95 le 11/10/2016 à 12:56
Bonjour Karin.code
Pour éviter l'alignement à gauche de la première colonne ( la colonne 0) on peut définir cette colonne 0 avec une largeur = à 0 et on commence l'affichage à la colonne 1
De plus pour Kikou73 que je salue si
Listview1.Scrollable = False
la ScrollBar verticale ne s'affichera jamais
Pour éviter que la Scrollbar horizontale s'affiche il faut faire en sorte que la largeur de la ListView soit un peu supérieure à la somme des largeurs des différentes colonnes (penser à en rajouter un peu pour que la Scrollbar verticale ne masque pas un morceau de la dernière colonne au cas où la Scrollbar verticale apparaît)
Private Sub ListView1_DrawColumnHeader(sender As Object, e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader e.Graphics.DrawString("valeur" & e.ColumnIndex.ToString, New Font("arial", 12, FontStyle.Bold), listbrush(e.ColumnIndex Mod listbrush.Count), e.Bounds.X, 1) End Sub
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137 13 oct. 2016 à 18:47
Bonjour,
Comme ceci:
Option Strict On
Public Class Form1
Dim i As Integer
Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
Dim sf As New StringFormat()
Try
Select Case e.Header.TextAlign
Case HorizontalAlignment.Center
sf.Alignment = StringAlignment.Center
Case HorizontalAlignment.Right
sf.Alignment = StringAlignment.Far
End Select
Dim headerFont As New Font("Arial", 8, FontStyle.Bold)
Try
e.Graphics.DrawString(e.Header.Text, headerFont, Brushes.Red, _
New Point(e.Bounds.X + 5, e.Bounds.Y + 1), sf)
Finally
headerFont.Dispose()
End Try
Finally
sf.Dispose()
End Try
End Sub
Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
e.DrawDefault = True
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
ListView1.View = View.Details
If i = 0 Then
ListView1.Columns.Add("Valeur " & 0, 75, HorizontalAlignment.Left)
ListView1.Items.Add(TextBox1.Text)
ElseIf i > 0 Then
ListView1.Width = ListView1.Width + 75
ListView1.Columns.Add("Valeur " & i, 75, HorizontalAlignment.Left)
ListView1.Items(0).SubItems.Add(TextBox1.Text)
End If
TextBox1.Clear()
i = i + 1
ListView1.OwnerDraw = True
End Sub
End Class
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 13 oct. 2016 à 21:54
Bonsoir cs_Le Pivert,
ça fonctionne très bien Merci
Maintenant je peux mettre les valeur dans la ListView
il ne reste plus que l'apparence du tableau
Pour séparer les titres et les valeurs j'ai ajouter le code suivant :
Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader X = X + 100 e.Graphics.DrawLine(New Pen(SystemColors.Control, 1), 0, 26, X, 26) End Sub
Ça fonctionne
pour séparer les colonnes entre elles j'ai ajouter le code suivant :
X = X + 100 Dim Graph As Graphics Graph = Me.ListView1.CreateGraphics ' For R = 0 To X Step 100 Dim paint As Pen = New Pen(Color.Green, 2) paint.DashStyle = Drawing2D.DashStyle.Solid Graph.DrawLine(paint, X, 0, X, 26)
Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
Try
'Rectangle
e.Graphics.FillRectangle(Brushes.Black, e.Bounds)'couleur contour
'Rectanglesuperieur (Il est superposé au rectangle précédent et plus petit ou ±)
Dim RectPoint As New Point(e.Bounds.X + 1, e.Bounds.Y + 1)
Dim RectSize As New Size(New Point(e.Bounds.Width - 2, e.Bounds.Height - 2))
Dim Rect As New Rectangle(RectPoint, RectSize)
e.Graphics.FillRectangle(Brushes.Yellow, Rect) 'couleur fond BackColor
Finally
End Try
Dim sf As New StringFormat()
Try
Select Case e.Header.TextAlign
Case HorizontalAlignment.Center
sf.Alignment = StringAlignment.Center
Case HorizontalAlignment.Right
sf.Alignment = StringAlignment.Far
End Select
Dim headerFont As New Font("Arial", 8, FontStyle.Bold)
Try
e.Graphics.DrawString(e.Header.Text, headerFont, Brushes.Red, _
New Point(e.Bounds.X + 5, e.Bounds.Y + 1), sf) 'couleur police ForeColor
Finally
headerFont.Dispose()
End Try
Finally
sf.Dispose()
End Try
End Sub
@+ Le Pivert
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bonjour cs_ShayW,
Merci pour ta réponse
le code que tu a suggéré marche mais pas à 100%
le résultat finale devrait être comme ça :
mais il y a quelque défaut
1/- l'arrière plan des titres n'est plus affiché :
2/- les valeurs écrit dans le TextBox1 ne s'affiche pas :
3/- Le texte est aligné à gauche même si je précise l'alignement en centre
4/- Valeur 0 et 1 sont superposé :
Voici comment j'ai fait, peut-être que j'ai mal posé ton code :
Private listbrush As New List(Of Brush) From {Brushes.Blue} Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListView1.View = View.Details ListView1.GridLines = True If i = 0 Then ListView1.Items.Add("") ListView1.Columns.Add("" & 0, 0, HorizontalAlignment.Center) ListView1.Columns.Add("" & 1, 100, HorizontalAlignment.Center) ListView1.Items(0).SubItems.Add(TextBox1.Text) ElseIf i > 0 Then ListView1.Width = ListView1.Width + 100 ListView1.Columns.Add("" & i + 1, 100, HorizontalAlignment.Center) ListView1.Items(0).SubItems.Add(TextBox1.Text) End If TextBox1.Clear() TextBox1.Focus() i = i + 1 ListView1.OwnerDraw = True End Sub Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader e.Graphics.DrawString("valeur" & e.ColumnIndex.ToString, New Font("Georgia", 12, FontStyle.Bold), listbrush(e.ColumnIndex Mod listbrush.Count), e.Bounds.X, 1) End Sub
Karin.code
Messages postés183Date d'inscriptionvendredi 2 septembre 2016StatutMembreDernière intervention16 janvier 20182 13 oct. 2016 à 12:58
Désolé je n'ai pas lu ton code, j'ai juste copie ce deriner
mais maintenant en le regardant de plus près ce code permet de dessiner les titres (Valeur 1, Valeur 2,Valeur 3 ..etc)
pour le 1er défaut : l'arrière plan des titres n'est plus affiché j'ai ajouté dans :
Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader End Sub
une ligne horizontale et verticale chaque X=100
mais le problème pour la ligne verticale j'arrive à ajouter qu'une seul ligne
pour le 2eme défaut : j'arrive toujours pas à trouver une solution
pour la 3eme défaut : Le texte est aligné à gauche même si je précise l'alignement en centre
j'ai changer ça
e.Bounds.X
par ça
e.Bounds.X + 8
dans
e.Graphics.DrawString("Valeur " & e.ColumnIndex.ToString, New Font("Georgia", 12, FontStyle.Bold), listbrush(e.ColumnIndex Mod listbrush.Count), e.Bounds.X, 1)
Ça ne pose pas de problème car je n'ai que 30 valeurs dans mon tableau (le titre reste dans l'espace réservé pour lui)
pour le 4eme défaut : Valeur 0 et 1 sont superposé j'ai ajouté la condition suivante :
If e.ColumnIndex.ToString = 0 Then
ElseIf e.ColumnIndex.ToString > 0 Then e.Graphics.DrawString("Valeur " & e.ColumnIndex.ToString, New Font("Georgia", 12, FontStyle.Bold), listbrush(e.ColumnIndex Mod listbrush.Count), e.Bounds.X + 8, 1) End If
11 oct. 2016 à 11:46
Le ligne numéro 7 ( ) n'est pas nécessaire car elle ajoute un espace vide dans la Listview
et aussi pour la première colonne (La colonne avec le nom "Valeur 1") une Scrollbarre horizontale sera affiché (pour manque d'espace) pour remédier à ça (pour que la Scrollbarre horizontale ne s'affiche pas )
ajouter le code suivant :
Modifié par vb95 le 11/10/2016 à 12:56
Pour éviter l'alignement à gauche de la première colonne ( la colonne 0) on peut définir cette colonne 0 avec une largeur = à 0 et on commence l'affichage à la colonne 1
De plus pour Kikou73 que je salue si la ScrollBar verticale ne s'affichera jamais
Pour éviter que la Scrollbar horizontale s'affiche il faut faire en sorte que la largeur de la ListView soit un peu supérieure à la somme des largeurs des différentes colonnes (penser à en rajouter un peu pour que la Scrollbar verticale ne masque pas un morceau de la dernière colonne au cas où la Scrollbar verticale apparaît)