在窗体之间切换

时间:2012-05-14 13:24:11

标签: c# .net winforms

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

现在我的问题是,如果我们从一开始就点击“下一步”,它就可以顺利运行。但是,如果我单击Form3上的“Back”,则会显示Form2,然后单击Form3上的“Next”转到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.
    }

感谢。

3 个答案:

答案 0 :(得分:3)

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

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

激活 显示 VisibleChanged

答案 1 :(得分:1)

表单加载事件仅在首次显示表单之前被触发。 您应该使用其他事件,例如Form Activated或GotFocus。

答案 2 :(得分: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.
    }
}

但是这样的颜色存在问题 - 你不应该关闭你的主要形式。