2011-11-15 3 views
2

.net 메서드를 호출 할 수있는 기본 응용 프로그램이 있습니다. 내 .net 메서드는 모달 폼을 보여주는 새 스레드를 시작합니다.현재 응용 프로그램과 관련된 모든 창을 비활성화하십시오.

이제 내 .net 방법은 모달 양식이 표시되는 동안 주 앱에서 모든 창을 사용 중지해야합니다.

어떻게하면됩니까?

win32 메서드 "GetWindow"에 대해 생각하고 있었지만 메인 응용 프로그램 양식의 핸들이 필요했습니다.

예제에서 모달 대화 상자를 사용하여 메서드를 호출하는 기본 응용 프로그램을 볼 수 있습니다. threadingform-dlg가 열려있는 동안 주 응용 프로그램을 클릭하면 threadingform-dlg가 깜박입니다.

main app with modal dialog

+1

가장 좋은 방법은 될 것입니다. 그렇다면 추측은 없습니다. –

답변

1
foreach (Form openedForm in Application.OpenForms) { 
    if (openedForm.GetType() == FormToClose) { 
     openedForm.Hide(); 
    } 
} 
+0

괜찮 았어.하지만 비활성화 된 mainform 클릭 한 경우 threadingform "플래시"어떻게해야합니까? onclick 이벤트 추가없이 방법이 있습니다. ? – wuhi

+0

@wuhi : 'ShowDialog'로 스레딩 양식을 열면 * 깜박임 *이 자동으로 실행됩니다. – Otiel

4

대신 사용 Show()의 형태의 ShowDialog() 기능. 양식을 자동으로 모달로 만듭니다.

다른 모든 창을 사용할 수 없게하거나 호출하는 창만 사용할 수 없는지 나는 알 수 없습니다.

+0

실제로 나는 showmodal을 사용하고 있습니다. 하지만 정확히 내가 원하는 것은 아닙니다. 메인 앱의 버튼을 클릭하면 모달 대화 상자가 닫힌 후에 눌려지고 있습니다. : – wuhi

+0

폼이 별도의 스레드에서 표시되고 있기 때문에 그 효과가 없을 것입니다. – MusiGenesis

3

별도의 스레드에서 모달 폼을 표시하면 안됩니다. 스레드에서 모달이 아닌 폼을 표시하면 안됩니다. 대신 응용 프로그램의 기본 폼에서 모달 폼을 표시하십시오. 이렇게하면 일부 코드를 이동해야하므로 그렇게하십시오.

1

OpenForms 속성에 액세스하여 응용 프로그램의 모든 열린 창을 가져올 수 있습니다. 주요 응용 프로그램은 .NET 방법으로 자사의 창 핸들을 전달하는

var forms = Application.OpenForms; 
관련 문제