none
ELIMINA BARRA DE DESPLAZAMIENTO VERTICAL EN UN LISTBOX

    Question

  • Deseo eliminar la barra Vertical de Desplazamiento de un ListBox que tiene más registros de los que puede visualizar, esto es para elaborar un Control Personalizado que me muestre varias columnas en diferente color.

    Thursday, April 12, 2012 8:08 PM

Answers

  • Con este código puede eliminar el scrollbar del listbox, aunque no entiendo muy bien para que quieres hacer esto

    Public Class Form1
    
    	' user32 API
    	Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Integer, ByVal wBar As Integer, ByVal bShow As Boolean) As Boolean
    
    	'Constants
    	Private Const SB_HORZ = 0	'Horizontal Scrollbar
    	Private Const SB_VERT = 1	'Vertical Scrollbbar
    	Private Const SB_BOTH = 3	'Both ScrollBars
    
    	Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    
    		ShowScrollBar(ListBox1.Handle, SB_VERT, False)
    
    	End Sub
    
    End Class


    Atentamente, Sergio.

    Blog
    Twitter

    Friday, April 13, 2012 7:37 AM

All replies

  • Con este código puede eliminar el scrollbar del listbox, aunque no entiendo muy bien para que quieres hacer esto

    Public Class Form1
    
    	' user32 API
    	Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Integer, ByVal wBar As Integer, ByVal bShow As Boolean) As Boolean
    
    	'Constants
    	Private Const SB_HORZ = 0	'Horizontal Scrollbar
    	Private Const SB_VERT = 1	'Vertical Scrollbbar
    	Private Const SB_BOTH = 3	'Both ScrollBars
    
    	Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    
    		ShowScrollBar(ListBox1.Handle, SB_VERT, False)
    
    	End Sub
    
    End Class


    Atentamente, Sergio.

    Blog
    Twitter

    Friday, April 13, 2012 7:37 AM
  • "sergiomf" escribió:

    > ' user32 API
    > Private Declare Function ShowScrollBar Lib "user32" ( _
        ByVal hwnd As Integer, ...
    >
    > ShowScrollBar(ListBox1.Handle, SB_VERT, False)

    Hola, Sergio:

    Con tu permiso te quería hacer la siguiente observación. Como le estás pasando a la función API el valor de la propiedad Handle del control ListBox, lo suyo sería que definirieras el parámetro hwnd de la función ShowScrollBar con el tipo de dato IntPtr, que es el tipo de dato que devuelve la propiedad Handle:

        Private Declare Function ShowScrollBar Lib "user32" ( _
            ByVal hwnd As IntPtr, ByVal wBar As Integer, ByVal bShow As Boolean) As Boolean

    Te funciona porque con total seguridad tendrás desactivada la instrucción Option Strict, la cual no es aconsejable tenerla desactivada, porque te estarás arriesgando a tener problemas con la conversión entre diferentes tipos de datos.

    Cuando tengas activada la instrucción Option Strict, no podrás compilar tu aplicación hasta que no hagas una conversión explícita entre los diferentes tipos de datos.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    Friday, April 13, 2012 5:11 PM
  • Tiene usted razón.

    Yo es soy más de C# y ahí los tipos se manejan de otra manera. Me llamo la atención el problema busque una solución, y al ver que había que hacer una llamada al sistema más que "engancho". Lo probé y vi que funcionaba, pero no caí en la cuenta del option strict, así que espero que Rafael lo tenga en cuenta.

    De todas formas, gracias por el apunte.


    Atentamente, Sergio.

    Blog
    Twitter

    Friday, April 13, 2012 5:18 PM
  • "sergiomf" escribió:

    > Yo es soy más de C# y ahí los tipos se manejan de otra manera.

    Los tipos de datos se manejan de igual manera. Pero prueba el código en C# y verás como allí tienes que declarar el parámetro, "por narices", con el tipo IntPtr:

            [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            private static extern bool ShowScrollBar(IntPtr hwnd, int wBar, bool bShow);

    Como lo declares con el tipo de dato 'int' o 'Int32', verás como no puedes compilar el código. Para forzar la misma situación en Visual Basic .net, es por lo que se aconseja tener activada la instrucción Option Strict.

    Lo que pasa es que nadie me hace caso, y cuando la gente comience a tener problemas con las conversiones de datos, es cuando acuden al foro para que alguien se las resuelva.

    Fíjate en la NOTA INFORMATIVA que aparece al final de mis respuestas.


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.


    Friday, April 13, 2012 5:36 PM
  • Que el compilador de C# se habría quejado es un hecho, pero probé el código en Visual Basic y no en C# para luego no tener que hacer la conversión. Tendré en cuenta tu consejo para próximas pruebas en VB.NET...

    Atentamente, Sergio.

    Blog
    Twitter

    Friday, April 13, 2012 5:47 PM
  • Sergio muchas gracias por tu respuesta...
    Sunday, November 11, 2012 8:21 PM