Это ведет себя по проекту.
Из документов: Событие Shown наступает всякий раз, когда форма first показывается.
Кроме того, вы не должны обрабатывать событие Shown в своем классе, скорее вы должны переопределить OnShown.
Чтобы достичь того, чего вы хотите, вы можете попробовать переопределить метод OnVisibleChanged.Внутри метода, если форма видима, выполните ваш код.
Как и событие Shown, вы не должны обрабатывать его в своем классе формы, вместо этого переопределите соответствующий метод:
Издокументы: метод OnVisibleChanged также позволяет производным классам обрабатывать событие, не подключая делегат.Это предпочтительный метод для обработки события в производном классе.