0

我正在制作一个简单的向导。我创建了一个静态类来保存我的表单:

    namespace LABEL_AUTOMATION
    {
        static class ProjectHelper
        {
            public static Form1 frm1 = new Form1();
            public static Form2 frm2 = new Form2();
        }

    }

对于form1的下一个按钮,我有以下代码:

 private void buttonNext_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        ProjectHelper.frm2.Visible = true;
    }

和 form2 的后退按钮的类似逻辑:

private void buttonPrevious_Click(object sender, EventArgs e)
{
    this.Visible = false;
    ProjectHelper.frm1.Visible = true;
}

问题是当我在表单之间移动时,文本框等控件的值会被清除。

如何纠正它?

另外,当用户在表单之间切换时,我正在使用表单的可见更改事件来执行代码。但是,该事件在表单可见之前被触发。我可以使用其他任何活动吗?

编辑:我实际上并没有更改实际上创建和运行 Form1 的单独实例的 Program.cs 文件。所以我将代码更改为:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    ProjectHelper.frm1.Show();
}  

但它给出了以下错误:

The type initializer for 'LABEL_AUTOMATION.ProjectHelper' threw an exception.
4

5 回答 5

2

为了解决您清除控件的问题,我将创建一个简单的 POCO 类来保存数据,并使用数据绑定将控件绑定到 POCO 类实例。这样,您在表单上输入的所有数据都会自动保存在 POCO 类中,当再次显示表单时,值会再次出现。

关于您的可见更改事件 - 一种选择是创建您自己的事件,并在表单中触发该事件。然后,您可以创建一个自动触发事件的基类。您在这个可见更改事件处理程序中到底在做什么?

于 2012-08-20T07:33:50.590 回答
1

我认为您正在显示/隐藏不在ProjectHelper课堂上的表单实例。

你应该在 Main 做

ProjectHelper.frm1.Show();

或者

ProjectHelper.frm2.Show();
于 2012-08-20T07:33:15.997 回答
0

我不知道这个问题,但我认为,您可以在使其不可见之前将所有值保存在一些变量中,并在您的表单再次可见时加载此设置

于 2012-08-20T07:32:41.213 回答
0

您必须将值保存在外部类中,或者在值更改时将值填充到两个表单元素中。

您可以使用事件TextChangedValueChanged在控制元素中,然后以其他形式设置值。或者使用外部类,您在其中设置值,每次切换时,您都必须从外部类重新加载值。

提示:我不会使用超过一种形式。只需使用一个表单和一些面板并将它们设置为可见或不可见。

于 2012-08-20T07:34:08.257 回答
0

我建议制作一个表格,并UserControl为您的向导中的每个步骤制作一个表格。然后,您的表单管理面板的可见性并可以处理(或触发)事件。

这样你就不需要静态并且可以完全控制它的生命;和向导步骤中的数据。

其次,为每个向导步骤创建一个自定义类(数据持有者),并使用 Windows 窗体数据绑定将 UI 控件(和验证)数据绑定到您的数据持有者。这样,您不需要在向导步骤上进行事件处理来保存数据,并且向导本身将成为一个简单的视图。

于 2012-08-20T07:51:03.130 回答