在外部启动 C# WinForm(在面板中打开)
本文关键字:外部 启动 WinForm | 更新日期: 2023-09-27 18:35:34
我以前从未遇到过这种情况,所以我不确定我是否可以在 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 重新启动该窗口(即不在面板内)。我知道我可以编写代码来关闭并重新打开表单,而无需将其添加到面板,但我认为这会导致用户丢失他们在该表单中输入的任何信息或选择。
思潮?
这可以通过以下方式(动态)将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在评论中解释的建议,可能这就是你想要的。