나는 당신이 말한 것을 정확히 알고 있으며 문제는 실제로 Windows가 포커스를 처리하는 방식에 동의하지 않는 앱 디자인과 관련이 있습니다. Windows는 win31 이후 이러한 유형의 작업을 수행했습니다. 그것은 토지 잡아 먹는 것과 같습니다. 앱에서 창을 표시 한 다음 숨기기/사용 중지하면 잠에서 쉴 때 Bill에 따르면을 잃게됩니다. 수정 : 메인 윈도우가 필요합니다! 또는 OS를 전환하십시오. EXE에서 작동하기 때문에 사용자 중 한 명이 배치 파일이나 다른 탐색기에서 벗어날 때 작동한다는 것을 의미하지는 않습니다.
당신은이 3 개의 별개의 exes에서 당신의 탈출구를 찾을 수 있습니다; Sub Main의 3 Application.Run 스레드에서 실행 해보십시오. SetTopMost를 사용하여 AppActivate하십시오.
또는 SDK 호출을 사용하여 앱에 입력 포커스를 부여하는 방법을 찾으십시오. 연속 된 Windows 버전은이를 사용하는 불쾌한 앱을 완화하기가 어려웠습니다 (따라서 w98에서이를 수행 할 수있는 앱은 taskbar orange in xp) - 프로그래머는 당연히 그 일을 처리했습니다. 너 그렇게 할 수있어.
하지만 잘못했을 수 있습니다. 리팩토링 (refactor)은 순서대로 이루어지며 미래의 앱을 위해 stragegy가 변경됩니다. 이것은 내가 한 결정이 아닙니다. 창문이 작동하는 방식은 돌로 설정되고, 사용자가 작동하도록 기대하는 방식은 돌보다 더 두려운 수백만의 뇌에 설정되어 있습니다 - 흐름으로 수영하십시오! 진짜 영향을
쉬운 리팩토링 :
이
- 돌아 가기 프로젝트까지 (또는 TFS에 사본을 보류) 옵션 대화 상자에서
- 은, 모든 컨트롤을 잘라. pnlOpts라는 이름의 양식 크기 패널을 넣으십시오. 그들을 붙여 넣으십시오.
- 해당 양식을 기본 양식으로 지정하십시오.
- form_shown에서 pnlOpts.Visible = false를 설정하거나 그 방법으로 기본값을 설정합니다. (약간의 쓰레기를 남기려면 다른 패널을 앱 이름 또는 배경 이미지로 표시 할 수 있습니다.)
- 전화 이 영역의 파일 dlg도 표시하는 설정 코드
- 파일 dlg가 해당 양식을 부모로, 시작 위치가 center-parent (소유자가 아님)로 설정하십시오. Cancel from this = 설정 양식을 닫습니다.
- 이 작업이 완료되면 pnlOpts를 표시하십시오.
- 확인 단추에서 진행률 표시 줄을 수행하는 코드를 호출하십시오. 여기서 다시 pnlOpts를 숨기거나 비활성화 할 수 있습니다.
- 전체 창에서 Visible = false 또는 enabled = false를 숨기거나 숨길 수 없으면 창 초점 맞추기 (여기서 불행의 원인 임)가 발생합니다.
여기에 실제 키는 한 줄의 대답은 : 당신이 그 기능을 사용하지 않으려면 그냥 회색, 항상 볼 수 및 활성화 메인 창을 떠나거나 모든 컨트롤을 숨 깁니다. 이것은 패널과 함께하는 것이 가장 쉽습니다. 원하는 경우 다른 패널이나 이미지를 즐겁게 보이도록 표시 할 수 있습니다 (특히 회색으로 표시되면 [.enabled = false] 내용이 이해가 안되는 경우).
당신은 그런 모습을 좋아하지 않거나 처음부터 그렇게 만들었지 만 수백만 줄의 Windows 코드와 수백만 명의 Windows 사용자가 수동적으로 적극적으로 당신과 의견을 달리하고 있습니다. !
"다른 창의 위에 표시되지 않습니다" 응용 프로그램이나 바탕 화면의 다른 창은 무엇입니까? –
내 응용 프로그램에 다른 창이 없습니다. ShowDialog 호출로 인해 Visual Studio 뒤에 나타나는 대화 상자가 나타납니다. –