Почему щелчок в текстовом поле приводит к прокрутке панели AutoScroll до самого верха? - PullRequest
5 голосов
/ 05 декабря 2010

Завершая заполнение формы регистра в приложении C #, я заметил с панелью, если я включаю AutoScroll, а затем у меня есть текстовое поле, которое находится ниже прокрутки и щелкаю по нему, оно перепрыгивает до самого верха.Есть ли способ исправить это с помощью некоторого кода или это уместно?

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

Ответы [ 4 ]

15 голосов
/ 24 февраля 2012

У меня была такая же проблема. Я исправил это с помощью этого кода в моей панели:

protected override Point ScrollToControl(Control activeControl)
{
    return this.AutoScrollPosition;
}
2 голосов
/ 09 марта 2011

У меня была именно эта проблема.Мне пришлось снять стыковку с моих панелей в форме, и это решило проблему.

1 голос
/ 06 декабря 2010

Поскольку, очевидно, никто не видел такого поведения раньше и не мог дать быстрый ответ, я открыл Visual Studio, чтобы попытаться воспроизвести то, что вы описываете.

Я создал новый проект WinForms с GroupBox, содержащимPanel, свойство AutoScroll которого установлено в "True".Затем я добавил два новых GroupBox элемента управления внутри элемента Panel, каждый из которых содержал два элемента управления TextBox.Первый встроенный GroupBox находится вверху формы, полностью видимый при запуске;второй встроенный GroupBox находится внизу, где его необходимо прокручивать для просмотра.Это эквивалентно дизайну / макету, которые у вас есть, насколько я могу судить из вашего описания и видео.

Однако, когда я запускаю проект, прокрутите вниз до второго встроенного GroupBox и выберите один изTextBox контролирует, что он содержит, он выполняет точно так, как ожидалось .Элемент управления TextBox, на который я нажал, получает фокус, без прокрутки всей панели обратно вверх.Я не могу воспроизвести то, что вы видите.Если бы вы могли сказать мне, что я сделал неправильно при разработке моего тестового образца, или опубликовать наименьший пример проекта, необходимый для воссоздания поведения, с которым вы столкнулись, я мог бы помочь.

В противном случае, вотнесколько советов для изучения:

  1. Порядок табуляции объектов в вашей форме. Это действительно не должно вызывать поведение, описанное, потому что нажатие на элементе управления должно установить фокус на этот элемент управления, независимо от его положения в порядке вкладок, и повторное переключение порядка вкладок в моем примере проекта по-прежнему не дает того же эффекта.Но я полагаю, что в любом случае стоит попробовать.В режиме «Дизайн» перейдите в меню «Вид» и нажмите «Порядок вкладок».Все элементы управления, для которых вы можете установить порядок вкладок, будут иметь маленькую цветную рамку в верхнем левом углу, указывающую их порядок вкладок в каждом контейнере.Чтобы установить порядок табуляции, нажмите один раз на каждый из элементов управления в том порядке, в котором вы хотите, чтобы они были сфокусированы.

  2. Найдите свой код для любого <Control>.Focus или <Control.Select> операторов. Убедитесь, что у вас нет кода проверки, который каким-либо образом изменяет порядок табуляции во время выполнения.Это может привести к тому, что фокус переместится обратно к элементу управления, расположенному в верхней части вашего Panel, и заставит его автоматически прокрутиться до нового местоположения.

  3. Попробуйте воспроизвестиповедение в новом, чистом проекте. В идеале, создайте новый проект в Visual Studio и расположите элементы управления точно так же, как они есть в проекте, с которым вы испытываете трудности,Это то же самое, что я и сделал, отчасти потому, что у меня нет вашего конкретного проекта для работы, а также потому, что это лучший способ устранения неполадок, связанных с особенно сложным поведением.Скорее всего, в вашем дизайне или исходном коде есть какая-то особенность, которая вызывает такое поведение, а не какая-то ошибка в самих элементах управления.Но в любом случае, это позволит вам точно знать , где проблема возникает, что приблизит вас к решению.

0 голосов
/ 11 августа 2013

Вы можете использовать TableLayoutPanel "вместо" Panel ", чтобы полоса прокрутки не меняла свою позицию.

...