C# WinForms:hacer invisible la barra de desplazamiento del panel

C# WinForms:hacer invisible la barra de desplazamiento del panel

Ok, he hecho el ejemplo de trabajo de esto para ti. Todo lo que tiene que hacer es cambiar el valor máximo según el tamaño total de todos los elementos dentro de su panel.

Código de formulario:

public partial class Form1 : Form
{
    private int location = 0;

    public Form1()
    {
        InitializeComponent();

        // Set position on top of your panel
        pnlPanel.AutoScrollPosition = new Point(0, 0);

        // Set maximum position of your panel beyond the point your panel items reach.
        // You'll have to change this size depending on the total size of items for your case.
        pnlPanel.VerticalScroll.Maximum = 280;
    }

    private void btnUp_Click(object sender, EventArgs e)
    {
        if (location - 20 > 0)
        {
            location -= 20;
            pnlPanel.VerticalScroll.Value = location;
        }
        else
        {
            // If scroll position is below 0 set the position to 0 (MIN)
            location = 0;
            pnlPanel.AutoScrollPosition = new Point(0, location);
        }
    }

    private void btnDown_Click(object sender, EventArgs e)
    {
        if (location + 20 < pnlPanel.VerticalScroll.Maximum)
        {
            location += 20;
            pnlPanel.VerticalScroll.Value = location;
        }
        else
        {
            // If scroll position is above 280 set the position to 280 (MAX)
            location = pnlPanel.VerticalScroll.Maximum;
            pnlPanel.AutoScrollPosition = new Point(0, location);
        }
    }
}

Imagen de ejemplo:

Tienes que configurar AutoScroll opción a Falso en su panel. Espero que comprenda lo que he hecho y que su panel funcione como usted desea. No dude en preguntar si tiene alguna pregunta.


El control del Panel asume el deber que le diste al configurar AutoScroll en verdadero bastante serio. Esto siempre incluye mostrar el gadget de la barra de desplazamiento si es necesario. Entonces, lo que intentaste no puede funcionar, ocultar la barra de desplazamiento vertical obliga a Panel a recalcular el diseño, ya que al hacerlo se alteró el área del cliente. Por supuesto, descubrirá que la barra de desplazamiento es necesaria y la hará visible nuevamente.

El código que hace esto, Panel lo hereda de ScrollableControl, es interno y no se puede anular. Esto fue intencional.

Entonces, usar AutoScroll no lo llevará a ninguna parte. Como alternativa, tenga en cuenta lo que realmente quiere lograr. Simplemente desea mover los controles hacia arriba y hacia abajo. Fácil de hacer, simplemente cambie su propiedad Ubicación. Eso, a su vez, es más fácil de hacer si coloca los controles en otro panel, lo suficientemente grande como para contenerlos. Establezca su propiedad AutoSize en True. E implemente los controladores de eventos Click de sus botones simplemente cambiando la propiedad Ubicación de ese panel:

private const int ScrollIncrement = 10;

private void ScrollUpButton_Click(object sender, EventArgs e) {
    int limit = 0;
    panel2.Location = new Point(0, 
        Math.Min(limit, panel2.Location.Y + ScrollIncrement));
}

private void ScrollDownButton_Click(object sender, EventArgs e) {
    int limit = panel1.ClientSize.Height - panel2.Height;
    panel2.Location = new Point(0, 
        Math.Max(limit, panel2.Location.Y - ScrollIncrement));
}

Donde panel1 es el panel exterior y panel2 es el interior que contiene los controles. Tenga cuidado cuando use el diseñador para ponerle controles, tiene la habilidad de darles el padre equivocado. Asegúrese de usar la ventana de ayuda Ver + Otras ventanas + Diseño de documento para que pueda ver que esto va mal. Después de llenarlo, establezca su propiedad AutoSizeMode en GrowAndShrink para que se ajuste a su tamaño mínimo.