2010-05-06 5 views
5

이 Windows Forms 응용 프로그램은 알림 영역에 있습니다. 아이콘을 클릭하면 맨 앞에 표시되고 다시 클릭 (또는 앱 X 아이콘 클릭)되면 다시 표시됩니다. 이것은 아이콘을 클릭하여 표시 할 때 창 상단이 항상 중요하게 보이는 앱 유형입니다 (선택 사항 임).Windows Forms에서 TopMost 속성을 사용하는 데 정말로 괴로운 버그가 발생했습니다.

아이콘을 마우스 오른쪽 버튼으로 클릭하면 "항상 맨 위에"옵션을 활성화할지 여부를 선택할 수있는 상황에 맞는 메뉴가 나타납니다. 응용 프로그램이 처음 시작되면 응용 프로그램 설정이 XML 파일에서 읽히고 99 %가 정상적으로 작동하고 TopMost 속성이 제대로 읽히고 쓰여집니다.

잠시 후 (보통, 최대 절전 모드 및 거의 종료하지 않음) TopMost은 작동을 멈 춥니 다.. 옵션을 변경하지 않고 옵션 값을 변경하는 것이 아니라 알림 영역 아이콘을 클릭하고 앱이 맨 앞에 표시되지 않는다고 생각합니다. 표시되지만 배경에 있습니다 (Alt + Tab에 표시됨). "항상 위에"있지는 않습니다. 상황에 맞는 메뉴를 표시하고 옵션을 사용하지 않도록 설정 했으므로 (사용하도록 설정했기 때문에) 다시 활성화하면 이후에 작동하기 시작합니다. 응용 프로그램은 이제 "항상 맨 위에"있습니다. 그러나 잠시 후이 능력을 잃을 수 있습니다.

왜 이런 일이 발생하고 이런 일이 발생하는지 이해할 수 없습니다. 왜 아무 생각 없어? 그렇지 않다면 어떻게 그런 행동을 디버깅하려고 할 수 있습니까?

편집 :
은 내가 TopMost 속성이 나는 이상한 동작을 알 수 있지만, 더 좋은 없었다 있는지 확인하기 위해 변경되었을 때 메시지 박스를 표시하는 코드 조각을 추가했다. 양식이 TopMost = true 이었기 때문에 도움이되지 않았지만 여전히 배경에있었습니다 ...

답변

5

"최상위"창 하나 이상이 있습니다. 최상위는 "최상위가 아닌 모든 창 앞에"라고 말합니다.

데스크톱을 다시 초기화 할 때 (예 : 최대 절전 모드 일 때) 다른 SetWindowPos(hwnd, HWND_TOPMOST, ...) (기본 Win32 API 호출)이 필요합니다.

해결 방법은 창을 표시 할 때 다시 설정하고 속성을 설정할 수 있습니다.

또 다른 가능성은 윈도우를 숨기면 암시 적으로 Win32가 어떻게 구현하는지 또는 WinForms가 숨기기/표시 윈도우를 명시하는 방식에서 Z 순서를 변경한다는 것입니다.

+0

내 앱이 최상위 창만은 아니지만 Windows Explorer, Firefox 등은 최상위가 아니며 창은 그 위에 있어야합니다. 이 결함 때문에 어떤 일도 일어나지 않습니다. 나는 옵션을 사용 불가능하게하고 다시 사용 가능하게해야한다. –

+0

그리고 최대 절전 모드가 문제라고 생각하지 않습니다. 방금 테스트를 수행하고 Explorer와 Firefox를 사용하여 컴퓨터를 최대 절전 모드로 전환했습니다. 그것을 복원 한 후, 내 애플 리케이션은 여전히 ​​최고입니다.그것은 다른 상황에서 발생해야합니다 ... –

+0

내가 제안한 해결 방법을 시도 했습니까? (창을 표시 한 후 재설정하고 "최상위"속성을 설정하십시오.) – peterchen

1

마찬가지로 peterchen 나는 근본 원인을 얻는 방법을 알지 못합니다. 그러나 조금 더 간단하게 만들지 않겠습니까?

아이콘을 클릭하면 창을 표시하고 TopMost가 여전히 활성 상태임을 의지합니다. 창을보기 바로 전에 현재 설정으로 SetWindowPos()으로 전화하지 않는 것이 어떻습니까? 이것은 성능상의 문제 (사용자가 아이콘을 클릭 한 경우에만 발생 함) 나 다른 부작용을 일으키지 않아야합니다.

근본 원인을 알아내는 것이 좋겠지 만 조금만 해결하면 해결할 가치가 없을 수도 있습니다.