절대적으로해서는 안되는 경우를 제외하고는 일반적으로 TopMost를 피하십시오. 절대적으로해서는 안되는 경우, 한 번에 하나 이상의 TopMost 양식을 사용하지 마십시오. (결국, 3 가지 TopMost 양식이있을 수 없습니다 - 누군가를 잃어 버리게됩니다).
먼저 Form.ShowDialog()
으로 전화 할 때 소유자를 올바르게 설정했는지 확인하십시오. 이렇게하면 새 양식이 적절한 위치에 표시 될 수 있으며 주변에있는 경우 응용 프로그램의 동작이 향상됩니다. 둘째, 언제든지 TopMost 창이 하나만 있는지 확인하십시오. 이러한 일을 함께하지 않으면 가장 확실하게 문제가 발생할 수 있습니다. 예 :
// MainForm.cs -- Don't do this
this.TopMost = true;
childForm.TopMost = true;
childForm.ShowDialog(/*no parent spec'd*/);
이제 어떻게 되나요? 메인 양식과 어린이 양식 모두 최상위에 있으므로 잃어 버리게됩니다. MainForm은 최상위로 childForm을 만들었지 만 childForm에는 부모가 없습니다. 아마도 Windows가 데스크톱을 부모로 만들기로 결정했을 것입니다. 이로 인해 새로 열린 자녀 양식에 기본 양식이 남을 수 있습니다.
ShowDialog (parentHandle)는 지금까지 말할 수있는 한 내 문제를 해결했습니다. 하지만 또 다른 질문이 생깁니다 : 왜 거기에 ShowDialog (/ * parent spec'd * /)가 없습니까; 100 가지 원인 중 99 가지에서만 작동합니까? 이런 종류의 버그로 인해 실제로 하나의 견과류가 생길 수 있습니다. 나는 코딩 UI가 코더를 통계 분야로 끌어 들일 것으로 기대하지는 못했다. :) – Matze
좋은 질문입니다. 답변을 찾지 못했습니다. 가장 좋은 추측은 "http://preview.tinyurl.com/c6cfze"와 관련이 있습니다. 기본 API는 어떤 이유에서든 NULL 부모 창을 허용합니다 (어쩌면 ShowDialog()는 일부 컨텍스트에서 부모를 가질 수 없습니까?). –