2009-09-08 6 views
3

응용 프로그램이 잠금을 획득하려고 대기하는 동안 사용자에게 알려주는 C# Windows Forms 응용 프로그램에 상태 창이 표시됩니다. 이것은 응용 프로그램에서 정의한 것입니다. 그러나 사용자가 다른 창 (예 : 뒤에있는 더 큰 기본 창)을 클릭하는 경우에도 창은 항상 표시되고 항상 내 응용 프로그램의 다른 모든 창의 맨 위에 있어야합니다.내 응용 프로그램의 다른 모든 창 위에 창을 유지하는 방법은 무엇입니까?

앱이 백그라운드에서 계속 시도하고 잠금 장치가 결국 획득 될 수있는 경우 자동으로 창을 닫아야하기 때문에 모달 (ShowDialog()를 사용할 수 없음)이어야합니다. 전체 윈도우 스테이션 (즉 해당 터미널 세션에서 실행중인 모든 응용 프로그램).

저는 Form.TopMost 속성을 알고 있지만, 다른 응용 프로그램의 경우에도 하나의 창을 가져와 유지할 수 있습니다. 이것은 분명히 내가 원하는 것이 아닙니다.

나는 이것이 가능하다는 것을 알고 있으며 다른 응용 프로그램에서 여러 번 본 적이 있습니다. 나는 그것이 어떻게 행해질 수 있는지 모른다.

+0

주 부모와 다른 여러 폼 클래스를 시작하고 이벤트의 원래 여는 타임 라인을 유지하려는 경우 owner 속성을 모두 생략하십시오. 이렇게하면 부모가 열어 놓은 각 자식 창이 부모 위에 열리게됩니다. 부모 창과 상호 작용할 때 숨겨 지지만 활성화 된 상태로 유지되지만 부모가 여는 다른 하위 창과 상호 작용할 때는 포커스를 잃을 수 있습니다. 소유자 속성을 일관성없이 사용하면 자식 창에서 이상하고 비정상적인 동작이 발생합니다. – IbrarMumtaz

답변

9

주 양식을 상태 양식의 Show 방법으로 전달하면 기본 양식 위에 유지되지만 다른 응용 프로그램 위에 남지 않습니다. 따라서 주 폼에서 다음과 같은 코드를 가질 수 있습니다 :

그러나 이것은 응용 프로그램의 하나의 단일 창을 소유자로 나타냅니다.

+0

또한 여러 창과 함께 작동하는 것 같습니다. (동일한 Form 클래스의 여러 인스턴스가 적어도 있습니다.) 모든 인스턴스는 소유 윈도우 앞에 있습니다. – ygoe

4

자식 폼의 자식 폼의 속성을 Owner 속성을 부모 폼으로 설정하고 Show을 사용하여 자식 폼을 표시해야합니다.

+0

두 솔루션 모두 잘 작동합니다. Unfortuinately 나는 단지 하나의 답변을 허용 된 해결책으로 표시 할 수 있습니다 (그러나 두 가지 모두를 투표하십시오). 또한 작업 표시 줄과 Alt + Tab 창 목록을 엉망으로 만들지 않도록 소유 된 창의 ShowInTaskbar 속성을 false로 설정하는 것이 좋습니다. – ygoe