2010-07-29 5 views
1

내 VB.NET 응용 프로그램은 여러 종류의 MDI 자식 폼을 지원합니다. 어떤 종류는, 그러나 아닙니다 다른 사람, "성가신"이다 - 그들은 초점 기계 장치를 괴괴 망측하게 만든다. '귀찮은'자녀 양식이 열리면 제목 표시 줄이나 경계를 클릭하지 않으면 MDI 하위 양식 중 아무 것도 활성화되지 않습니다. 클라이언트 영역을 클릭해도 자식 폼이 활성화되지 않습니다. 제목 표시 줄은 회색으로 유지되며 Activate 또는 GotFocus 이벤트를받지 않습니다. 그러나 이상하게도 클릭 된 폼은 실제로 컨트롤에 마우스 및 키 이벤트를 받기 때문에 포커스를받습니다. Z- 주문 및 강조 표시 만 변경되지 않습니다.클라이언트 영역에서 클릭 할 때 MDI 자식 폼이 활성화되지 않습니다.

이 문제가 발생하면 '까다로운'양식이 닫힌 후에도 유지되며 이후에 열리는 하위 양식에 영향을줍니다. 그러나 모든 하위 양식이 닫히면 문제가 해결되고 다음 번 문제가있는 양식이 나타날 때까지 새 하위 양식이 정상적으로 작동합니다.

왜 나는 어떤 종류의 자녀 형태가 골칫거리이며 다른 것들은 잘 모르겠다.

의견을 보내 주시면 대단히 감사하겠습니다.

+1

게시하시기 바랍니다 코드입니다. –

답변

1

나는 조금 늦기 시작했지만 위에서 설명한 것과 같은 증상이 나타났습니다. 저도이 문제를 일으킨 몇 가지 양식과 그렇지 않은 양식을 가지고있었습니다.

문제를 설명하고 내 양식에 개념을 적용하는 링크를 발견했습니다.

http://www.pcreview.co.uk/forums/mdi-child-forms-functionality-does-not-work-correctly-windows-f-t2894221.html

그것은 기본적으로 양식 MdiParent이 폼의 창 (CreateWindow 함수() 또는 CreateWindoEX()에 API 호출을) 생성되도록 코드 전에 설정되어 있는지 확인하고 함께 할 수있다. 어쨌든 나는 내 윈도우 중 일부가 생성자에서 API 창이 생성되도록하는 코드가 있음을 발견했다. 이 예제는 WebBrowser 컨트롤이있는 폼이었습니다. 생성자의 양식에 URL을 전달하여 WebBrowser.Navigate 메소드로 전달했습니다. 이 시나리오에서는 MdiChild 창이 예상대로 활성화되지 않습니다. 생성자를 변경하여 URL을 저장하고 폼의 CreateHandle 메서드를 오버라이드하여 실제로 가능한 빨리 WebBrowser에 URL을 설정했습니다. 이제 양식이 예상대로 활성화됩니다. 이 도움이

private string _URL = ""; 

    public frmReportServer(String URL, String Title) : this() { 
    _URL = URL; 
    this.Text = Title; 
    } 

    protected override void CreateHandle() { 
    base.CreateHandle(); 
    if (_URL != "") wbReports.Navigate(URL, false); 
    } 

희망 ... 귀찮은 형태 및 lostfocus /의 GotFocus 이벤트의 작성과 관련

+0

Scott : 고마워요 - 당신 말이 맞아요. 내 경우에는 VB6에서 변환 된 VB-NET 프로그램이며 변환은 양식의 생성자에서 Me.Show에 대한 호출을 수행합니다. 나는 그것을 꺼냈다. 그리고 모든 것이 건강하다. – tarik