저는 Windows Forms 응용 프로그램 인 .NET 3.5로 작업하고 있습니다. 특정 기간 후에 활동이없는 경우 현재 양식이 닫히고 사용자가 특정 정보를 표시하지만 다른 양식에 대한 액세스를 허용하지 않는 기본 "로그인하지 않은"양식으로 리턴되는 타이머를 설정했습니다.열려있는 모든 WinForm을 닫으시겠습니까?
Application.OpenForms는 열려있는 대부분의 양식을 닫을 수있는 목록을 제공하지만 Application.OpenForms는 MDI 양식 만 인식합니다. 이러한 MDI 양식 중 일부는 MessageBoxes 또는 다른 모달 폼을 가질 수 있습니다. 모달 양식 자체에 팝업 대화 상자가있는 경우도있을 수 있습니다.
저는 (bug) in Application.OpenForms을 알고 있습니다. Messagebox 또는 다른 유사한 양식을 만든 후에 속성이 변경되는 경우는 없습니다. 어쨌든, 그 양식에만 영향을 주어야하며, 나머지는 여전히 ApplicationOpenForms에 나열되어야합니다.
관심있는 것을 제외한 응용 프로그램의 모든 형식을 반복하고 닫는 우아한 방법이 있습니까? (또는 엄격히 말하자면, MDI 부모를 제외한 모든 노드를 닫고 내가 관심있는 것을 엽니 다.)
'foreach' 루프가 여기서 잘 작동한다고 생각합니다. – Brian
이것은 매우 혼란 스럽습니다. 특히 열려있는'MessageBox' 윈도우 (즉,'MessageBox.Show')가있을 때. 모달 형식은 일반적으로 닫을 수 없기 때문에 일반적으로 문제가 있습니다. 'Cancel' 버튼을 눌러 시뮬레이션해야하고, 올바른 순서로 모달 폼을 처리해야합니다. 이 문제에 상당한 시간을 할애 할 준비를하십시오. –
Windows가 이미 수행하고있는 작업을 이미 구현하려고합니다.그리고 그것은 매우 안전합니다. 일정 시간 동안 사용하지 않으면 자동 워크 스테이션 잠금이 설정되는 것은 매우 간단합니다. 실제로 보안에 관심이있는 대부분의 회사에서 이미이 작업을 수행합니다. 자신의 컴퓨터를 추가하는 것은 어렵지 않을뿐 아니라 Windows가하는 것처럼 안전하지도 않습니다. 특히 암호를 처리하는 코드 부분. –