Остановить прокрутку таблицы стола - PullRequest
1 голос
/ 25 августа 2010

У меня есть проект на C # .NET 3.0, который использует TableLayoutPanel, содержащий несколько строк элементов управления. Если я прокручиваю вниз так, что верхний элемент больше не виден, затем удаляю элемент управления в одном столбце и заменяю его новым элементом управления, TableLayoutPanel прокручивает обратно к верху.

/// the panel in question
private System.Windows.Forms.TableLayoutPanel impl_;

/// The user has clicked a linklabel in the panel. replace it with an edit-box
private void OnClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    LinkLabel link_label = sender as LinkLabel;
    TextBox new_edit = new TextBox();
    // setup the new textbox...

    TableLayoutPanelCellPosition pos = impl_.GetCellPosition(link_label);
    impl_.Controls.Remove(link_label);
    impl_.Controls.Add(new_edit, pos.Column, pos.Row);
    new_edit.Focus();
}

Что мне нужно сделать, чтобы не изменить положение прокрутки?

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

Вы удаляете элемент управления с фокусом.Он попытается найти другой, на который нужно обратить внимание, прокручивая его при необходимости.Если не считать выделения другого элемента управления, одна вещь, которая может сработать, - это добавление TextBox и предоставление ему фокуса до того, как вы удалите метку.

0 голосов
/ 06 апреля 2016

Решение Ханса Пассанта - лучшее для контекста. Но в других случаях, когда вы не можете работать с фокусом, вы можете использовать AutoScollPosition, чтобы вернуться к предыдущей позиции:

Point scrollPosition = tlp.AutoScrollPosition;

//make changes here

tlp.AutoScrollPosition = new Point(-scrollPosition.X, -scrollPosition.Y) //according to the documentation negative coordinates are returned but positive ones need to be assigned
...