我的问题是我有一个嵌套的面板,里面的AutoScroll
属性被设置为true。当我打开一个新窗口时,这个面板会滚动到开头。
为了解决这个问题,我在打开新窗口之前保存位置,并在关闭后重新设置位置。虽然这种方法可以实现,但它会先跳到开头,然后再回到我的位置。
AutoScrollPosition属性有些奇怪。当你读取它时,它会返回当前的滚动偏移量,但当你赋值时,你需要反转这些值:
private static Point GetAutoScrollPosition(Panel panel)
{
return panel.AutoScrollPosition;
}
private static void SetAutoScrollPosition(Panel panel, Point position)
{
panel.AutoScrollPosition = new Point(-position.X, -position.Y);
}
Point pos = GetAutoScrollPosition(myPanel);
SetAutoScrollPosition(myPanel, pos);
我做了类似于你写的东西
_scrollPozition = -(pnlMain.AutoScrollPosition.Y); DialogResult result = MessageBox.Show("删除:", MessageBoxButtons.YesNo); dgvClendar.Focus();
private void pnlMain_Paint(object sender, PaintEventArgs e) {
if (pnlMain.AutoScrollPosition.Y == 0)
{
pnlMain.AutoScrollPosition = new Point(0, _scrollPozition);
_scrollPozition = 0;
}
}
在绘制时它被设置了,但是如果你看一下,所有的东西都会瞬间移动。我需要阻止这个滚动条开始滚动,或者阻止绘制,并在滚动到当前位置后重新绘制。
autoscroll
设置为false
吗?