2012-07-16 95 views
1

可能重複:
how to 「dock」/attach winforms forms如何在C#中將兩個表單連接在一起?

我有兩種形式:MainForm,然後PanelForm。

我已經設置它,以便通過重寫MainForm的OnMove以使PanelForm隨MainForm一起移動而將PanelForm附加到MainForm。這是爲了模擬PanelForm是MainForm的面板。

我可以從MainForm停靠和取消鎖定PanelForm,也可以摺疊它。

問題是,當我最小化MainForm或它失去了焦點到一些其他應用程序,並且當我返回到MainForm時,我必須手動Alt-Tab PanelForm。

有沒有一種方法可以將PanelForm附加到MainForm,而不會覆蓋OnMove或其他東西來模擬它附加?

+3

您是在尋找一個UserControl而不是一個Form?將UserControl放置在MainForm中(通常位於面板內以便於設置),並且將按照這種方式進行。 – krillgar 2012-07-16 19:26:44

+0

不需要。我想將面板放在MainForm的外面,這樣我就可以將它解開。 – 2012-07-16 19:29:03

+0

@KenWhite沒有人回答如何使PanelForm與MainForm一起激活的問題。我運行了這些例子,但他們沒有一起激活這兩種形式。他們只是展示了一種方法來捕捉我已經完成的邊緣。 – 2012-07-16 19:39:34

回答

1

您不能同時擁有兩個「活動」窗體/窗口。但是,您可以通過激活主窗口將一個或多個窗口置於前臺。爲此,請使用Form.Show(ownerForm)重寫。

+0

甜美!這工作! – 2012-07-16 19:53:57

0

這聽起來像你正在體驗形式的本質。它們本質上是獨立的。也許你應該做的事,以確保這兩種形式是可見的,當你希望他們後,他們以前被隱藏(最小化/另一個在它前面的窗口)是將焦點依次爲兩者

編輯 外貌就像你已經找到了答案,但這也可以起作用。雖然沒有被接受的答案那麼漂亮。只需在兩種形式上做。

Timer timer; 
bool resetting = false; 
Form2 frm2; 
public Form1() 
{ 
    InitializeComponent(); 
    frm2 = new Form2(); 
    frm2.Show(); 
    timer = new Timer(); 
    timer.Interval = 50; 
    timer.Tick+=new EventHandler(timer_Tick); 
} 
private void timer_Tick(object sender, EventArgs e) 
{ 
    timer.Stop(); 
    resetting = false; 
} 

private void Form1_Activated(object sender, EventArgs e) 
{ 
    if (!resetting) 
    { 
     timer.Start(); 
     frm2.Focus(); 
     this.Focus(); 
     resetting = true; 
    } 
} 
+0

在您自己的「OnFocus」事件的事件處理程序中將焦點設置爲自己會導致無限遞歸。 – Servy 2012-07-16 19:45:39

+0

該死的。這是真的。 – Brad 2012-07-16 19:47:45

+0

是的,我遇到了同樣的問題。這是我提出這個問題的理由。 – 2012-07-16 19:50:23

相關問題