The only way I know to do this would be to let the grid paint with the way the framework scrolls it, and then recroll it back to where you want it. This requires a timer and can result in an occassional flash as the grid redraws. You would handle both the Enter and Leave events.
private int lastTopRow = -1;
Timer t;
private void grid1_Enter(object sender, EventArgs e)
{
if(t == null)
{
t = new Timer();
t.Interval = 20;
t.Tick += new EventHandler(t_Tick);
}
t.Start();
}
private void grid1_Leave(object sender, EventArgs e)
{
lastTopRow = this.grid1.TopRowIndex;
}
private void t_Tick(object sender, EventArgs e)
{
t.Stop();
this.grid1.TopRowIndex = lastTopRow;
}