winforms 向面板添加垂直滚动条

czfnxgou  于 2023-05-18  发布在  其他
关注(0)|答案(8)|浏览(196)

我试图使一个Panel滚动,但只能垂直滚动(所以AutoScroll不会工作,因为子控件会越过左边缘,必须)。
那么这是如何做到的呢?

4xrmg8kj

4xrmg8kj1#

尝试这个代替“仅”垂直滚动。
(auto scroll必须是false才能接受更改)

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

hgncfbus2#

假设您使用的是winforms,默认面板组件并不提供禁用水平滚动组件的方法。解决方法是禁用自动滚动并自己添加滚动条:

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

详细讨论here

9rbhqvlz

9rbhqvlz3#

Panel具有AutoScroll属性。只需将该属性设置为True,面板将在需要时自动添加滚动条。

l7mqbcuq

l7mqbcuq4#

AutoScroll才是真正的解决方案!你只需要将AutoScrollMargin设置为0, 1000或类似的东西,然后使用它向下滚动并在那里添加按钮和项目!

vsmadaxz

vsmadaxz5#

下面是实现自定义垂直滚动条的代码。这里的重要细节是通过计算添加到面板的控件占用了多少空间来了解何时需要滚动条。

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();
3xiyfsfu

3xiyfsfu6#

三步:
1-只需将AutoScroll属性设置为true
2-在Form load()中添加以下内容:

my Panel Vertical Scroll Maximum = 10000

3-在我的Panel控件Add(item)之后添加以下内容:return();
成交!

w7t8yxp5

w7t8yxp57#

加上Kamgman的答案,这确实有效。
假设我们在面板中添加一个标签作为子控件:

  • 首先添加面板。将AutoScroll设置为True,将AutoSize设置为False。
  • 将标签添加到面板中。将AutoSize设置为true。如果你愿意,你可以给予它一个MinimumSize的宽度,这样它至少保持它的“形状”水平。
  • 然后将label控件的Anchor设置为Top。拆除其上的左锚。这可确保标签仅垂直滚动,而不是水平滚动。

如果你走这条路,你不必添加线来隐藏水平滚动条。
如果您使用System.ComponentModel.ComponentResourceManager.ApplyResources.resx文件而不是.Designer.cs加载它可能会更好。因为在我的例子中,每当我编辑这个特定的表单时,我丢失了Designer.cs文件中的更改。但这将取决于你的项目是如何设置的

cygmwpex

cygmwpex8#

在面板的样式代码中添加如下内容:

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

相关问题