ListBox VisualBasic

Résolu/Fermé
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 - 16 janv. 2017 à 11:12
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 - 19 janv. 2017 à 14:19
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

cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723
Modifié par cs_Le Pivert le 16/01/2017 à 11:51
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
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
Modifié par Programming_018 le 16/01/2017 à 11:56
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 !!
0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723 > Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022
16 janv. 2017 à 11:59
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
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 12:01
Oui c'est du vb pardon :) et merci pour le lien je vais voir ce que cela donne
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
Modifié par Whismeril le 16/01/2017 à 16:45
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
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
16 janv. 2017 à 16:48
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
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 17:42
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
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
Modifié par Programming_018 le 16/01/2017 à 17:53
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
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
Modifié par Whismeril le 16/01/2017 à 21:13
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
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
16 janv. 2017 à 21:13
PS avec itemheight = 20
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
16 janv. 2017 à 21:37
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()

0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723
16 janv. 2017 à 11:28
Bonjour,

Une solution toute simple: tu intercales une ligne vide.
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 11:31
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
0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723 > Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022
16 janv. 2017 à 11:40
D'abord, connaitre le langage de programmation?
Ensuite voir le code
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 11:46
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

0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723
16 janv. 2017 à 18:01
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à

0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 18:08
Merci j'ai l'impression que cela pourrait fonctionner si j'arrive à gérer pourquoi cela me fait une erreur



Merci
Cordialement
0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723 > Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022
16 janv. 2017 à 18:32
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
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
16 janv. 2017 à 20:45
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
0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723 > Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022
17 janv. 2017 à 14:14
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
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
17 janv. 2017 à 14:58
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 ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
Modifié par Programming_018 le 17/01/2017 à 15:54
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
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886
17 janv. 2017 à 18:03
C'est quoi le code de Actualisation_Marque()?
0
cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023 723 > Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023
17 janv. 2017 à 18:21
J'ai des doutes sur la syntaxe cette ligne!

Dim texte As String = LB1.Items(e.Index)("marque").ToString()
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886 > cs_Le Pivert Messages postés 7870 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 23 janvier 2023
17 janv. 2017 à 18:31
Oui aussi.
0
Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022 6
17 janv. 2017 à 20:16
Bonsoir alors pour ce qui est du code de Actualisation_Marque() le voci
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 = Connection de ma base de donnée
        Try
            'Selection des marques dans la base de donnée et regroupement des doublons + Ordre alpha
            Query = "SELECT marque FROM 853339_depannage.materielocass 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


Et pour ce qui est de la ligne de votre doute quand j'enlève ("marque").ToString cela me fait ce qui suit :



Alors que en le rajoutant cela fonctionne parfaitement

Merci
Cordialement
0
Whismeril Messages postés 18199 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 janvier 2023 886 > Programming_018 Messages postés 103 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 10 novembre 2022
17 janv. 2017 à 20:42
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.
0