Да, очень грустно, что так работает. Это имело большой смысл в то время, уже 10 лет назад. Предполагалось, что Windows Forms станет заменой VB6, доминирующего дизайнера пользовательского интерфейса «укажи и щелкни» в то время. И Form_Load был важным в VB6, вот где вы настраивали представление формы.
Это было не совсем уместно с самого начала, у класса Form есть истинно чистокровный конструктор. И вы можете установить свойства элемента управления в конструкторе до того, как будет создан фактический собственный элемент управления Window. В WF куча кода, чтобы заставить это работать. Код, на который опирается дизайнер, устанавливает эти свойства до события Load. Это очень эффективно, так как многие элементы управления становятся медленнее lot , когда их нужно обновить после создания окна. Как ListView и TreeView.
Есть несколько причин не использовать конструктор самостоятельно, как это делает дизайнер, тем более что IDE C # не пытается скрыть конструктор. Кроме одного: вам нужно событие Load, когда вы пишете код, требующий знания фактического размера формы. Этот размер неизвестен до тех пор, пока окно фактически не будет создано, событие Load является самым ранним после этого. Это должно быть редкостью.
И, конечно, если вы do хотите использовать Load, вы переопределяете OnLoad вместо использования события Load. Это будет еще один.