2011-01-18 2 views
2

메인 폼 (frmA)을 차단하지 않고 다른 모든 폼이 MdiChild 폼 (frmC)을 열지 않고 MdiChild (frmB) 폼에서 모달 폼 (frmD)을 열어야합니다. 그런 다음 frmC로 전환하면 frmD가 숨겨집니다.다른 모든 MdiChildForms 및 MdiParent를 차단하지 않고 MdiChildForm의 ShowDialog를 사용할 수 있습니까?

This is 비슷한 질문이지만 Mdi 응용 프로그램에는 해당되지 않습니다.

모달 대화 상자를 열고 해당 대화 상자를 연 mdi 하위 양식 만 차단하는 방법이 있습니까?

+1

은 해당 링크 "이것은".. 올바른 그것을 –

+0

감사를 놓친 정확한 (오히려 ShowDialog''이상)은'Show' 방법을 사용하고 P를 사용하여 MDI 자식 폼의'WS_DISABLED' 스타일 플래그를 설정 잘못이었다 무엇 – referee

+1

/Invoke, [P Daddy 's Excellent answer] (http://stackoverflow.com/questions/428494/is-it-possible-to-use-showdialog-without-blocking-all-forms/428782#428782)에서 제안한대로 "비슷한 질문"? –

답변

0

한 가지 전략은 .Show() 방법을 사용하는 대신 .ShowDialog() 모달 대화 상자를 엽니하고 .Show() 메소드를 호출하기 직전에 false로 MdiChild의 Enabled 속성을 설정하는 방법에 의존하는, this article에 설명되어 있습니다.

는 그런 다음 대화 상자가이 대화 상자의 FormClosing 이벤트를 처리하기 위해 MdiChild 형태의 이벤트 핸들러를 작성해야합니다 즉, 닫힐 때 true로 다시 MdiChild의 Enabled 속성을 설정해야합니다.

+1

단순히 자식 폼의'Enabled' 속성을 false로 설정하는 문제는 모든 컨트롤이 비활성화 된 모양을 갖게됩니다 (즉, 회색으로 표시됨). 이것이 Windows에서 모달 대화 상자가 작동하는 방식이 아니라는 것을 고려하면 응용 프로그램이 사용자에게 혼동을 줄 수 있습니다. 그러나 이미 코멘트에서 제안한 더 나은 솔루션이 있습니다. 에 의해 연결된 질문에 [P 아빠의 대답] (http://stackoverflow.com/questions/428494/is-it-possible-to-use-showdialog-without-blocking-all-forms/428782#428782)을 참조하십시오. OP. –

+0

당신은 유효한 포인트를 만듭니다 - @P 아빠가 준 대답은 매우 포괄적입니다. – Jazza

관련 문제