c# - 将控件滚动到流布局面板的可见顶部

标签 c# flowlayoutpanel

我已经实现了一个 flowlayoutpanel 来将图像显示为一种灯箱。 我需要将新图像添加到 FLP 中,而不是在末尾,而是作为前导图像。 为此,我创建了一个包含新图像的列表,并在添加操作之前将 FLP 的图像添加到该列表中。然后我清除了 FLP 的控件并添加了临时列表中的所有图像。这一切都很好,除了我想保留第一张图片的滚动位置。 我想知道如何将控件滚动到面板顶部。 使用 ScrollControlIntoView 图像变得可见,但它不会滚动到面板的顶部。

请找到接下来的 2 张图片来更清楚地描述需求:

first image上面显示了添加新行之前的情况。 然后在标记图像(红色箭头)上方添加新图像后 2nd image显示黄色的新行应该向上滚动。

我想将黄色标记的行滚动到窗口外,以便标记的图像停留在其位置

最佳答案

FlowLayoutPanel.AutoScrollPosition 是实现这一点的关键。它确定面板滚动的距离其控件的 Location 属性调整了多少以实现滚动。

因此,您要做的第一件事是获取控件的 Location 属性并通过减去 AutoScrollPosition 来调整它以恢复其原始设计位置。那么您可能想要减去控件的边距。然后你知道新的 AutoScrollPosition 让它到​​达顶部。假设它可以滚动到顶部,例如通常不适用于底部的控件,而不是您必须验证的其他内容。

因此:

    private void ScrollPanelTo(int index) {
        var ctl = flowLayoutPanel1.Controls[index];
        var loc = ctl.Location - new Size(flowLayoutPanel1.AutoScrollPosition);
        loc -= new Size(ctl.Margin.Left, ctl.Margin.Top);
        flowLayoutPanel1.AutoScrollPosition = loc;
        ctl.Focus();
    }

测试:

    int index;

    private void button9_Click(object sender, EventArgs e) {
        ScrollPanelTo(index);
        index = (index + 1) % flowLayoutPanel1.Controls.Count;
    }

关于c# - 将控件滚动到流布局面板的可见顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080434/

相关文章:

c# - 如何在安装过程中检测计算机(不仅仅是浏览器)中的 Adob​​e Acrobat Reader 安装?

c# - 捕获调用 Application.DoEvents() 时抛出的异常

c# 如何创建按钮并稍后通过 ID 删除它们

c# - 使用 AutoSize 时的 FlowLayoutPanel 高度错误

C# 更改 FlowLayoutPanel 中控件的位置

c# - 创建和显示动态错误消息(不在 UpdatePanel 内工作)

c# - 强名称工具(sn.exe)与全局程序集缓存(gacutil.exe)的区别

c# - 使用 Unity 在 Oculus Rift 中重置/校准方向

c# - 滚动问题

c# - 不断添加和删除到 flowlayoutpanel winforms