Моей первой рекомендацией было бы избежать этого. Наличие полупрозрачного фона с непрозрачными элементами управления будет выглядеть несколько странно. Вместо этого рассмотрите возможность изменения непрозрачности, когда форма активна, скажем, от 0,3 до 0,7, чтобы ее было легче читать.
Также другая проблема, если некоторые элементы управления непрозрачны, а фон почти прозрачен, тогда ваш интерфейс может не работать на некотором фоне. Например, если фон действительно темный, то темный текст (элемент управления) будет плохо различим. Если фон белый, то белые элементы управления, такие как поле редактирования, будут иметь тот же цвет, что и фон.
Вы можете получить несколько идей из комментариев других людей. Несмотря на то, что некоторые комментарии относятся к WPF, вы можете принять некоторые идеи для WinForms. И если вы не получите ожидаемый результат, вы можете также рассмотреть возможность использования WPF для этой части пользовательского интерфейса.
Сказав это, возможный обходной путь, чтобы получить то, что вы хотите, - это создать два окна верхнего уровня в одной и той же позиции (и переместить / изменить их размер в зависимости от ситуации). Таким образом, вы можете иметь одно окно с ключом прозрачности и желаемым фоном для непрозрачной области, которая будет использоваться, чтобы иметь непрозрачную и полупрозрачную область. Другое окно будет использовать непрозрачность, чтобы оно было полупрозрачным. Это окно, которое будет содержать ваши элементы управления пользовательским интерфейсом (и то, которое будет сверху).
В прошлом я использовал эту технику для создания полупрозрачной клиентской области с полностью непрозрачным кадром в одном приложении, где я хочу иметь возможность видеть через клиентскую область (регулируемая непрозрачность), чтобы я мог "рисовать" в мое окно, используя изображение в другом приложении в качестве ссылки.
Еще один комментарий заключается в том, что вам может потребоваться фактический контроль с дескриптором окна и прямым доступом к Win32 API для некоторых настроек, которые недоступны в WinForms и / или WPF. В моем приложении я обрабатывал активацию таким образом, что, если я нажимаю на окна нижнего уровня, окно верхнего уровня все еще отображается как активное (цвет строки заголовка). Если у вас нет стандартного заголовка (либо рамка является пользовательской, либо рамки вообще нет), то у вас такой проблемы не будет.
Как подсказывают некоторые ссылки в разделе комментариев, может также оказаться возможным получить то, что вы хотите, с помощью одного окна верхнего уровня. Я не пробовал это. Фактически, когда я пробую вышеупомянутое решение, я думаю, что мое приложение все еще поддерживалось в Windows XP, и поэтому вы более ограничены в возможностях, и поведение несколько отличается по существу, потому что XP более или менее записывает напрямую на экран, в то время как Vista и позже используйте растровые изображения (буферы) для каждого окна.
Я также использовал комбинированную клавишу прозрачности и непрозрачность для заставки (в одном окне), и она работает в большинстве систем, но иногда я получал черный фон вместо желаемого фона в некоторых системах (возможно, на некоторых машинах XP с определенной конфигурацией).