2012-03-04 3 views
0

내 winform 응용 프로그램을 사용하여 다음 시나리오를 달성하고 싶습니다. 응용 프로그램을 시작할 때윈도우 폼을 투명하게 만드는 방법은 무엇입니까?

때 바탕 화면에 남아 있습니다. 경우 및 사용자가 1 분 동안 예를 들어 응용 프로그램을 사용하지 않은 경우 투명성을 잃어 버리고 싶습니다. (기본 폼의 투명도가 반으로 줄어 듭니다)

및 응용 프로그램이 사용 된 경우 (포커스, 마우스 호버링 ...) 다시 한 번 기본 폼의 투명도 값을 100 %로 다시 설정합니다.

그래서 실제로 어디에서 시작해야합니까?

내가 다른 스레드에서 이벤트를 발생시키는 타이머를 사용해야한다고 가정하면 1 분에 도달하지만 여기에서 질문은 어떻게 다른 스레드의 이벤트를 수신 할 것인가?

form1.Opacity = 0.5; 

당신은 Application Idle 이벤트로 활용할 수 시간 제한 타이머를 시작하기 : 내가

답변

0

양식은 불투명도 값이

감사) 타이머 사용.

0

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(); 
} 

불투명도이 해고한다 (정확하게 1로 다시 설정되어 있는지 확인하기 위해 트랩에해야 할 수도 있습니다 SizeChanged 같은 다른 이벤트가 있습니다 양식이 최소화 된 상태로 복원 된 경우) 및 ResizeEnd.

관련 문제