面板重新绘制

3

我的问题是我有一个嵌套的面板,里面的AutoScroll属性被设置为true。当我打开一个新窗口时,这个面板会滚动到开头。

为了解决这个问题,我在打开新窗口之前保存位置,并在关闭后重新设置位置。虽然这种方法可以实现,但它会先跳到开头,然后再回到我的位置。


2
WebForms?aps.net?你能发一些代码来更好地解释吗? - MaLKaV_eS
我怀疑这里是WinForms。 - Noldorin
3个回答

5

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);

0

我做了类似于你写的东西

_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;
        }
    }

在绘制时它被设置了,但是如果你看一下,所有的东西都会瞬间移动。我需要阻止这个滚动条开始滚动,或者阻止绘制,并在滚动到当前位置后重新绘制。


你不会想在Paint事件中执行此操作;每当面板的某个部分需要重新绘制,Paint事件就会被不断触发。在Form_Load或其他在窗体可见前出现的事件中指定位置。 - Fredrik Mörk

0
你尝试过将autoscroll设置为false吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接