Перекраска панели

Моя проблема в том, что у меня есть панель в панели. Внутри у меня есть свойство AutoScroll, установленное в true. Когда я открываю новое окно, эта панель прокручивается до начала.

Я делаю это, я сохраняю позицию перед открытием нового окна и устанавливаю ее после закрытия. Это работает, но он переходит к началу, а затем обратно к моей позиции.


person Community    schedule 15.07.2009    source источник
comment
Веб-формы? апс .нет? Не могли бы вы опубликовать код, чтобы объяснить это лучше?   -  person MaLKaV_eS    schedule 15.07.2009
comment
Я подозреваю WinForms здесь.   -  person Noldorin    schedule 15.07.2009


Ответы (3)


Свойство 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);
person Fredrik Mörk    schedule 15.07.2009

Вы пытались установить autoscroll на false?

person Daniel F. Thornton    schedule 15.07.2009

Я делаю что-то вроде Вы написали

_scrollPozition = -(pnlMain.AutoScrollPosition.Y); DialogResult result = MessageBox.Show("Удалить: ", MessageBoxButtons.YesNo); dgvClendar.Focus();

private void pnlMain_Paint (отправитель объекта, PaintEventArgs e) {

        if (pnlMain.AutoScrollPosition.Y == 0)
        {
            pnlMain.AutoScrollPosition = new Point(0, _scrollPozition);
            _scrollPozition = 0;
        }
    }

на краске это установлено, но если вы посмотрите, все движется на мгновение. Мне нужно заблокировать эту прокрутку, чтобы начать, или заблокировать рисование и перерисовать после прокрутки до текущей позиции.

person Community    schedule 15.07.2009
comment
Вы бы не хотели делать это в событии Paint; она поднимается снова и снова, как только какая-то часть панели нуждается в перекраске. Назначьте позицию во время Form_Load или другого события, которое происходит до того, как форма станет видимой. - person Fredrik Mörk; 15.07.2009