2010-03-30 4 views
0

이 메시지는 This one과 매우 비슷한 문제입니다.긴 계산 후 MessageBox가 mdi 형식으로 표시되지 않습니다.

MDI 메인 포럼에 여러 어린이 양식이 있습니다. 그 중 하나는 긴 계산을 수행하고 오류가 발생하면 예외를 던집니다 (모든 작업은 동일한 스레드에서 수행됩니다). 그런 다음 메시지 상자에 오류가 있음을 사용자에게 알리려고하지만 표시되지 않습니다 (그러나 MDI Main에서 포커스를 훔쳐 응용 프로그램이 완전히 응답하지 않습니다).

Application.DoEvents()를 호출하면 beheviour가 약간 변경됩니다 (악의적 인 것은 알지만 이것이 최후의 수단입니다). 그런 다음 양식은 완전히 활성 상태로 유지되고 메시지 상자는 활성 응용 프로그램 (Alt + Tab)을 다른 것으로 변경 한 후 다시 표시 한 후에 만 ​​나타납니다.

메시지 상자가 표시되도록하려면 어떻게해야합니까? MessageBox.Show 메서드에 매개 변수로 활성 자식 및 MDI Main을 모두 전달하려고 이미 시도했습니다. 행동을 바꾸지 않습니다.

는 명확히하기 : 메시지 박스가 자식 폼의 일부입니다, 그러나이 시점에서 내가하지 휴식 응용 프로그램을 수행 어떤 방법으로 그것을 보여 기꺼이. messagebox는 모달이어야하지만 사용자가인지 할 수 있도록 표시되어야합니다.

+0

그래도 문제가 있습니까? – ChrisBD

+0

다른 스레드를 사용하여 messagebox를 표시하는 해결 방법을 작성했습니다. 나는 아직도이 질문에 답을 얻지 못했고 해결책은 해결 방법이므로 내 자신의 질문에 대답하기 위해 사용하지 않을 것이라고 생각합니다. –

답변

0

MessageBox는 MainForm 또는 ChildForms의 일부로 표시됩니까? MessageBox가 자식 폼에 있다면 아마도 MainForm에 이벤트를 전달하고 거기서 MessageBox를 열 수 있습니다.

0

문제는 메시지 상자가 모달이되는 경향이 있다는 것입니다. 이 인스턴스에서는 주 MDI 코드에서 처리기를 사용하여 대리자 나 이벤트를 사용하는 것이 훨씬 더 좋을 것이라고 생각합니다. 이렇게하면 주 응용 프로그램이 메시지 상자를 표시합니다. 필요한 정보를 전달하려면 EventArgsType을 쉽게 재정의 할 수 있습니다.

1

나는 동일한 문제가있었습니다. ALT 키를 누르면 팝업이 나타납니다.

사실 AutoSize 속성이 true 인 LinkedLabel로 밝혀졌습니다. LinkedLabel은 FlowLayoutPanel 안에있었습니다. LinkedLabel.Text 속성을 String.Empty로 설정할 때. LinkedLabel은 지속적으로 크기를 조정하려고 시도했기 때문에 GUI가 계속 바빠졌습니다.

AutoSize 속성을 끄면 GUI가 더 이상 위치를 다시 계산하지 않아도됩니다. GUI는 무료가 아니 었습니다. 그리고 팝업이 나타났습니다.

동일한 동작을하는 다른 컨트롤이있을 수 있습니다. 다음을 참조하십시오. https://connect.microsoft.com/VisualStudio/feedback/details/116884

관련 문제