Winforms 如何使窗体透明?

Winforms 如何使窗体透明?,winforms,timer,mouseevent,transparency,keyboard-events,Winforms,Timer,Mouseevent,Transparency,Keyboard Events,我想用我的winform应用程序实现下一个场景: 当应用程序启动时,它会停留在桌面上。如果用户有一段时间没有使用该应用程序,例如1分钟,我希望它失去它的透明度(主窗体的透明度减少到一半) 如果再次使用应用程序(焦点、鼠标悬停…),则主窗体的透明度值将设置回100% 那么我到底需要从哪里开始呢 我假设我需要在不同的线程中使用一个计时器,它触发一些事件以防它达到1分钟,但这里的问题是,我将如何(以及哪些)在不同的线程中侦听from的事件(我用于计时器的线程) 谢谢,表单有一个不透明度值: form1

我想用我的winform应用程序实现下一个场景:

当应用程序启动时,它会停留在桌面上。如果用户有一段时间没有使用该应用程序,例如1分钟,我希望它失去它的透明度(主窗体的透明度减少到一半)

如果再次使用应用程序(焦点、鼠标悬停…),则主窗体的透明度值将设置回100%

那么我到底需要从哪里开始呢

我假设我需要在不同的线程中使用一个计时器,它触发一些事件以防它达到1分钟,但这里的问题是,我将如何(以及哪些)在不同的线程中侦听from的事件(我用于计时器的线程)


谢谢,表单有一个不透明度值:

form1.Opacity = 0.5;

您可以点击事件启动超时计时器。

正如Lars所说,表单上有
不透明属性

若要在窗体处于非活动状态时将不透明度设置为一半,您需要处理
已停用的
或事件。在这种情况下,启动一个计时器,它将向表单(在UI线程上)发送一条消息,以实际设置值

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 ms),并在每个刻度上逐步降低透明度。然后,当不透明度达到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