为什么FormShown事件不会在C#中被触发?

Kat*_*ate 4 c# winforms

我是C#的新手,我正在使用Windows窗体.我有Form1Form2.在form1我使用以下代码显示form2:

Form2 frm2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{          
    frm2.Show();
}
Run Code Online (Sandbox Code Playgroud)

我想要的是:我Form2每次都要展示一些活动.我放置messageBoxForm2Shown事件(进行测试),但它只被触发一次,下次我显示Form2它永远不会被解雇.我也尝试使用,formLoad但它只会被解雇一次,下次我表明form2它永远不会被解雇.我知道我可以使用frm2.ShowDialog()每次触发显示的事件但我不想出于某些原因.

private void Form2_Shown(object sender, EventArgs e)
{
    MessageBox.Show("Form2 is shown"); // this gets fired only once when form2 is shown.
                                       // when I show form2 again it does not get fired.
}

private void button_Hide_Form2_Click(object sender, EventArgs e)
{

    // this is in form2
    Hide();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:任何人都知道如何每次form2展示一个事件?我很高兴获得一些新想法来解决这个问题.谢谢

BWA*_*BWA 10

来自MSDN

Shown事件仅在第一次显示表单时引发; 随后最小化,最大化,恢复,隐藏,显示或无效和重新绘制将不会引发此事件.

MSDN上,您可以看到引发了哪些事件.并选择一个符合您要求的.

一些例子.

Form1 - 两个按钮,显示和隐藏

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    Form2 frm = new Form2();

    private void btnShow_Click(object sender, EventArgs e)
    {
        frm.Show();
    }

    private void btnHide_Click(object sender, EventArgs e)
    {
        frm.Hide();
    }
}
Run Code Online (Sandbox Code Playgroud)

Form2 - 显示时显示msgbox.我改变形式关闭行为隐藏形式不破坏.

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_VisibleChanged(object sender, EventArgs e)
    {
        if(this.Visible == true)
            MessageBox.Show("Hey");
    }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        this.Hide();           
    }
}
Run Code Online (Sandbox Code Playgroud)