情境:
我有一个表格(Form1
),其中包含以下元素。
名为panel1
的小组,btnLoadForm2
,btnLoadForm3
,btnSave
,btnDelete
四个按钮。
当我点击btnLoadForm2
或btnLoadForm3
时,它会将Form2
或Form3
加载到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();
}
}
请有人告诉我我的代码有什么问题..
我不打算在我的Form2
和Form3
中编写代码。在我第一次尝试将表单加载到Form1.Panel1
时,所有代码都正常工作。
答案 0 :(得分:1)
您应该显示表单,而不是将其作为控件添加到面板。
所以做的事情如下:
newForm.Show();
或
newForm.ShowDialog();