小组改变了所有权?

时间:2012-02-13 16:09:10

标签: c# winforms controls panel

在我的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? 如何解决我的问题一般?

2 个答案:

答案 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);    
}