我正在尝试制作Panel
可滚动,但只能垂直(因此AutoScroll
将无效,因为子控件经过左边缘并且必须)。
那怎么办呢?
答案 0 :(得分:29)
尝试使用此选项仅适用于'滚动垂直。
(自动滚动在接受更改之前必须为false)
mypanel.AutoScroll = false;
mypanel.HorizontalScroll.Enabled = false;
mypanel.HorizontalScroll.Visible = false;
mypanel.HorizontalScroll.Maximum = 0;
mypanel.AutoScroll = true;
答案 1 :(得分:27)
假设您正在使用winforms,默认面板组件不会为您提供禁用水平滚动组件的方法。解决方法是禁用自动滚动并自己添加滚动条:
ScrollBar vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
vScrollBar1.Scroll += (sender, e) => { panel1.VerticalScroll.Value = vScrollBar1.Value; };
panel1.Controls.Add(vScrollBar1);
详细讨论here。
答案 2 :(得分:5)
Panel
具有AutoScroll
属性。只需将该属性设置为True
,面板将在需要时自动添加滚动条。
答案 3 :(得分:2)
以下是实现自定义垂直滚动条的代码。这里重要的细节是通过计算添加到面板的控件消耗的空间来了解何时需要滚动条。
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();
答案 4 :(得分:0)
AutoScroll
确实是解决方案!
您只需将AutoScrollMargin
设置为0, 1000
或类似的东西,然后使用它向下滚动并在其中添加按钮和项!
答案 5 :(得分:-1)
添加到您的面板的样式代码如下:
<asp:Panel ID="myPanel" runat="Server" CssClass="myPanelCSS" style="overflow-y:auto; overflow-x:hidden"></asp:Panel>