首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在面板中连续滚动面板

在面板中连续滚动面板
EN

Stack Overflow用户
提问于 2018-08-08 21:54:43
回答 1查看 104关注 0票数 1

我目前正在开发报告,这些报告绝对是海量的,需要一定的格式。为此,我创建了一个表单,并将其多次插入到面板中。

我在面板上达到了高度限制,所以我将信息分成较小的类别,将它们放在单独的面板上,然后将面板放入原始面板中

代码语言:javascript
复制
Original Panel{
     Panel1{
          info
          info
          info
     }
     Panel2{
          info
          info
          info
     }
     Panel3{
          info
          info
          info
     }
}

这是完美的工作,除了滚动。单个面板滚动到底部,然后停止。我希望当subPanel到达顶部或底部时,主面板可以滚动。

为了解释另一种方式,html中的DIVs中的功能。内部DIV滚动,当它达到最大或最小高度时,父DIV继续滚动。

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-08-10 20:18:10

因此,经过一些实验,我找到了一个答案,并将其发布给任何需要它的人。

代码语言:javascript
复制
private void flowLayout_MouseWheel(object sender, MouseEventArgs e)
    {
        var currentPosition = this.flowLayoutPanel1.AutoScrollPosition.Y;

        if((currentPosition == this.flowLayoutPanel1.VerticalScroll.Minimum && e.Delta>0) || (currentPosition == -1*(this.flowLayoutPanel1.VerticalScroll.Maximum + 1 - this.flowLayoutPanel1.VerticalScroll.LargeChange) && e.Delta<0))
        {
            Control control = this.Parent;
            FlowLayoutPanel flp = control as FlowLayoutPanel;
            if(flp == null) { return; }

            flp.VerticalScroll.Value = Math.Min(Math.Max(flp.VerticalScroll.Value - e.Delta, 0), (flp.VerticalScroll.Maximum + 1 - flp.VerticalScroll.LargeChange));
        }

    }

这段代码首先获取FlowLayoutPanel的当前位置。

代码语言:javascript
复制
var currentPosition = this.flowLayoutPanel1.AutoScrollPosition.Y;

如果e.Delta为负数,则用户正在向下滚动。Up是正数。

代码语言:javascript
复制
if(
         (currentPosition == this.flowLayoutPanel1.VerticalScroll.Minimum 
         && e.Delta>0) 
         || (currentPosition == -1*(this.flowLayoutPanel1.VerticalScroll.Maximum + 1 - this.flowLayoutPanel1.VerticalScroll.LargeChange) 
         && e.Delta<0)
  )

如果面板滚动到顶部,并且用户向上滚动,它将获得窗体的父级,即主面板。如果它不能获得面板,它将退出。

代码语言:javascript
复制
Control control = this.Parent;
FlowLayoutPanel flp = control as FlowLayoutPanel;
if(flp == null) { return; }

然后,它以相同的增量调整主面板,使用最大值和最小值对其进行约束,以避免当您尝试将该值设置为小于其最小值或大于其最大值时导致的OutOfBoundsException。

代码语言:javascript
复制
flp.VerticalScroll.Value = Math.Min(
                               Math.Max(flp.VerticalScroll.Value - e.Delta, 0), 
                               (flp.VerticalScroll.Maximum + 1 - flp.VerticalScroll.LargeChange)
                           );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51748522

复制
相关文章

相似问题

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