Как говорит Ларс, в форме есть свойство Opacity
.
Чтобы установить непрозрачность равную половине, когда форма неактивна, вам нужно обработать событие Deactivated
или Application.Idle . При этом запускается таймер, который отправит сообщение обратно в форму (в потоке пользовательского интерфейса), чтобы фактически установить значение.
private void Form_Deactivate(object sender, EventArgs e)
{
this.inactiveTimer = new Timer();
this.inactiveTimer.Interval = 1000;
this.inactiveTimer.Tick += this.InactiveTimer_Tick;
// Start timer
this.inactiveTimer.Start();
}
private void InactiveTimer_Tick(object sender, EventArgs e)
{
// This is being handled on the UI thread
this.Opacity = 0.5;
this.inactiveTimer.Stop();
}
Если вы хотите, чтобы форма постепенно приобретала прозрачность, установите интервал таймера на меньшее значение (скажем, 100 мс) и уменьшите прозрачность с помощью шагов на каждом тике. Затем, когда непрозрачность достигнет 0,5, остановите таймер.
Событие Activated
наступает, когда форма снова становится активной:
private void Form_Activate(object sender, EventArgs e)
{
this.Opacity = 1.0;
// Stop the timer for the cases where the user reactivates the app
this.inactiveTimer.Stop();
}
Существуют и другие события, такие как SizeChanged
, которые могут потребоваться перехватить, чтобы убедиться, что непрозрачность правильно установлена на 1 (это срабатывает, когда форма восстанавливается из свернутой формы) и ResizeEnd
.