当我在表单之间切换时,某些事件无效

时间:2013-12-25 11:06:21

标签: c# winforms panel

情境:

我有一个表格(Form1),其中包含以下元素。

名为panel1的小组,btnLoadForm2btnLoadForm3btnSavebtnDelete四个按钮。

当我点击btnLoadForm2btnLoadForm3时,它会将Form2Form3加载到panel1中的Form1

但问题是

例如;

当我使用第一个加载的窗体时,无论面板(Form2或Form3)中加载哪一个都无关紧要,btnSave和btnDelete事件都有效。但是,当我切换Form时,按钮事件无效。

代码:

// Codes in Form1 which consists of panel1 and all other buttons

   private void btnloadForm2_Click(object sender, EventArgs e)
   {
        var form = panel1.Controls.OfType<Form>().First();

        if (form.Name != "Form2")
        {
            panel1.Controls.Clear();
            Form newForm = new Form2();
            newForm.TopLevel = false;
            newForm.Visible = true;
            panel1.Controls.Add(newForm);
        }
    }

   private void btnloadForm3_Click(object sender, EventArgs e)     
   {
        var form = panel1.Controls.OfType<Form>().First();

        if (form.Name != "Form3")
        {
            panel1.Controls.Clear();
            Form newForm = new Form3();
            newForm.TopLevel = false;
            newForm.Visible = true;
            panel1.Controls.Add(newForm);
        }
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        var form = panel1.Controls.OfType<Form>().First();

        if (form.Name == "Form2")
        {
            Form2 f2 = (Form2)Application.OpenForms.OfType<Form2>().FirstOrDefault();
            f2.Save();
        }

        else if (form.Name == "Form2")
        {
            Form3 f3 = (Form3)Application.OpenForms.OfType<Form3>().FirstOrDefault();
            f3.Save();
        }
    }

    private void btnDelete_Click(object sender, EventArgs e)
    {
        var form = panel1.Controls.OfType<Form>().First();

        if (form.Name == "Form2")
        {
            Form2 f2 = (Form2)Application.OpenForms.OfType<Form2>().FirstOrDefault();
            f2.Delete();
        }

        else if (form.Name == "Form3")
        {
            Form3 f3 = (Form3)Application.OpenForms.OfType<Form3>().FirstOrDefault();
            f3.Delete();
        }
    }

请有人告诉我我的代码有什么问题..

我不打算在我的Form2Form3中编写代码。在我第一次尝试将表单加载到Form1.Panel1时,所有代码都正常工作。

1 个答案:

答案 0 :(得分:1)

您应该显示表单,而不是将其作为控件添加到面板。

所以做的事情如下:

newForm.Show();

newForm.ShowDialog();