none
Personnaliser un item d'un combobox RRS feed

  • Question

  • Bonjour,

    j'ai un combobox contient les items suivant:"Ministere","Wali","Architecte",..

    je veux mettre en gras l'item ayant le texte "Ministere" et je sais pas comment??

    Merci de me répondre.

    cordialement,

    Amina

    jeudi 29 décembre 2011 10:49

Réponses

  • Bonjour,

    En VB NET !

    Vite fait... utiliser un listview au lieu d'un combobox.

    Mettre propriété "View" sur Details.


    (J'ai récupérer une table avec le nom des races de chien pour l'exemple.)

     

    
    ListViewTest.Columns.Add("Races existantes", 300)
    Do While reader.Read
    
            Dim listTest As New ListViewItem
            Dim strRace As String = reader.Item("Race")
    
            listTest.Text = strRace
            Me.ListViewTest.Items.Add(listTest)
            If reader.Item("Race") = "Berger allemand" Then
                listTest.Font = New System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Bold)
            End If
    		
    Loop
    


    On parcourt la table et on peut mettre une condition comme ci-dessus (si c'est Berger allemand)

    pour mettre l'item en gras.

     

    En espérant que cela réponde à la question !!


    Jacques
    • Proposé comme réponse Paraglider samedi 31 décembre 2011 13:54
    • Marqué comme réponse Ciprian Duduiala mardi 3 janvier 2012 08:15
    vendredi 30 décembre 2011 18:02
  • Sinon un début de code vite fait mal fait :

        Private animals() As String
    
        ' This method initializes the owner-drawn combo box.
        ' The drop-down width is set much wider than the size of the combo box
        ' to accomodate the large items in the list.  The drop-down style is set to 
        ' ComboBox.DropDown, which requires the user to click on the arrow to 
        ' see the list.
        Private Sub InitializeComboBox()
            Me.ComboBox1 = New ComboBox
            Me.ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable
            Me.ComboBox1.Location = New System.Drawing.Point(10, 20)
            Me.ComboBox1.Name = "ComboBox1"
            Me.ComboBox1.Size = New System.Drawing.Size(100, 120)
            'Me.ComboBox1.DropDownWidth = 250
            Me.ComboBox1.TabIndex = 0
            Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDown
            animals = New String() {"Elephant", "Crocodile", "Lion"}
            ComboBox1.DataSource = animals
            Me.Controls.Add(Me.ComboBox1)
        End Sub
    
        ' If you set the Draw property to DrawMode.OwnerDrawVariable, 
        ' you must handle the MeasureItem event. This event handler 
        ' will set the height and width of each item before it is drawn. 
        Private Sub ComboBox1_MeasureItem(ByVal sender As Object, _
           ByVal e As System.Windows.Forms.MeasureItemEventArgs) _
               Handles ComboBox1.MeasureItem
            Dim myFont As System.Drawing.Font
            Dim m As SizeF
            Select Case e.Index
                Case 0
                    myFont = ComboBox1.Font
                Case 1
                    myFont = New Font(ComboBox1.Font, FontStyle.Bold)
                Case 2
                    myFont = ComboBox1.Font
            End Select
            m = e.Graphics.MeasureString(animals(e.Index), myFont)
            e.ItemHeight = m.Height
            e.ItemWidth = m.Width
        End Sub
    
        ' You must handle the DrawItem event for owner-drawn combo boxes.  
        ' This event handler changes the color, size and font of an 
        ' item based on its position in the array.
        Private Sub ComboBox1_DrawItem(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.DrawItemEventArgs) _
            Handles ComboBox1.DrawItem
            Dim myFont As System.Drawing.Font
            Dim animalColor As New System.Drawing.Color
            Select Case e.Index
                Case 0
                    myFont = ComboBox1.Font
                Case 1
                    myFont = New Font(ComboBox1.Font, FontStyle.Bold)
                Case 2
                    myFont = ComboBox1.Font
            End Select
    
            ' Draw the background of the item.
            e.DrawBackground()
    
            ' Create a square filled with the animals color. Vary the size
            ' of the rectangle based on the length of the animals name.
            'Dim rectangle As Rectangle = New Rectangle(2, e.Bounds.Top + 2, _
            '    e.Bounds.Height, e.Bounds.Height - 4)
            'e.Graphics.FillRectangle(New SolidBrush(Color.White), rectangle)
    
            ' Draw each string in the array, using a different size, color,
            ' and font for each item.
            'myFont = New Font(family, size, FontStyle.Bold)
            e.Graphics.DrawString(animals(e.Index), myFont, System.Drawing.Brushes.Black, _
                New RectangleF(e.Bounds.X, e.Bounds.Y, _
                e.Bounds.Width, e.Bounds.Height))
    
            ' Draw the focus rectangle if the mouse hovers over an item.
            e.DrawFocusRectangle()
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            InitializeComboBox()
        End Sub
    
    Crocodile devrait donc être en gras. Si c'e'st à réutiliser, créer une classe qui ajouterait ce comportement à une ComboBox normale ou créer un contrôle personnalisé.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 30 décembre 2011 18:44
    Modérateur

Toutes les réponses

  • Bonjour,

    Je ne pense pas que cela doit possible directement (avec Windows Forms). Voir alors la propriété DrawMode qui permet d'indiquer comment dessiner les éléments de la liste. L'exemple indiqué ici http://msdn.microsoft.com/fr-fr/library/system.windows.forms.combobox.drawmode.aspx devrait être un point de départ suffisant.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 29 décembre 2011 11:22
    Modérateur
  • Bonjour,

    Le thread suivant pourrait vous être utile :

    http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/143f0f8a-449e-491f-ad07-2fdeddf7b1a9

     

    Cordialement.

    jeudi 29 décembre 2011 12:53
    Auteur de réponse
  •  

    le code doit être en vb.net

    Merci.

    jeudi 29 décembre 2011 13:45
  • Bonjour,

    En VB NET !

    Vite fait... utiliser un listview au lieu d'un combobox.

    Mettre propriété "View" sur Details.


    (J'ai récupérer une table avec le nom des races de chien pour l'exemple.)

     

    
    ListViewTest.Columns.Add("Races existantes", 300)
    Do While reader.Read
    
            Dim listTest As New ListViewItem
            Dim strRace As String = reader.Item("Race")
    
            listTest.Text = strRace
            Me.ListViewTest.Items.Add(listTest)
            If reader.Item("Race") = "Berger allemand" Then
                listTest.Font = New System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Bold)
            End If
    		
    Loop
    


    On parcourt la table et on peut mettre une condition comme ci-dessus (si c'est Berger allemand)

    pour mettre l'item en gras.

     

    En espérant que cela réponde à la question !!


    Jacques
    • Proposé comme réponse Paraglider samedi 31 décembre 2011 13:54
    • Marqué comme réponse Ciprian Duduiala mardi 3 janvier 2012 08:15
    vendredi 30 décembre 2011 18:02
  • Sinon un début de code vite fait mal fait :

        Private animals() As String
    
        ' This method initializes the owner-drawn combo box.
        ' The drop-down width is set much wider than the size of the combo box
        ' to accomodate the large items in the list.  The drop-down style is set to 
        ' ComboBox.DropDown, which requires the user to click on the arrow to 
        ' see the list.
        Private Sub InitializeComboBox()
            Me.ComboBox1 = New ComboBox
            Me.ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable
            Me.ComboBox1.Location = New System.Drawing.Point(10, 20)
            Me.ComboBox1.Name = "ComboBox1"
            Me.ComboBox1.Size = New System.Drawing.Size(100, 120)
            'Me.ComboBox1.DropDownWidth = 250
            Me.ComboBox1.TabIndex = 0
            Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDown
            animals = New String() {"Elephant", "Crocodile", "Lion"}
            ComboBox1.DataSource = animals
            Me.Controls.Add(Me.ComboBox1)
        End Sub
    
        ' If you set the Draw property to DrawMode.OwnerDrawVariable, 
        ' you must handle the MeasureItem event. This event handler 
        ' will set the height and width of each item before it is drawn. 
        Private Sub ComboBox1_MeasureItem(ByVal sender As Object, _
           ByVal e As System.Windows.Forms.MeasureItemEventArgs) _
               Handles ComboBox1.MeasureItem
            Dim myFont As System.Drawing.Font
            Dim m As SizeF
            Select Case e.Index
                Case 0
                    myFont = ComboBox1.Font
                Case 1
                    myFont = New Font(ComboBox1.Font, FontStyle.Bold)
                Case 2
                    myFont = ComboBox1.Font
            End Select
            m = e.Graphics.MeasureString(animals(e.Index), myFont)
            e.ItemHeight = m.Height
            e.ItemWidth = m.Width
        End Sub
    
        ' You must handle the DrawItem event for owner-drawn combo boxes.  
        ' This event handler changes the color, size and font of an 
        ' item based on its position in the array.
        Private Sub ComboBox1_DrawItem(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.DrawItemEventArgs) _
            Handles ComboBox1.DrawItem
            Dim myFont As System.Drawing.Font
            Dim animalColor As New System.Drawing.Color
            Select Case e.Index
                Case 0
                    myFont = ComboBox1.Font
                Case 1
                    myFont = New Font(ComboBox1.Font, FontStyle.Bold)
                Case 2
                    myFont = ComboBox1.Font
            End Select
    
            ' Draw the background of the item.
            e.DrawBackground()
    
            ' Create a square filled with the animals color. Vary the size
            ' of the rectangle based on the length of the animals name.
            'Dim rectangle As Rectangle = New Rectangle(2, e.Bounds.Top + 2, _
            '    e.Bounds.Height, e.Bounds.Height - 4)
            'e.Graphics.FillRectangle(New SolidBrush(Color.White), rectangle)
    
            ' Draw each string in the array, using a different size, color,
            ' and font for each item.
            'myFont = New Font(family, size, FontStyle.Bold)
            e.Graphics.DrawString(animals(e.Index), myFont, System.Drawing.Brushes.Black, _
                New RectangleF(e.Bounds.X, e.Bounds.Y, _
                e.Bounds.Width, e.Bounds.Height))
    
            ' Draw the focus rectangle if the mouse hovers over an item.
            e.DrawFocusRectangle()
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            InitializeComboBox()
        End Sub
    
    Crocodile devrait donc être en gras. Si c'e'st à réutiliser, créer une classe qui ajouterait ce comportement à une ComboBox normale ou créer un contrôle personnalisé.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 30 décembre 2011 18:44
    Modérateur