gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:03 26 4
gpt4 key购买 nike

我已经实现了一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com