none
VB2010 - NullText usando un combobox personalizado RRS feed

  • Pregunta

  • Estimados

    Necesito utilizar la opción NullText o similar en mi combobox cuando el usuario seleccione una alternativa debido a que el tamaño asignado para dicho control es muy pequeño, por ejemplo:

    Texto mostrado por el combobox: "I2 - Productos de Ventas" y cuando sea seleccionado por el usuario solo quede en el text "I2", ví esto en un control de infragistic que tenia una propiedad llamada NullText y hay podría asignar dicho valor a mostrar pero con un combobox personalizado como lo puedo hacer?

    Parte del código del control es este:
    
    ......
    
       <Description("Define el estilo de la flecha del desplegable cuando la propiedad " & _
        "ArrowPersonalized tiene el valor de 'true'."), Category("Apariencia")> _
        Public Property ArrowStyle() As enumArrowStyle
            Get
                Return varCArrowStyle
            End Get
            Set(ByVal value As enumArrowStyle)
                varCArrowStyle = value
                Me.Invalidate()
            End Set
        End Property
    
        <Description("Color del borde del control cuando la propiedad FlatStyle " & _
        "tenga el valor de 'Standard'."), Category("Apariencia")> _
        Public Property BorderColor() As Color
            Get
                Return varCBorderColor
            End Get
            Set(ByVal value As Color)
                varCBorderColor = value
                Me.Invalidate()
            End Set
        End Property
    
        <Description("Alto del control en píxeles."), Category("Diseño")> _
        Public Property SizeHeight() As Integer
            Get
                If varCSizeHeight < 6 Then
                    varCSizeHeight = 6
                End If
                Return varCSizeHeight
                subSComboBoxHeight(Me, varCSizeHeight)
            End Get
            Set(ByVal value As Integer)
                If value < 6 Then
                    value = 6
                End If
                varCSizeHeight = value
                subSComboBoxHeight(Me, value)
            End Set
        End Property
    
        'El siguente método se utiliza para modificar el alto del control
        Private Sub subSComboBoxHeight(ByVal ctlComboBox As ComboBox, _
        ByVal Height As Int32)
            SendMessage(ctlComboBox.Handle, CB_SIH, -1, Height - 6)
            Me.Refresh()
        End Sub
    
        'En el método Resize añadimos el código para que el control sólo se pueda modificar
        'desde la propiedad SizeHeight. Si no utilizamos este código, cada vez que cambiamos
        'el tamaño del control manualmente o desde las propiedades Width y Hei el control
        'vuelve a su altura predeterminada
        Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
            MyBase.OnResize(e)
            If Not Me.Height = varCSizeHeight Then
                subSComboBoxHeight(Me, varCSizeHeight)
            End If
        End Sub
    
        Protected Overrides Sub WndProc(ByRef Mssg As Message)
            MyBase.WndProc(Mssg)
    
            If Mssg.Msg = &HF And Me.FlatStyle = Windows.Forms.FlatStyle.Standard Then
                Dim varSPen As Pen = New Pen(varCBorderColor, 1)
                Dim varSRectangle As New Rectangle(0, 0, Me.Width - 1, Me.Height - 1)
                Dim varSe As New PaintEventArgs(Me.CreateGraphics, varSRectangle)
    
                'Creamos el borde del control, antes hemos definido un pen del color de
                'la propiedad BorderColor y con el tamaño de 1 pixel.
                'Se podría también variabilizar el tamaño del borde del control.
                'También hemos definido un rectángulo del tamaño exacto del control.
                '¡OJO!, si se varibiliza el borde se tendrían que cambiar los datos en
                'el constructor del rectángulo que quedaría de la siguiente forma:
                '(int(Borde/2), int(Borde/2), Me.Width - Borde, Me.Height - Borde)
                varSe.Graphics.DrawRectangle(varSPen, varSRectangle)
    
                varSPen.Dispose()
                varSRectangle = Nothing
    
                'Con este código dibujaremos la flechita del desplegable según el valor
                'de las propiedades ArrowColor y ArrowStyle.
                If varCArrowPersonalized Then
                    Dim varSWidthIni = Me.Width - 14
                    Dim varSHeightIni = Int((Me.Height - 6) / 2) + 1
                    If Me.Height / 2 = Int(Me.Height / 2) Then
                        varSHeightIni = varSHeightIni - 1
                    End If
                    Dim varSpoint1 As Point
                    Dim varSpoint2 As Point
                    Dim varSpoint3 As Point
                    Dim varSpoint4 As Point
                    Dim varSpoint5 As Point
                    Dim varSpoint6 As Point
                    If varCArrowStyle = enumArrowStyle.Arrow3D Then
                        varSpoint1 = New Point(varSWidthIni, varSHeightIni + 1)
                        varSpoint2 = New Point(varSWidthIni + 1, varSHeightIni)
                        varSpoint3 = New Point(varSWidthIni + 4, varSHeightIni + 3)
                        varSpoint4 = New Point(varSWidthIni + 7, varSHeightIni)
                        varSpoint5 = New Point(varSWidthIni + 8, varSHeightIni + 1)
                        varSpoint6 = New Point(varSWidthIni + 4, varSHeightIni + 5)
                    Else
                        varSpoint1 = New Point(varSWidthIni, varSHeightIni + 1)
                        varSpoint2 = New Point(varSWidthIni + 1, varSHeightIni - 1)
                        varSpoint3 = New Point(varSWidthIni + 4, varSHeightIni + 3)
                        varSpoint4 = New Point(varSWidthIni + 7, varSHeightIni - 1)
                        varSpoint5 = New Point(varSWidthIni + 9, varSHeightIni + 1)
                        varSpoint6 = New Point(varSWidthIni + 4, varSHeightIni + 6)
                    End If
                    Dim varSPoint() As Point = {varSpoint1, varSpoint2, _
                    varSpoint3, varSpoint4, varSpoint5, varSpoint6}
    
                    varSe.Graphics.FillPolygon(New SolidBrush(varCArrowColor), varSPoint)
                    varSPoint = Nothing
                End If
                varSe.Dispose()
            End If
        End Sub
    

     

     

    • Cambiado Enrique M. Montejo lunes, 9 de julio de 2012 17:26 Controles de Windows Forms (De:Lenguaje VB.NET)
    domingo, 20 de noviembre de 2011 22:17

Todas las respuestas

  • hola

    pero el nombre de la propiedad nos e corresponde a la explciacion que das del tema

    el NullText define un texto que el control usaria si el valor que se agrega esta en nulo

    no tiene nada que ver con un estado de display y seleccion del usuario

     

    estas seguro que era con NullText que en esos controles lograbas esa funcionalidad

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 21 de noviembre de 2011 0:43