我想用我的winform應用程序實現下一個場景:如何使窗體成爲transperent?
當應用程序啓動時,它停留在桌面上。如果用戶暫時沒有使用該應用程序1分鐘,我希望它失去它的透明度(主窗體的透明度減少到一半)
在案例和應用程序被使用(焦點,鼠標懸停......),主窗體的透明度值再次設置爲100%。
所以實際上我需要開始?
我認爲我需要使用不同的線程一個定時器,觸發某些事件的情況下,它是達到1分鐘,但這裏的問題,如何(和)我會聽取在不同的線程事件(一我使用的定時器)
感謝
我想用我的winform應用程序實現下一個場景:如何使窗體成爲transperent?
當應用程序啓動時,它停留在桌面上。如果用戶暫時沒有使用該應用程序1分鐘,我希望它失去它的透明度(主窗體的透明度減少到一半)
在案例和應用程序被使用(焦點,鼠標懸停......),主窗體的透明度值再次設置爲100%。
所以實際上我需要開始?
我認爲我需要使用不同的線程一個定時器,觸發某些事件的情況下,它是達到1分鐘,但這裏的問題,如何(和)我會聽取在不同的線程事件(一我使用的定時器)
感謝
正如Lars所說,表格上有Opacity
屬性。
要在表單不活動時將不透明度設置爲一半,您需要處理Deactivated
或Application.Idle事件。在這裏開始一個計時器,它會將消息發送回表單(在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毫秒),並通過對每個蜱步驟降低透明度。然後當不透明度達到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
。