Vb.Net Remplire une Listview d'une façon horizontale

Résolu
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 - Modifié par Karin.code le 11/10/2016 à 09:36
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 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

6 réponses

Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
Modifié par Karin.code le 11/10/2016 à 10:55
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 :
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)
1
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
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
0
vb95 Messages postés 3079 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 3 octobre 2022 158
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)
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3079 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 3 octobre 2022
11 oct. 2016 à 13:35
Bonjour kikou93 et vb95,
Merci de m'avoir répondu

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

Ce n'est pas ce que j'ai fait avec ce bout de code?
If i = 0 Then
ListView1.Columns.Add("Valeur " & 0, 0, HorizontalAlignment.Center)
ListView1.Items.Add("")
ListView1.Columns.Add("Valeur " & 1, 75, HorizontalAlignment.Center)
ListView1.Items(0).SubItems.Add(TextBox1.Text)

Concernant ce qu'a dit kikou93 (
Listview1.Scrollable = False
), cela ne me pose pas problème, car je n'ai pas besoin d'une Scrollbar Verticale (je n'ai besoin de qu'une seul ligne, c'est pour ça que j'ai ajuster la hauteur de Listview pour qu'elle convient à cette dernière)
j'ai juste besoin de s'avoir comment interdire de modifier la largeur d'une colonne manuellement
0
vb95 Messages postés 3079 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 3 octobre 2022 158 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018
Modifié par vb95 le 11/10/2016 à 18:19
Salut Karin.code
Si c'est ce que tu fais avec le code ( j'avais mal vu) . surtout que moi je prépare mes colonnes avec l'interface et non par code !
Pour interdire la modification de la largeur des colonnes sers toi de ce code

e.Cancel = True
e.NewWidth = DirectCast(sender, ListView).Columns(e.ColumnIndex).Width


à mettre dans l'évènement Listview1._ColumnWidthChanging(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnWidthChangingEventArgs) Handles Listview1.ColumnWidthChanging

Pour cela tu cliques dans ta Listview : par défaut tu auras la Sub Evènement SelectedIndexChanged . Tu cherches l'évènement ColumnWithChanging et tu doubles-clicques . Dans le code de ta feuille tu auras la sub évènement qui s'est créée ! Reste plus qu'à y mettre ce code
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3079 Date d'inscription samedi 11 janvier 2014 Statut Non membre Dernière intervention 3 octobre 2022
Modifié par Karin.code le 11/10/2016 à 20:58
Merci cela fonctionne bien
juste une dernière chose si ça ne te dérange pas, est il possible de changer la couleur des titres des colonnes (Valeur 1, Valeur 2 ,... etc)
j'ai chercher mais je n'ai trouvé que le code qui permet de changer la couleur du texte et l'arrière plan des lignes (ForceColor, Backcolor)

J'ai trouver ce code qui me permet de changer la couleur du texte et l'arrière plan d'un cellule
ListView1.Items(0).UseItemStyleForSubItems = False
ListView1.Items(0).SubItems(2).ForeColor = Color.Blue
ListView1.Items(0).SubItems(2).BackColor = Color.Green
0