Относительное позиционирование управления работает неправильно в Winforms MDI дочерний с полосами прокрутки, VB.NET - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть приложение VB. NET с родительским окном MDI с автопрокруткой и дочерним окном MDI, которое иногда больше родительского. До тех пор, пока полосы прокрутки находятся полностью вверху и влево или дочерний элемент MDI не больше родительского, установка относительных контрольных позиций в коде, кажется, работает - т.е.:

Control1.Left = Control2.Right + 10
Control1.Top = Control2.Top

Когда MDI child больше, чем его родитель, и прокручивается, относительное позиционирование кажется отключенным ровно на сумму прокрутки. В приведенном выше примере Control2 должен заканчиваться тем же Y, что и Control 1, на 10 пикселей вправо, но если родительское окно MDI имеет полосы прокрутки и было прокручено на 25 пикселей вправо и на 12 пикселей вниз, то Control2 заканчивается на 12 пикселей ниже и 35 пикселей вправо.

Как правильно установить значения верхнего / левого / расположения элементов управления в дочерней форме MDI таким образом, чтобы они фактически относились к родительскому элементу управления, а не к области просмотра?

1 Ответ

0 голосов
/ 04 февраля 2020

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

Поднимаясь по иерархии Control.Parent В конце концов я нашел объект Form с ненулевым AutoScrollPosition. Я смог изменить операторы, устанавливая положение новых элементов управления, используя AutoScrollPosition.X и .Y, в зависимости от ситуации, что исправило смещение.

...