Подтвердить что ты не робот

Добавить вертикальную полосу прокрутки на панель

Я пытаюсь сделать прокрутку Panel, но только по вертикали (поэтому AutoScroll не будет работать, потому что дочерние элементы управления проходят мимо левого края и должны).

Так как это сделать?

4b9b3361

Ответ 1

Предполагая, что вы используете winforms, компоненты панели по умолчанию не предлагают вам способ отключить компоненты горизонтальной прокрутки. Обойти это можно, отключив автоматическую прокрутку и добавив полосу прокрутки самостоятельно:

ScrollBar vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
vScrollBar1.Scroll += (sender, e) => { panel1.VerticalScroll.Value = vScrollBar1.Value; };
panel1.Controls.Add(vScrollBar1);

Подробное обсуждение здесь.

Ответ 2

Попробуйте вместо этого использовать "только" вертикальную прокрутку.
(автоматическая прокрутка должна быть ложной, прежде чем она примет изменения)

mypanel.AutoScroll = false;
mypanel.HorizontalScroll.Enabled = false;
mypanel.HorizontalScroll.Visible = false;
mypanel.HorizontalScroll.Maximum = 0;
mypanel.AutoScroll = true;

Ответ 3

Panel имеет свойство AutoScroll. Просто установите для этого свойства значение True, и панель автоматически добавит полосу прокрутки при необходимости.

Ответ 4

Ниже приведен код, который реализует пользовательскую вертикальную полосу прокрутки. Важная деталь здесь заключается в том, чтобы знать, когда требуется полоса прокрутки, вычисляя, сколько пространства потребляется элементами управления, которые вы добавляете в панель.

panelUserInput.SuspendLayout();
panelUserInput.Controls.Clear();
panelUserInput.AutoScroll = false;
panelUserInput.VerticalScroll.Visible = false;

// here you'd be adding controls

int x = 20, y = 20, height = 0;
for (int inx = 0; inx < numControls; inx++ )
{
    // this example uses textbox control
    TextBox txt = new TextBox();
    txt.Location = new System.Drawing.Point(x, y);
    // add whatever details you need for this control
    // before adding it to the panel
    panelUserInput.Controls.Add(txt);
    height = y + txt.Height;
    y += 25;
}
if (height > panelUserInput.Height)
{
    VScrollBar bar = new VScrollBar();
    bar.Dock = DockStyle.Right;
    bar.Scroll += (sender, e) => { panelUserInput.VerticalScroll.Value =  bar.Value; };
    bar.Top = 0;
    bar.Left = panelUserInput.Width - bar.Width;
    bar.Height = panelUserInput.Height;
    bar.Visible = true;
    panelUserInput.Controls.Add(bar);
}
panelUserInput.ResumeLayout();

// then update the form
this.PerformLayout();

Ответ 5

AutoScroll действительно решение! Вам просто нужно установить AutoScrollMargin на 0, 1000 или что-то в этом роде, а затем использовать его для прокрутки вниз и добавления туда кнопок и предметов!

Ответ 6

Добавьте в код стиля панели что-то вроде этого:

<asp:Panel ID="myPanel" runat="Server" CssClass="myPanelCSS" style="overflow-y:auto; overflow-x:hidden"></asp:Panel>