问题:Form1中有panel1和panel2,在panel1中显示Form2,通过在Form2中点击按钮,相应的在panel2中显示Form3。
我在第一步,panel1中显示Form2没有问题,用controls.add()就可以实现。
但是通过panel1中的Forma2中的按钮,想在panel2中显示Form3(panel2的modifile属性已设置为public,方便再Form2中可以访问panel2),可怎么都不行,在panel2中怎么都显示不出来Form3窗体,那位老鸟可以给个思路和办法。谢谢。
我的思路和尝试过的方法 :我在Form2中的按钮事件中,写如下方法:
Form3 fm3 = new Form3();
fm3.TopLevel = false;
fm3.Dock = DockStyle.Fill;
Form1 fm1 = new Form1();
fm1.panel1.Controls.Add(fm3);
fm3.Show();
结果执行的时候,panel2控件中并没有如期显示Form3的窗体。
当然不行!你的 fm1 是在Form2中创建的,并非主窗体的
需要借助委托实现哟。
(更新答案):先看运行效果
Form1.cs
namespace WinFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var f2 = new Form2();
f2.TopLevel = false;
f2.Dock = DockStyle.Fill;
f2.LoadForm3 = LoadForm3;
f2.Show();
panel1.Controls.Add(f2);
}
private void LoadForm3()
{
var f3 = new Form3();
f3.TopLevel = false;
f3.Dock = DockStyle.Fill;
f3.Show();
panel2.Controls.Add(f3);
}
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Action LoadForm3;
private void button1_Click(object sender, EventArgs e)
{
LoadForm3?.Invoke();
}
}
}