ListBox VisualBasic [Résolu/Fermé]

Signaler
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
-
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
-
Bonjour, alors voilà j'ai un soucis j'essaie de faire en sorte que les items du ListBox puisse être écarté pour sélectionner sur un ordinateur tactile.
voilà une image de ce que cela fait actuellement mais je trouve cela très serré


Merci
Cordialement

5 réponses

Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625
C'est moi qui veut connaitre le langage!!!!
Pour le code il faut faire un copier -coller sur le post. On ne peut pas travailler sur des images!!!!
@+ Le Pivert
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Private Sub Actualisation_Marque()
Dim ConnectionSQL = New MySqlConnection
Dim COMMAND = New MySqlCommand
Dim SDA = New MySqlDataAdapter
Dim dbDataSet = New DataTable
Dim bSource = New BindingSource
Dim Query As String
ConnectionSQL.ConnectionString = "server=MONSERVEUR; userid=UTILISATEUR; password=MOT_DE_PASSE; database=BASE DE DONNEE"
Try
'Selection des marques dans la base de donnée et regroupement des doublons + Ordre alpha
Query = "SELECT marque FROM BDD.TABLE GROUP BY marque ORDER BY marque"
COMMAND = New MySqlCommand(Query, ConnectionSQL)
With SDA
.SelectCommand = COMMAND
.Fill(dbDataSet)
End With
bSource.DataSource = dbDataSet
LB1.DisplayMember = "marque"
LB1.DataSource = bSource 'Rentre les noms des marques dans la listbox
SDA.Update(dbDataSet)
ConnectionSQL.Close()
Catch ex As Exception
MsgBox("Une erreur est survenue :" & vbNewLine & vbNewLine & "L'erreur est : " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Erreur : 2")
Finally
ConnectionSQL.Dispose()
End Try
End Sub







AH ok !!
Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625 >
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020

Tu ne m'as toujours pas dit le langage de programmation!
J'en déduit que c'est du VB.Net.
Donc voir ceci:

https://plasserre.developpez.com/cours/vb-net/?page=ui-winforms3#LVIII-H-1-q
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Oui c'est du vb pardon :) et merci pour le lien je vais voir ce que cela donne
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
Bonjour, non ça n'est pas du Vb
Du Vb c'était Vb1, ça fait 20 ans que ça n.esxiste plus
Aujourd'hui il y a
  • VBS
  • VBA -> précisez:
    • Word
    • Excel
    • Access
    • Powerpoint
    • Autre
  • VB6 (ou antérieur, précisez)
  • VB.Net - précisez la Framework et ->
    • Winform
    • WPF


Le problème étant que Microsoft n.est pas foutu de trouver des noms différents à des langages différents
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
Et donc le code que tu montres, ressemble fort à du Vb.net (comme l'a dit le Pivert) à supposer que tu travailles en winform ceci devrait t'aider
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listbox.itemheight?redirectedfrom=MSDN&view=netframework-4.8


1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Exact c du vb.net winForm quand au cas du ItemHeight je dois le placer dans le load ?
Car si Oui alors j'ai un plus gros souci c'est que cela ne bouge strictement rien.

Merci
Cordialement
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Voilà le problème que cela me fait


J'ai écrits dans le load

LB1.DrawMode = DrawMode.OwnerDrawFixed

Attention : LB1 = ListBox1

Et pour l'actualisation de ma base j'ai écrit ceci

Private Sub Actualisation_Marque()
Dim ConnectionSQL = New MySqlConnection
Dim COMMAND = New MySqlCommand
Dim SDA = New MySqlDataAdapter
Dim dbDataSet = New DataTable
Dim bSource = New BindingSource
Dim Query As String
ConnectionSQL.ConnectionString = "server=MONSERVEUR; userid=UTILISATEUR; password=MOT_DE_PASSE; database=BASE DE DONNEE"
Try
'Selection des marques dans la base de donnée et regroupement des doublons + Ordre alpha
Query = "SELECT marque FROM BDD.TABLE GROUP BY marque ORDER BY marque"
COMMAND = New MySqlCommand(Query, ConnectionSQL)
With SDA
.SelectCommand = COMMAND
.Fill(dbDataSet)
End With
bSource.DataSource = dbDataSet
LB1.DisplayMember = "marque"
LB1.DataSource = bSource 'Rentre les noms des marques dans la listbox
LB1.ItemHeight = 50
SDA.Update(dbDataSet)
ConnectionSQL.Close()
Catch ex As Exception
MsgBox("Une erreur est survenue :" & vbNewLine & vbNewLine & "L'erreur est : " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Erreur : 2")
Finally
ConnectionSQL.Dispose()
End Try
End Sub


Donc en résumé cela m'affiche une scrollBar vertical MAIS ne m'affiche aucune données :/


Merci
Cordialement
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
Non, comme indiqué dans le tuto que t'as donné le Pivert, il faut le mettre dans l'évènement MesureItem, il faut aussi écrire le texte et dessiner le cadre dans DrawItem.

Copie le code et tu auras ça
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
PS avec itemheight = 20
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
Et si tu veux centrer le texte (avec itemHeight = 50 cette fois ci)
			'valeurs par défaut
			Dim fond As Brush = Brushes.Beige
			Dim police As Font = Me.Font
			Dim couleurTexte As Brush = Brushes.Black

			' L' item est celui 'selected' si And sur 'State' et 'DrawItemState.Selected'= true. 
			If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
				fond = Brushes.CornflowerBlue
				police = New Font(Me.Font, FontStyle.Bold)
				couleurTexte = Brushes.White
			End If

			'centrer le texte
			Dim texte As String = listBox1.Items(e.Index).ToString()
			Dim tailleTexte As SizeF = e.Graphics.MeasureString(texte, police)
			Dim x As Single = e.Bounds.X + (e.Bounds.Width - tailleTexte.Width) / 2
			Dim y As Single = e.Bounds.Y + (e.Bounds.Height - tailleTexte.Height) / 2


			'On dessine le rectangle du fond et on écrit le texte
			e.Graphics.FillRectangle(fond, e.Bounds)
			e.Graphics.DrawString(texte, police, couleurTexte, x, y)

			' Rectangle bleue autour de chaque Item.
			e.Graphics.DrawRectangle(Pens.Blue, New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height))
			'On diminue la largeur du rectangle de 1 pixel, sinon le coté droit n'est pas visible

			' Afficher le focus rectangle .
			e.DrawFocusRectangle()

Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625
Bonjour,

Une solution toute simple: tu intercales une ligne vide.
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Bonjour merci de cette précision sauf que il y à un problème c'est que les items de la listbox proviennent d'une base de donnée :/

Merci
Cordialement
Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625 >
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020

D'abord, connaitre le langage de programmation?
Ensuite voir le code
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Volià le code qui me permet de remplir la listbox
Quand à ce qui est de connaître le langage je le connais mais la listbox c'est la première fois que je dois m'en servir

Merci
Cordialement

Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625
Je te propose d'intercaler une ligne comme ceci:

   Dim x As Integer
        'inverse  liste
        For x = ListBox1.Items.Count - 1 To 0 Step -1
            ListBox1.Items.Add(ListBox1.Items(x).ToString)
            ListBox1.Items.Remove(ListBox1.Items(x).ToString)
        Next
        'ajoute ligne
        For x = ListBox1.Items.Count - 1 To 0 Step -1
            ListBox1.Items.Add(ListBox1.Items(x).ToString)
            ListBox1.Items.Add(" ")
            ListBox1.Items.Remove(ListBox1.Items(x).ToString)
        Next


a mettre après cette ligne en adaptant le nom de ta listBox

LB1.DataSource = bSource 'Rentre les noms des marques dans la listbox 


Voilà

Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Merci j'ai l'impression que cela pourrait fonctionner si j'arrive à gérer pourquoi cela me fait une erreur



Merci
Cordialement
Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625 >
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020

Je pense que le message est clair, il faut que tu trouves une autre solution! Et abandonner le fait d'agrandir les items.
Quand tu lis bien le lien que je t'ai fourni, il est stipulé qu'il faut redessiner chaque item.
Vaste tâche!!!!

@+ Le Pivert
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
D'accord m'est moi je n'ai jamais dit que je voulais agrandir mes items je voulais juste les écartés :/

Mais par contre non je ne peux pas abandonné car ce projet n'est pas pour moi c'est pour mon chef je suis en stage, alors cela serait vraiment sympa de votre part si vous avez une idée.

Merci d'avance
Cordilement
Messages postés
7337
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 avril 2021
625 >
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020

J'ai pensé à une chose, si c'était ta DataSource que tu modifiais en y ajoutant des lignes vides intercalées

A essayer!

@+ Le Pivert
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Merci à tous de votre aide vous avez raison c'est bien avec le DrawItem que cs_Le_Pivert ma fourni cela fonctionne parfaitement il me manquait juste à écrire

à la ligne :

e.Graphics.DrawString(Me.ListBox1.Items(e.Index), New Font(Me.Font, FontStyle.Bold)

e.Graphics.DrawString(Me.ListBox1.Items(e.Index)("marque").ToString, New Font(Me.Font, FontStyle.Bold)

puis quand j'ai rajouté le script de Whismeril pour centrer le texte tout est parfait je vous remerci à tous bonne journée maintenant je vais pouvoir avancer ;)
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
help for me quand j'étais en train de faire un script qui me permet d'ajouter des marques et que j'appuie sur entrée une erreur apparaît



Private Sub Ajouter_Marque()
        Dim ConnectionSQL = New MySqlConnection
        Dim COMMAND = New MySqlCommand
        Dim Query As String
        ConnectionSQL.ConnectionString = URLBDD
        Dim READER As MySqlDataReader
        Try
            ConnectionSQL.Open()
            Query = "INSERT INTO marque(nomMarque) VALUES ('" & TxtMarque.Text & "')"
            COMMAND = New MySqlCommand(Query, ConnectionSQL)
            READER = COMMAND.ExecuteReader
            ConnectionSQL.Close()
            Actualisation_Marque()
            MsgBox("La marque : " & TxtMarque.Text & " a bien été ajouté !", MsgBoxStyle.Information, "Information : 3")
        Catch ex As Exception
            MsgBox("Une erreur est survenue :" & vbNewLine & vbNewLine & "L'erreur est : " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Erreur : 2")
        Finally
            ConnectionSQL.Dispose()
        End Try
    End Sub



si vous avez une solution je suis preneur
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688 >
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020

ha oui, en effet, du coup la ligne
LB1.DisplayMember = "marque"
ne sert à rien, puisque c'est toi qui écrit le texte.

Le message d'erreur dit que l'index -1 est hors limites, ce qui est normal, les index vont de 0 à nombre d'items - 1.

Puisque tu dis que ce message apparait à l'ajout, je suppose que c'est au moment ou tu changes le datasource (d'ailleurs il serait judicieux de faire
            bSource.DataSource = Nothing'libére la ressource précédente
bSource.DataSource = dbDataSet
)
Il y a un instant ou la liste est vidée, et l'index d'affichage (pas de la collection d'items) passe à -1, ce qui signifie qu'il n'y a rien de sélectionné.

Je pense qu'en ajoutant un test sur e.Index différent -1 au début de la méthode DrawItem, ça va marcher.
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Bonjour, merci cela fonctionne sauf que quand j'ajoute cela me dis que ça c'est bien ajouté sauf que rien ne s'actualise même après que j'arrête et que je redémarre l'application rien ne s'affiche j'en ai marre ça marche pas :(


Et voici la liste que cela me fait en sachant que la listbox ce classe par ordre alphabétique :



Il n'y a que un seul est unique nom commençant par m est MSI alors que le test "marque" aurais dû être ajouté

PS : Alors que quand je ve le recréé avec le même ID ça me dit être déja créé Sauf que même dans ma base de donnée phpmyadmin rien n'à était ajouté d'où le problème vien t'il ? (Sachant que la temporairement pour les test je fais sur du local avec WAMP mais à la fin cela sera sur un server distant)


Help me please

Merci
Cordialement
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688
Ok mais quel est le code actuel?
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021
688 >
Messages postés
15818
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 avril 2021

Le fait est que les bases de données, je ne connais pas (j'ai un peu bidouillé avec access).
Il faut déterminer si le problème vient de l'insertion ou de l'affichage.
Cette phase me fait penser à un problème à l'insertion.
même après que j'arrête et que je redémarre l'application rien ne s'affiche

Je suppose que tu as un autre moyen de superviser ta BDD, puisque tu connais la clé.
En ce cas, que se passe t il si tu ajoutes une ligne par la supervision?

Si ça affiche, ça élimine (définitivement ?), la partie affichage, il faut donc chercher du coté de l'insertion. Et là, je ne serais pas d'une grande aide.

Ce que je peux de conseiller, c'est de mettre un point d'arrêt après cette ligne
Query = "INSERT INTO marque(nomMarque) VALUES ('" & TxtMarque.Text & "')"
pour vérifier le contenu de Query.
D'ailleurs, il me semble me souvenir qu'avec Access, les ' ' ne devaient être utilisés que pour les champ de type nombre, pas pour les string.
Messages postés
90
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
4 septembre 2020
6
Bonjour,

En fait tout est OK cela fonctionne à merveille c'est juste WAMP SERVER qui avait planter il a fallu que je le désinstalle et réinstalle

Merci quand même de votre aide j'en suis très satisfait
Cordialement