В основном проблема заключается в том, что GDI + (и, соответственно, Windows Forms) использует пиксели устройства в качестве единицы измерения по умолчанию. Когда вы изменяете настройку DPI, физический размер пикселя фактически не изменяется (пиксель является пикселем), но шрифты и изображения, которые измеряются в непиксельных размерах, соответственно масштабируются. Windows Forms пытается приспособиться к этому как можно лучше, предоставляя больше места для разметки, но единственное верное решение - это использовать непиксельную систему измерений повсюду. Это то, что делает WPF.
В WPF при 96 DPI независимый от устройства пиксель соответствует тому же размеру, что и физический пиксель. Но когда вы меняете DPI системы, WPF масштабирует виртуальную систему координат глобально. Приложение, элементы управления и т. Д. Не имеют представления о том, что они больше не выровнены по физическим пикселям. На самом деле это может иногда вызывать проблемы с наложением в WPF, но вам почти никогда не придется беспокоиться о том, что макет приложения отличается от настроек DPI.
Единственное, что вы можете сделать, чтобы минимизировать проблему в Windows Forms, - это использовать «новые» (начиная с .NET 2.0) панели макетов, такие как TableLayoutPanel, FlowLayoutPanel и т. Д. По возможности используйте Anchor, Dock и AutoSize. Это позволит Windows Forms переформатировать ваш пользовательский интерфейс настолько, насколько это возможно.
Также помните, что если вы создаете формы с нестандартным разрешением, Windows Forms будет использовать это как «базовый» размер. Это почти всегда портит вещи. Поэтому постарайтесь использовать 96 DPI для разработки ваших форм.