从外部启动C#WinForm(在面板中打开)

时间:2016-02-22 02:38:27

标签: c# winforms

我之前从未遇到过这种情况所以我不确定我是否能在C#中做到这一点。

我有一个在应用程序的面板中打开的WinForm。这是我用来在应用程序中打开每个表单的代码:

public static void OpenForm(System.Windows.Forms.Form formName, bool showAsModal, bool launchInPanel, ref Panel panel)
{
    bool isAlreadyOpen = false;
    foreach (Form form in Application.OpenForms)
    {
        if (form.Text == formName.Text)
        {
            isAlreadyOpen = true;
            form.WindowState = FormWindowState.Normal;
            form.Focus();
            break;
        }
    }
    if (isAlreadyOpen == false)
    {
        if (!showAsModal)
        {
            if (launchInPanel)
            {
                formName.TopLevel = false;
                formName.AutoScroll = true;
                panel.Controls.Add(formName);
            }
        }
        if (!showAsModal)
            formName.Show();
        else
            formName.ShowDialog();
    }
}

我想要做的是在任何给定的表单上放置一个按钮,当用户点击时,该按钮将重新启动该窗口作为普通的WinForm(即不在面板内)。我知道我可以编写代码来关闭并重新打开表单而不将其添加到面板中,但我认为这会导致用户丢失他们输入到该表单中的任何信息或选择。

思想?

1 个答案:

答案 0 :(得分:0)

这可以通过如下(动态)将Button添加到Form来实现。

var button = new Button {Text = "Show Out"};
button.Click += (o, args) =>
{
    formName.Visible = false;
    if (panel1.Controls.Contains(formName)) // show outside of the parent window
    {
        panel1.Controls.Remove(formName);
        formName.TopLevel = true;
        button.Text = Text = "Show In";     
    }
    else //flip - bring it inside the panel.
    {
        formName.TopLevel = false;
        panel1.Controls.Add(formName);
        button.Text = Text = "Show Out";        
    }
    formName.Show();
};
formName.Controls.Add(button);

没有足够的信息来评论设计,但我建议考虑@Thakur在评论中解释的建议,可能是你想要的。