C# 在Windows窗体中传递变量

C# 在Windows窗体中传递变量,c#,.net,winforms,C#,.net,Winforms,我有一个非常复杂的windows应用程序,它有8个表单。每个表单上都有“上一页”和“下一页”按钮,可以来回切换以方便编辑表单 private void ShowNext() { if (FormNext == null) FormNext = new SomeForm(this); FormNext.Show(); this.Hide(); } private void ShowPrev()

我有一个非常复杂的windows应用程序,它有8个表单。每个表单上都有“上一页”和“下一页”按钮,可以来回切换以方便编辑表单

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

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

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

    private void btnBack_Click(object sender, EventArgs e)
    {
        ShowPrev();
    }
每个表单将执行不同的sql insert table命令。但问题是我不想在每个表单上完成所有的插入

我想在用户确认正确的输入值后完成最后一个表单中的所有内容。 这意味着我必须将所有变量从一开始传递到最后一个

问题:内存能容纳所有变量吗?如何将它们交叉传递


谢谢。

创建一个静态单例类,该类将保存所有变量。

在主窗体中定义一个静态公共字段,并更新每个子窗体中的值。最后选择上一个表单中的字段进行插入

下面几行:

public partial class Form1 : Form //your main fomr
    {
        public static List<MyContainerClass> myContainer= new List<MyContainerClass>();
        .............
在最后一个表单中,您可以访问这些值

foreach(MyContainerClass mc in Form1.myContainer)
{
//Do your work
}

您只需要保存对某个上下文的引用,该上下文可以访问您需要的数据

protected void btnNext_Click(object sender, EventArgs e)
{
    SomeContext.Push(myFormStateDataThatIsReady);
    ShowNext();
}

然后,当最后一步到来时,您可以从该上下文中提取该数据并写入该数据

您可以轻松地将字符串查询传递给新/旧表单的公共变量,如下所示

protected void btnNext_Click(object sender, EventArgs e)
{
    MyForm2 x = new MyForm2();
    x.Query = "My Query";   // here "Query" is your custom public string variable on form2
    x.Show()
}

8种形式听起来并不复杂,很有趣。但是我不知道windows窗体中的Push方法是什么?它是
SomeContext
类上的一个方法,它不存在。上面的代码只是一个示例。您需要实现某种存储机制来访问表单。
protected void btnNext_Click(object sender, EventArgs e)
{
    MyForm2 x = new MyForm2();
    x.Query = "My Query";   // here "Query" is your custom public string variable on form2
    x.Show()
}