如何在一个Windows窗体面板中使用多个C#表单?

5

我正在开发一个儿童学习应用程序,希望在面板上点击按钮后,在同一位置显示不同的表单。请问是否有任何步骤或教程链接可以提供帮助?


3
需要直接编码帮助的帖子应该发表在Stack Overflow上。这个垂直领域是专业讨论软件开发的地方。 - Vimal Raj
6个回答

8

这个问题应该在Stackoverflow网站上发布,而不是在这里。

但您可以使用以下方法来处理此情况。

            subForm = new SubFormYouWantToLoad();
            subForm.TopLevel = false;
            subForm.FormBorderStyle = FormBorderStyle.None;
            ContainerPanel.Controls.Add(subForm , 0, 1);
            subForm .Visible = true;

当您点击特定按钮时,可以添加此代码。每个子表单都作为控件添加到面板上。在添加另一个子表单之前,应从面板的控件列表中删除子表单。为此,最好先将第一个子表单删除、关闭和释放。

        ContainerPanel.Controls.Remove(activeform);
        activeform.Close();
        activeform.Dispose();

这有点像没有 MDI 的多窗体。谢谢 :) - dariol
你的回答不是一个好的解决方案,而且会误导人。你不应该将一个顶级控件添加到一个控件中。 - VahidNaderi
@Vimal Raj:除了空白窗口,子表单控件在面板中没有显示。 - Siddiq Baig

5

不要使用表单,而是使用用户控件并将它们加载到面板中。

例如,如果您想显示usercontrol1:

panel1.Controls.Clear();
panel1.Visible = true;
UserControl1 usr1 = new UserControl1();
usr1.Show();
panel1.Controls.Add(usr1); 

如果是UserControl2

panel1.Controls.Clear();
panel1.Visible = true;
UserControl1 usr2 = new UserControl2();
usr2.Show();
panel1.Controls.Add(usr2); 

在将窗体显示在另一个窗体的面板中后,它无法关闭。如果我使用ActiveForm.Close(),那么它会关闭主应用程序。我该怎么解决这个问题? - MSU
将您编写在问题中的代码贴到您想要关闭的帖子中。 - Developer

0
我使用了这段代码来关闭面板上的表单,但是没有起作用。
private void button12_Click(object sender, EventArgs e)
    {
        dontShowPANEL();
        //ActiveForm.Close();
        MainImaginCp kj = new MainImaginCp();
       //kj.Visible = false;
        kj.panel2.Controls.Clear();
        panel1.Visible = true;
        EngABCLearning usr1 = new EngABCLearning();
        usr1.Show();
        kj.panel2.Controls.Add(usr1); 
        //kj.Focus();
    }

我使用了以下代码在面板中显示表单。

private void toolStripMenuItem1_LR_ENG_Click(object sender, EventArgs e)
    {
        //kids.Form2 hj = new kids.Form2();
        //hj.Show();


        EngABCLearning gh = new EngABCLearning();
        //gh.Show();
        gh.TopLevel = false;
        gh.FormBorderStyle = FormBorderStyle.None;
        //Panel2.Controls.Add(subForm, 0, 1);
        panel2.Controls.Add(gh);
        gh.Visible = true;
    }

这将关闭我的主窗体并退出应用程序。


0

尝试使用这种方法在一个面板上加载多个表单

private Form activeForm = null;

public void FormLoad(Form childForm)
    {
        if (activeForm != null)
        {
            activeForm.Close();
        }

        activeForm = childForm;
        childForm.TopLevel = false;
        childForm.FormBorderStyle = FormBorderStyle.None;
        panelName.Controls.Add(childForm);
        childForm.Visible = true;
    }
private void YourBtn1_Click(object sender, EventArgs e)
    {
        FormLoad(new youWantToLoadForm1Name());
    }
private void YourBtn2_Click(object sender, EventArgs e)
    {
        FormLoad(new youWantToLoadForm2Name());
    }

0

试试这个,我已经在一个面板内加载了两个表单。

private void Form1_Load(object sender, EventArgs e)
    {
        Form2 f1 = new Form2();
        f1.TopLevel = false;
        f1.AutoScroll = true;
        panel1.Controls.Add(f1);
        f1.Dock = DockStyle.Left;
        f1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        f1.Show();
        //form2
        Form3 f2 = new Form3();
        f2.TopLevel = false;
        f2.AutoScroll = true;
        panel1.Controls.Add(f2);
        f2.Dock = DockStyle.Left;
        f2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        f2.Show();



    }

0
你可以创建多个表单作为用户控件或从面板继承的控件。然后有一个父窗体,带有一个面板来容纳用户控件。当需要更改面板时,您可以在容器中更改活动用户控件。
MSDN上有一个关于创建用户控件的教程。

http://msdn.microsoft.com/en-us/library/a6h7e207(v=vs.71).aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接