Рисование кнопки на панели winform при прокрутке панели
На панели я рисую элементы управления, такие как кнопка / текстовое поле, начиная с (0,0) на панели. Эти элементы управления невидимы и отключены в начале. У меня есть кнопка за пределами панели, которая делает эти кнопки / текстовые поля видимыми при нажатии и помещает их в новое место на панели.
Проблема в том, что если пользователь прокрутил панель до некоторого (x,y), а затем нажал кнопку "сделать видимым", новое (x,y) расположение кнопки рассчитывается из текущего (x,y) местоположения панели - не сверху (0,0) панели.
Мне интересно, если это правильное поведение панели и что, чтобы исправить это, мне нужно рассмотреть this.VerticalScroll.Value
как (x,y) смещение, когда я переставляю кнопки.
2 ответа
Это то, что сработало для меня. Когда вы получаете кнопку Y / текстовое поле и т.д., сделайте:
relativeControlTop = theControl.Top - thePanel.AutoScrollPosition.Y;
Когда вы устанавливаете верх сделать:
relativeControlTop = theControl.Top + thePanel.AutoScrollPosition.Y;
Надеюсь это поможет.
Не уверен, поможет ли это в вашей ситуации, но я думаю, что стоит попробовать:
Если вы разрабатываете Panel с использованием Visual Designer, я рекомендую использовать две панели: полноразмерную, содержащую все элементы управления, ее размер позволяет легко проектировать; и меньший, который имеет предполагаемый физический размер. Затем просто добавьте большой как единственный дочерний элемент меньшего (например, innerPanel в bottomPanel).
См. Эту статью Article: WinForms AutoScroll Experiment для более подробной информации.