Как сделать оконные формы прозрачными? - PullRequest
0 голосов
/ 05 марта 2012

Я бы хотел добиться следующего сценария с помощью приложения winform:

при запуске приложения оно остается на рабочем столе. в случае, если пользователь некоторое время не использовал приложение, например, в течение 1 минуты, я бы хотел, чтобы оно потеряло его прозрачность (прозрачность основной формы уменьшена до половины)

В случае, если приложение использовалось (фокус, наведение мыши ...) еще раз, значение прозрачности основной формы возвращается к 100%.

так где же на самом деле мне нужно начать?

Я предполагаю, что мне нужно использовать таймер в другом потоке, который запускает какое-то событие в случае, если оно достигает 1 минуты, но вопрос здесь в том, как (и который) я бы прослушивал события из другого потока (тот, который использовать для таймера)

спасибо

Ответы [ 2 ]

0 голосов
/ 05 марта 2012

Как говорит Ларс, в форме есть свойство 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.

0 голосов
/ 05 марта 2012

Формы имеют значение непрозрачности:

form1.Opacity = 0.5;

Вы можете нажать на событие Приложение Idle , чтобы запустить таймер тайм-аута.

...