在窗口窗体之间切换

本文关键字:之间 窗体 窗口 | 更新日期: 2023-09-27 18:34:09

我有一堆窗口窗体。每个表单都有用于切换表单的"后退"和"下一步"按钮。例如,单击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.
    }

谢谢。

在窗口窗体之间切换

仅当

首次调用表单时,才会触发表单的 Load 事件。 如果随后隐藏窗体并重新显示它,则不会重新加载窗体,因此不会触发窗体的 Load 事件。

如果要在重新显示窗体时使用事件来处理,则应查看以下更合适的事件:

激活显示可见已更改

表单加载事件仅在首次显示表单之前触发。您应该使用不同的事件,例如窗体激活或 GotFocus。

这是

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

form.Show()

比使用不

form.Hide()

form.Close()

上级:代码应为:

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.
    }
}

但是这样的组合存在一个问题 - 你不应该关闭你的主窗体。