区别说明
- Show()出来的子窗口和主窗口之间不受影响,可以同时操作,Showdialog()出来的子窗口只能在关闭子窗口后才能操作主窗口
- Activate()是让窗体显示在前面
- 当通过new创建了一个Form窗体时,该窗体的Visible属性默认是false,即不显示该窗体,可以通过运行试试
- 所以可以通过Show()方法来将该窗体显示出来,如果是由不显示到显示,即第一次调用该窗体的Show()方法,则该窗体会显示在主窗体前面,但如果将鼠标切回主窗体,此时主窗体在前,再次调用该窗体的Show(),则子窗体不再在前显示。
- Show()方法和Hide()方法相对应
- 而Activate()方法就可以弥补4中的缺点,每调用一次Activate()方法,该窗体都会靠前显示
- 测试时,需要将子窗体的声明在成员变量中,这样可以在多个方法中调用。
- 可以结合https://ningqian.blog.youkuaiyun.com/article/details/115467900这篇来看我下面的测试代码
测试代码
主窗体Form1
namespace WFATest2
{
public partial class Form1 : Form
{
private Form2 fm2 ;//声明Form2的fm2
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//创建Form2
private void newForm_Click(object sender, EventArgs e)
{
fm2 = new Form2(this);//将Form1的对象传给fm2(可选,之前为了避免创建多个Form2,同时关闭Form2后还可以重新创建所设置)
//fm2.Show();//取消了fm2 的显示
newForm.Enabled = false; //让Form2的对象只创建一个
}
//激活Form2
private void activateForm2_Click(object sender, EventArgs e)
{
if(fm2!=null&&fm2.Visible!=false)//fm2非空,非隐
fm2.Activate();
//button1.Enabled = false;
}
//显示Form2
private void showForm2_Click(object sender, EventArgs e)
{
if(fm2!=null)//fm2非空
fm2.Show();
}
}
}
子窗体Form2
namespace WFATest2
{
public partial class Form2 : Form
{
private Form1 fm1;
public Form2()
{
InitializeComponent();
}
public Form2(Form1 fm1)
{
InitializeComponent();
this.fm1 = fm1;
}
private void Form2_FormClosed(object sender,FormClosedEventArgs e)
{
fm1.newForm.Enabled = true;
}
}
}