【问题标题】:Passing variables in Windows Forms在 Windows 窗体中传递变量
【发布时间】:2012-05-10 03:41:02
【问题描述】:

我有一个非常复杂的 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 命令。但问题是我不想在每个表单上完成所有插入。

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

问题:内存可以保存所有变量吗?如何跨表单传递它们?

谢谢。

【问题讨论】:

  • 8 个表格听起来并不复杂。

标签: c# .net winforms


【解决方案1】:

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

以下几行:

public partial class Form1 : Form //your main fomr
    {
        public static List<MyContainerClass> myContainer= new List<MyContainerClass>();
        .............

这里的 MyContainerClass 可能是您的代码中定义的某个类,它可以保存您想要保留的所有值。如果它只是一个字符串,那么您可以创建一个字符串列表。然后在每个表单中设置值

Form1.myContainer.Add(new_values);

在最后一个表单中,您可以访问值

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      创建一个包含所有变量的静态单例类。

      【讨论】:

        【解决方案4】:

        您只需要保留对可以访问所需数据的某些上下文的引用。

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

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

        【讨论】:

        • 这很有趣。但是不知道windows窗体中的Push方法是什么?
        • 这是SomeContext 类的方法,不存在。上面的代码只是一个例子。您需要实现某种存储机制才能访问您的表单。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多