ListBox VisualBasic

Résolu
Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   -  
Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
    2. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      Oui c'est du vb pardon :) et merci pour le lien je vais voir ce que cela donne
      0
    3. Utilisateur anonyme
       
      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
  2. Utilisateur anonyme
     
    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
    1. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
    2. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
    3. Utilisateur anonyme
       
      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
    4. Utilisateur anonyme
       
      PS avec itemheight = 20
      0
    5. Utilisateur anonyme
       
      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
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Une solution toute simple: tu intercales une ligne vide.
    0
    1. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention  
         
        D'abord, connaitre le langage de programmation?
        Ensuite voir le code
        0
    2. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      Merci j'ai l'impression que cela pourrait fonctionner si j'arrive à gérer pourquoi cela me fait une erreur



      Merci
      Cordialement
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention  
         
        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
    2. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention  
         
        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
    3. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
     
    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
    1. Utilisateur anonyme
       
      C'est quoi le code de Actualisation_Marque()?
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Utilisateur anonyme
       
      J'ai des doutes sur la syntaxe cette ligne!

      Dim texte As String = LB1.Items(e.Index)("marque").ToString()
      0
    3. Utilisateur anonyme > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      Oui aussi.
      0
    4. Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
       
      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
    5. Utilisateur anonyme > Programming_018 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention  
       
      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