你如何在C#中将两种形式结合在一起?

时间:2012-07-16 19:23:42

标签: c# winforms

  

可能重复:
  how to “dock”/attach winforms forms

我有两种形式:MainForm和PanelForm。

我已将其设置为通过覆盖MainForm的OnMove将PanelForm附加到MainForm,以便PanelForm与MainForm一起移动。这是为了模拟PanelForm是MainForm的面板。

我可以从MainForm停靠和取消停靠和PanelForm,以及将其折叠。

问题是当我最小化MainForm或它失去了对其他应用程序的关注时,当我返回到MainForm时,我必须手动Alt-Tab PanelForm。

有没有办法将PanelForm附加到MainForm,而不会覆盖OnMove或其他东西来模拟它已连接?

2 个答案:

答案 0 :(得分:1)

您不能同时拥有两个“活动”表单/窗口。但是,您可以通过激活主窗口将一个或多个窗口带到前台。为此,请使用Form.Show(ownerForm)覆盖。

答案 1 :(得分: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;
    }
}