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