Элементы управления находятся в неправильном месте, когда они привязаны к нижнему или правому краю в SplitContainer, который находится в Panel или другом SplitContainer при высоких настройках DPI, таких как 160 % с .Net Framework 4.0 или 4.5. . Это происходит, когда для AutoScalMode формы установлено значение Font или DPI.

Он работает правильно, если элемент управления привязан вверху слева или SplitContainer не находится в другом элементе управления, или используется .Net Framework 3.5, или при 100% DPI.

Как я могу это исправить?

При 100% DPI это выглядит правильно, вот так: Форма с кнопкой внизу справа

При 160% DPI кнопка находится не в том месте, как здесь: введите здесь описание изображения

1
user1318499 21 Мар 2020 в 21:00
 – 
user10216583
21 Мар 2020 в 23:56
У вас есть дочерний контейнер, в котором размещена кнопка Dock.Fill ред.? Это большое смещение местоположения для этой кнопки. Я считаю, что свойство Anchor для этой кнопки уже установлено на AnchorStyles.Bottom Or AnchorStyles.Right
 – 
user10216583
22 Мар 2020 в 00:16
JQSOFT, я не могу найти ничего полезного в этих статьях. В нижнем SplitterPanel нет свойства Dock, но в верхних SplitterPanel, SplitContainer и Panel установлено Dock.Fill. Да, кнопка привязана к (...Bottom or ...Right).
 – 
user1318499
22 Мар 2020 в 03:25
2
Является ли ваше приложение DpiAware? В любом случае, в качестве предложения используйте TableLayoutPanel для определения макета дочерних элементов управления. В вашем случае вы также можете использовать другую панель, прикрепленную к нижней части, внутри панели SplitContainer и добавить кнопку на эту другую панель. Вложенные контейнеры — обычная конструктивная особенность.
 – 
Jimi
22 Мар 2020 в 03:48
Да, у него есть настройка dpiAware в манифесте. Большинство других элементов управления масштабируются правильно, в том числе в других SplitContainer, но не во вложенных SplitContainer.
 – 
user1318499
22 Мар 2020 в 05:03

1 ответ

В SplitterPanel поместите TableLayoutPanel с одной ячейкой и Dock = DockStyle.Fill. В этой ячейке поместите Panel с Dock = DockStyle.Fill, затем поместите элементы управления в эту самую внутреннюю панель, и привязка будет работать правильно.

Другой способ, который не так удобен для элементов управления, которые не привязаны к правому нижнему углу, заключается в том, что в SplitterPanel поместите Panel с Dock = DockStyle.Bottom (красный), а внутри него поместите еще один Panel с помощью Dock = DockStyle.Right (желтый), затем поместите элементы управления в эту самую внутреннюю панель.

Вот это при 100% DPI, как и было задумано: Две вложенные панели со 100% DPI

И при 160% DPI кнопка все еще находится в правильном месте: Две вложенные панели с разрешением 160% DPI

1
user1318499 23 Мар 2020 в 00:55