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

标签 c# winforms

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

Form2 frm2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{          
    frm2.Show();
}

我想要的是:每次显示 Form2 时,我想做一些事件。我将 messageBox 放在 Form2Shown 事件中(用于测试),但它只被触发一次,下次我显示 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();
}

我的问题是:有人知道如何在每次显示 form2 时触发事件吗?我很高兴获得一些解决这个问题的新想法。谢谢

最佳答案

来自 MSDN

The Shown event is only raised the first time a form is displayed; subsequently minimizing, maximizing, restoring, hiding, showing, or invalidating and repainting will not raise this event.

关于 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();
    }
}

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();           
    }
}

关于c# - 为什么 FormShown 事件不会在 C# 中触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39164272/

相关文章:

vb.net - 如何在 TableLayoutPanel 中设置行高

c# - 右对齐 datagridview 中的列不起作用

c# - 快速多窗口渲染

c# - 使用 discutils 编辑 iso 文件

c# - 每当有人试图截屏时都会跟踪和捕获的服务

c# - Windows 窗体应用程序的 Web 界面

c# - n 单击一个按钮给出 n 个输出。需要的只是一次点击产生的一个输出

c# - 更新图表中的 y 轴最大值

c# - 如何生成唯一的付款号码?

c# - 在鼠标离开事件时关闭 ComboBox DropDown