在我的C#应用程序中,有一个带有面板main_panel
的主窗体。每当用户选择菜单中的某些内容时,让我们说“A”,主面板切换到表单A的面板(查看代码),A_panel
。
由于A_panel
涵盖了表单A中的每个控件,我可以将表单A的所有控件召唤到主窗体中。
if ((string)MainMenu.SelectedItem == "A")
{
FormA A = new FormA();
new_panel = A.Controls["A_panel"] as Panel;
}
this.main_panel.Controls.Clear();
this.main_panel.Controls.Add(new_panel);
我的问题是当用户再次选择菜单A时,我不想再通过FormA
重新创建new FormA()
。我这样做是因为当我向main_panel
添加控件时,A_panel
的所有权更改为主窗体,以便可以再次将控件添加到main_panel
。
那么,如何再次将A_panel
的所有权更改为表格A?
如何解决我的问题一般?
答案 0 :(得分:1)
您有什么理由不能使用UserControl
并在表单上保留对它的引用?这样,您可以在用户想要更改视图时显示/隐藏它。扩展和交互将更容易。 Here's MSDN上的演练,让您入门。
答案 1 :(得分:0)
听起来像UserControl会更好地满足您的需求。在FormA上有一个实例,在MainForm上有另一个实例。
如果出于某种原因,您无法使用用户控件,则至少可以在自动生成的设计器文件之外提取代码(我假设您完全使用FormA)。
如:
<强> FORMA 强>
public FormA()
{
var mainPanel = CreateMainPanel();
this.Controls.Add(mainPanel)
}
public Panel CreateMainPanel()
{
//...build up your control tree. Cut the code from the designer if necesssary
}
<强>的MainForm 强>
FormA _A = new FormA();
public void HandleMainMenuClick(object sender, EventArgs e)
{
if ((string)MainMenu.SelectedItem == "A")
{
new_panel = _A.CreateMainPanel();
}
this.main_panel.Controls.Clear();
this.main_panel.Controls.Add(new_panel);
}