2

可能重复:
如何“停靠”/附加 winforms 表单

我有两种形式:MainForm 和 PanelForm。

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

我可以从 MainForm 停靠和取消停靠 PanelForm,也可以折叠它。

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

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

4

2 回答 2

1

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

于 2012-07-16T19:48:55.323 回答
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;
    }
}
于 2012-07-16T19:44:48.847 回答