首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FlowLayoutPanel中完全删除HorizontalScrollBar

如何在FlowLayoutPanel中完全删除HorizontalScrollBar
EN

Stack Overflow用户
提问于 2016-07-20 17:15:36
回答 1查看 355关注 0票数 1

我有多个控件的FlowLayoutPanel。正常情况下,水平滚动条是不可见的,这是可以的。但当我调整大小时,水平滚动条出现并闪烁。调整大小后,它将不再可见。

我尝试过的:

1)

代码语言:javascript
复制
int vertScrollWidth = SystemInformation.VerticalScrollBarWidth;
flowlayoutPanel.Padding = new Padding(0, 0, vertScrollWidth, 0);

这并不完全有效。

2)

代码语言:javascript
复制
flowlayoutPanel.AutoScroll = false;
flowlayoutPanel.HorizontalScroll.Enabled = false;
flowlayoutPanel.HorizontalScroll.Visible = false;
flowlayoutPanel.AutoScroll = true;

在此之后,水平滚动条被禁用,但仍然可见。

3)

代码语言:javascript
复制
flowlayoutPanel.AutoScroll = true;
flowlayoutPanel.WrapContents = false;

这并不完全有效。

4)

代码语言:javascript
复制
[DllImport("user32.dll")]
static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);

protected override void OnShown(EventArgs e) {
    ShowScrollBar(this.flowlayoutPanel.Handle, SB_HORZ, false);
    base.OnShown(e);
}

这并不完全有效。

5)

代码语言:javascript
复制
flowlayoutPanel.SuspendLayout();
//resize controls inside flowlayoutPanel
flowlayoutPanel.ResumeLayout();

更好的是,水平滚动条闪烁较少,但仍然闪烁

6)

代码语言:javascript
复制
//ResizeBegin event
flowlayoutPanel.AutoScroll = false;
//ResizeEnd event
flowlayoutPanel.AutoScroll = true;

这并不完全有效。

EN

回答 1

Stack Overflow用户

发布于 2019-10-04 17:00:40

我知道这是一个古老的帖子,但我为自己找到了这个问题的解决方案。(我是为VerticalScrollbar这样做的,因为这是我在TopDown FlowDirection FlowLayoutPanel上遇到的问题),但也可以为HorizontalScrollbar转码。

代码语言:javascript
复制
// pContent is my FlowLayoutPanel, it has FlowDirection set to TopDown
// and WrapContent = true;
pContent.SuspendLayout();
// Populate the FlowLayoutPanel with controls
pContent.ResumeLayout();

// I want to show only HorizontalScrollbar
if (pContent.VerticalScroll.Visible)
    {
        pContent.AutoScroll = false;
        pContent.VerticalScroll.Visible = false;
        pContent.Height -= SystemInformation.HorizontalScrollBarHeight;
        pContent.AutoScroll = true;
        pContent.Height += SystemInformation.HorizontalScrollBarHeight;    
    }

所以,为了隐藏HorizontalScrollbar:

代码语言:javascript
复制
// pContent has FlowDirection set to LeftRight and WrapContent = true;
pContent.SuspendLayout();
// Populate the FlowLayoutPanel with controls
pContent.ResumeLayout();

// I want to show only VerticalScrollbar
if (pContent.HorizontalScroll.Visible)
    {
        pContent.AutoScroll = false;
        pContent.HorizontalScroll.Visible = false;
        pContent.Width -= SystemInformation.VerticalScrollBarWidth;
        pContent.AutoScroll = true;
        pContent.Width += SystemInformation.VerticalScrollBarWidth;    
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38477133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档