1

我有一堆窗体。每个表格都有用于切换表格的“返回”和“下一步”按钮。例如,在 Form3 上单击“返回”,然后我们转到 Form2。然后单击 Form2 上的“下一步”按钮,然后显示 Form3。

现在我的问题是,如果我们从一开始就单击“下一步”,它就会顺利运行。但是,如果我在 Form3 上单击“返回”,则会显示 Form2,然后在 Form3 上单击“下一步”转到 Form3。代码没有转到 Form3_Load 事件。我的代码有什么问题?

 public partial class Form3 : Form
{
    Form2 FormPrev;
    Form4 FormNext;
    List<DataRow> drlist = new List<DataRow>();
    DataTable dt = new DataTable();

    public Form3(Form2 _FormPrev)
    {
        InitializeComponent();
        this.FormPrev = _FormPrev;
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void btnNext_Click(object sender, EventArgs e)
    {
        ShowNext();
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        ShowPrev();
    }

    private void ShowNext()
    {
        if (FormNext == null)
            FormNext = new Form4(this);
        FormNext.Show();
        this.Hide();
    }

    private void ShowPrev()
    {
        FormPrev.Show();
        this.Hide();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
       // blah blah.
    }

谢谢。

4

3 回答 3

3

表单的 Load 事件仅在第一次调用表单时触发。如果您随后隐藏表单并重新显示它,那么这不会重新加载表单,因此不会触发表单的 Load 事件。

如果您想在重新显示表单时使用事件来处理,那么您应该查看以下更合适的事件:

已激活显示可见已更改

于 2012-05-14T13:30:48.163 回答
1

表单加载事件仅在表单第一次显示之前被触发。您应该使用不同的事件,例如 Form Activated 或 GotFocus。

于 2012-05-14T13:29:08.093 回答
0

这是正常的行为。加载是为了加载形式,而不是为了展示。在您的情况下,您尝试显示隐藏的形式。如果你想使用

form.Show()

比不使用

form.Hide()

form.Close()

UPD: 代码应该是:

public partial class Form3 : Form
{
    List<DataRow> drlist = new List<DataRow>();
    DataTable dt = new DataTable();

    public Form3()
    {
        InitializeComponent();
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void btnNext_Click(object sender, EventArgs e)
    {
        ShowNext();
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        ShowPrev();
    }

    private void ShowNext()
    {
        Form4 formNext = new Form4();
        formNext.Show();
        this.Close();
    }

    private void ShowPrev()
    {
        Form2 formPrev = new Form2();
        formPrev.Show();
        this.Close();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
       // blah blah.
    }
}

但是这样的解决方案存在一个问题——你不应该关闭你的主窗体。

于 2012-05-14T13:31:52.077 回答