2011-01-22 6 views
0

진행률 개체로 표시되는 경계선없는 양식이 있습니다. 이것은 childform.show()를 통해 표시됩니다.대화 상자없이 하위 폼에 집중하십시오.

CS_DROPSHADOW를 그림자 (그림)로 지정하려면 우선 양식이 포커스를 잃을 때 (부모 클릭되거나 다른 양식 \ 응용 프로그램) 그림자가 사라집니다.

양식을 모달 양식과 비슷한 형태로 유지하려면 어떻게해야합니까? (UI가 아닌 다양한 스레드에서 호출되므로 showdialog를 사용할 수 없습니다.) Me.TopMost = True를 사용하면 분명히 작동하지만, 분명히 부모가 아닌 다른 모든 스레드 위에 폼을 배치합니다. 만큼 당신이 당신이 정말 사실 맨 위 =에 붙어있는 작업자 스레드에서이 창을 만드는으로

alt text

답변

1

. Winforms는 Show (owner) 오버로드를 사용할 수 없으며 부모가 UI 스레드에 의해 소유되었음을 감지하면 InvalidOperationException을 던집니다. Show()를 호출하면 데스크톱 창이 소유자가됩니다. 어떤 문제인지, 진행 창이 다른 창 뒤에 사라질 수 있으며 사용자가 쉽게 되돌릴 수 없습니다. 비동기식이므로 사용자가 UI 창에서 작업하는 동안 이 쉽게 발생하지만 팝업 창이 나타나지 않을 수도 있습니다.

단지이 문제를 푸는 대신 Control.BeginInvoke()를 사용하여 메서드가 UI 스레드에서 대화 상자를 만들도록하십시오. 이제 ShowDialog()를 호출하면 모든 문제가 해결됩니다.

관련 문제