2010-07-29 80 views
1

我的VB.NET應用程序支持幾種MDI子窗體。有些種類,但不是其他種類,是「麻煩的」 - 它們導致焦點機制變得怪異。一旦打開了一個'麻煩'的兒童表格,除非我點擊標題欄或邊框,否則任何MDI兒童表格都將被激活。點擊客戶區域不會激活子窗體 - 其標題欄保持灰色,並且不會收到Activate或GotFocus事件。然而,奇怪的是,點擊表單實際上會收到焦點,因爲它的控件接收鼠標和鍵盤事件。只有Z順序和突出顯示不會改變。MDI子窗體在客戶區中單擊時不會激活

一旦出現這個問題,即使在'麻煩'的表格被關閉後,它仍然存在,並且會影響後來打開的子表單。但是,如果所有兒童表格都關閉,問題就會消失,新的兒童表格將正常運行 - 直到出現下一個「麻煩」的表格。

我不知道爲什麼一種孩子形式麻煩,而其他人不是。

任何建議將不勝感激。

+1

相關的麻煩的形式和任何引發LostFocus /的GotFocus事件的創建請張貼代碼。 – 2010-07-30 16:36:23

回答

1

我有點晚了進入這個,但我遇到了上述相同的症狀。我也有一些導致這個問題的形式,其他的則沒有。

我找到了一個解釋問題的鏈接,並將這個概念應用於我的表單。

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

它基本上與確保形式的MdiParent的是,導致創建窗體的窗口(API調用CreateWindow的()或CreateWindoEX())的任何代碼之前設置的事情。無論如何,我發現我的一些窗口在構造函數中有代碼,導致創建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); 
    } 

希望這有助於...

+0

斯科特:非常感謝 - 你是對的。在我的情況下,它是從VB6轉換而來的VB-NET程序,並且該轉換在窗體的構造函數中調用Me.Show。我把它拿出來,一切都很好。 – tarik 2011-04-15 02:10:51

相關問題