none
Central el texto de un combobox RRS feed

  • Pregunta

  • Hola a todos, trabajo en Visual studio 2010

    Mi pregunta es la siguiente: desearía poner el texto de  un combobox centrado ya que siempre me sale a la derecha. No encuentro ninguna propiedad para poder modificarlo.

    Gracias de antemano.


    Saluditos, Charo

    viernes, 8 de julio de 2016 15:15

Respuestas

  • Hola charoeci1,

    Como te ya te mencionaron no hay una propiedad que te centre el contenido, pero puedes usar el evento DrawItem y volver a "dibujar" cada item.

    Algo así : 

    Activa estas dos propiedades en tu ComboBox, DrawMode = OwnerDrawFixed y DropDownStyle = DropDownList, luego solo crearías el evento.

    Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
        If e.Index >= 0 Then
            Using st As New StringFormat With {.Alignment = StringAlignment.Center}
                e.Graphics.DrawString(sender.Items(e.Index).ToString, e.Font, Brushes.Black, e.Bounds, st)
            End Using
         End If
    End Sub

    Lo que tendría que mostrarte un resultado como este :

    El único inconveniente es que al usar la propiedad DropDownStyle = DropDownList, este no permitirá escribir en el ComboBox.

    Pruébalo y nos comentas.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 8 de julio de 2016 18:47
  • Que tal amigo , proba con esto

    Public Class CenteredComboBox
      Inherits ComboBox
      Sub New()
        Me.DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
        Me.DropDownStyle = ComboBoxStyle.DropDownList
      End Sub
    
      Private Sub CenteredComboBox_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
        e.DrawBackground()
        Dim txt As String = ""
        If e.Index >= 0 Then txt = Me.Items(e.Index).ToString
        TextRenderer.DrawText(e.Graphics, txt, e.Font, e.Bounds, e.ForeColor, TextFormatFlags.HorizontalCenter)
        e.DrawFocusRectangle()
      End Sub
    End Class

    https://social.msdn.microsoft.com/Forums/en-US/e5d22714-7d11-468b-b119-953be31bcc0c/how-to-put-the-text-in-the-center-in-combobox-in-vb?forum=vbgeneral


    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/


    viernes, 8 de julio de 2016 15:20
  • charoeci1,

    Los elementos del objeto de tipo ComboBox por defecto no se alinean a la derecha, se alinean a la izquierda, salvo que hayas cambiado el valor de la propiedad RightToLeft a Yes. Aun así, no hay una propiedad que permita establecer una alineación a los elementos, tendrás que echar mano a algo de código para lograrlo, de hecho, he visto implementaciones que lo logran, además de lo que te propone Bader te dejo otro enlace:

    Align Text in Combobox

    viernes, 8 de julio de 2016 17:23

Todas las respuestas

  • Que tal amigo , proba con esto

    Public Class CenteredComboBox
      Inherits ComboBox
      Sub New()
        Me.DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
        Me.DropDownStyle = ComboBoxStyle.DropDownList
      End Sub
    
      Private Sub CenteredComboBox_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
        e.DrawBackground()
        Dim txt As String = ""
        If e.Index >= 0 Then txt = Me.Items(e.Index).ToString
        TextRenderer.DrawText(e.Graphics, txt, e.Font, e.Bounds, e.ForeColor, TextFormatFlags.HorizontalCenter)
        e.DrawFocusRectangle()
      End Sub
    End Class

    https://social.msdn.microsoft.com/Forums/en-US/e5d22714-7d11-468b-b119-953be31bcc0c/how-to-put-the-text-in-the-center-in-combobox-in-vb?forum=vbgeneral


    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/


    viernes, 8 de julio de 2016 15:20
  • charoeci1,

    Los elementos del objeto de tipo ComboBox por defecto no se alinean a la derecha, se alinean a la izquierda, salvo que hayas cambiado el valor de la propiedad RightToLeft a Yes. Aun así, no hay una propiedad que permita establecer una alineación a los elementos, tendrás que echar mano a algo de código para lograrlo, de hecho, he visto implementaciones que lo logran, además de lo que te propone Bader te dejo otro enlace:

    Align Text in Combobox

    viernes, 8 de julio de 2016 17:23
  • Hola charoeci1,

    Como te ya te mencionaron no hay una propiedad que te centre el contenido, pero puedes usar el evento DrawItem y volver a "dibujar" cada item.

    Algo así : 

    Activa estas dos propiedades en tu ComboBox, DrawMode = OwnerDrawFixed y DropDownStyle = DropDownList, luego solo crearías el evento.

    Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
        If e.Index >= 0 Then
            Using st As New StringFormat With {.Alignment = StringAlignment.Center}
                e.Graphics.DrawString(sender.Items(e.Index).ToString, e.Font, Brushes.Black, e.Bounds, st)
            End Using
         End If
    End Sub

    Lo que tendría que mostrarte un resultado como este :

    El único inconveniente es que al usar la propiedad DropDownStyle = DropDownList, este no permitirá escribir en el ComboBox.

    Pruébalo y nos comentas.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 8 de julio de 2016 18:47
  • Ya me sale como me muestras en tu imagen.La verdad es que en este combobox no necesito escribir.

    Muchas gracias Joel.


    Saluditos, Charo

    martes, 12 de julio de 2016 15:20