2010-11-17 46 views
1

我有兩種形式,Form1和一個用於控制Form2的UserControl。在Form1的UserControl中,我調用Form2.Show();。我也試過Form2.Show(this);。無論哪種方式,重點都不在於表格。我必須在新表單中單擊一次以使其聚焦,然後我可以單擊該表單中的項目。通過Form.Show顯示一個表單沒有給出焦點?

我覺得控制權已經傳回到我的主要控制/表單中,因此重點正在消失。所以我等待Form2關閉,通過:

 while (form2.Visible == true) 
     { 
      System.Threading.Thread.Sleep(100); 
      Application.DoEvents(); 
     }  

這似乎工作。然而,在我關閉表格後,現在反過來了。直到我在主窗體窗口中單擊一次,Form1才被賦予焦點(即使我呼叫this.Focus())。

任何想法如何正確處理。我想要顯示一個子窗體(無模式),並且立即能夠點擊它,並且當窗體關閉時,立即可以在父窗體上執行操作。

+1

*主機*表單的用戶控件?是隻創建它並調用Show(),還是它實際上充當窗體的TopLevel屬性設置爲false的窗體的父窗體?顯示用戶控制代碼。 – 2010-11-17 00:32:33

+0

它只是作爲父母。這是一個組合框,我在這裏「放下」我自己的ListView而不是標準對話框。這個ListView被託管在一個表單中(我找不到直接顯示ListView的方法)。我會考慮添加UserControl。 – esac 2010-11-17 16:09:02

回答

0

這是來自於我重寫WndProc以顯示錶單的事實。當我收到CBN_DROPDOWN消息時,我會顯示該表單。我通過調用顯示錶單的方法解決了這個問題。

case CBN_DROPDOWN: 
    Invoke(new MethodInvoker(Show_DropDown)); 
    return; 
1

您應該可能使用.ShowDialog(),這也可以擴展以回答用戶是否正確執行Form2的操作或提前中止。

這確實使窗體鎖定在焦點前面,並將暫停第一個窗體上的代碼執行,直到窗體關閉。

+0

問題是,我希望用戶能夠在主窗體上執行操作,並且當他們這樣做時,它將關閉該窗體。有點像Popup。 – esac 2010-11-17 01:48:17

1

使用this.Activate();代替this.Focus();

0

不知道我遵循完全,但是從你的UC嘗試打開窗體2這樣的:

form2.Show(Parent); 

這應該指定UC的家長形式form2的主人。

相關問題