C#Win表格。传递值

C#Win表格。传递值,c#,forms,winforms,C#,Forms,Winforms,我有多个相互交互的winforms。一个表单允许用户输入一组属性,然后对它们进行验证,然后通过按钮单击移动到下一个表单。用户可以随时选择退出并转到上一个表单 我有一个业务对象类,它记录基本属性的值 最初,我使用简单、天真的参数在表单之间交换值。例如,让我们假设Form1和Form2。在按钮上单击“下一步”,Form1将隐藏,Form2将显示:- // event of button click "Next" on Form1.cs // private void btnNext_C

我有多个相互交互的winforms。一个表单允许用户输入一组属性,然后对它们进行验证,然后通过按钮单击移动到下一个表单。用户可以随时选择退出并转到上一个表单

我有一个业务对象类,它记录基本属性的值

最初,我使用简单、天真的参数在表单之间交换值。例如,让我们假设Form1和Form2。在按钮上单击“下一步”,Form1将隐藏,Form2将显示:-

   // event of button click "Next" on Form1.cs //
    private void btnNext_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2 (myTxtBoxValue.Text);
        form2.Show();
        this.Hide();
    }


    // constructor in Form2.cs //
    public Form2(string myTxtBoxValue)
    {
        InitializeComponent();
        TransactionBO trans = new TransactionBO();
        trans.myValue = myTxtBoxValue;  // <-- this gets the value accurately. 
    }

    // my Business Object class is called TransactionBO.cs //
    class TransactionBO
    {
       public string myValue {get;set;}
    }
//在Form1.cs上单击“下一步”按钮的事件//
private void btnNext_单击(对象发送方,事件参数e)
{
Form2 Form2=新的Form2(myTxtBoxValue.Text);
表2.Show();
this.Hide();
}
//Form2.cs中的构造函数//
公共表单2(字符串myTxtBoxValue)
{
初始化组件();
TransactionBO trans=新TransactionBO();

trans.myValue=myTxtBoxValue;//让我们谈谈同事们对依赖关系的担忧

对于levelset,让我们看一些拓扑图。假设这些是依赖图

您当前的设计(取决于细节)将有一个依赖关系图,它可以是直线、网格或“完全连接”所有这些图都具有这样的特性:在图中的任何一个节点上的代码更改都需要检查,并且可能需要在许多其他点上进行更改,在某些情况下,必须查看所有这些点。这是不好的

我们更喜欢的是一个更简单的图。例如,树要简单得多。但最好的是星型图。在星型图中,您只有成对的依赖关系;对任何一个节点的更改最多需要检查另一个节点。这意味着有更好的隔离性和修改弹性

那么,在你的情况下,我们如何得到星图呢?我会这样做

  • 定义一个表示整个工作流的新类。例如,如果它是注册到服务中的工作流,您可以将其称为
    EnrollmentWorkflow
    。在本例中,我将其称为
    工作流

  • 为工作流提供一系列字段和公共属性,这些字段和属性表示您需要从用户收集的每个数据项

  • 在启动多步骤用户界面的代码中,创建一个新的
    工作流
    实例,并将其传递给第一个表单的构造函数

  • 在用户完成表单时触发的事件处理程序中,添加代码以将表单的所有字段复制到
    工作流的属性中。然后实例化下一个表单,在构造函数中传递相同的工作流实例

  • 在下一个表单中,您可以从工作流对象中读取所需的所有值

  • 继续这样做,直到最后一步完成,此时您将把工作流传递到业务逻辑层进行处理

  • 如果愿意,您可以将数据查找、字段验证等辅助方法添加到工作流中,以便它们都包含在一个位置

  • 如果用户需要保存进度并在以后继续,只需少量工作,就可以将工作流作为序列化对象持久化,这是一件非常简单的事情


  • 最后,工作流对象将是星图的中心,表单将是周界上的节点。这样,您将得到一个漂亮、简单的依赖关系图,以及一个易于修改的良好设计。

    让我们谈谈同事们对依赖关系的担忧

    对于levelset,让我们看一些拓扑图。假设这些是依赖图

    您当前的设计(取决于细节)将有一个依赖关系图,它可以是直线、网格或“完全连接”所有这些图都具有这样的特性:在图中的任何一个节点上的代码更改都需要检查,并且可能需要在许多其他点上进行更改,在某些情况下,必须查看所有这些点。这是不好的

    我们更喜欢的是一个更简单的图。例如,树要简单得多。但最好的是星型图。在星型图中,您只有成对的依赖关系;对任何一个节点的更改最多需要检查另一个节点。这意味着有更好的隔离性和修改弹性

    那么,在你的情况下,我们如何得到星图呢?我会这样做

  • 定义一个表示整个工作流的新类。例如,如果它是注册到服务中的工作流,您可以将其称为
    EnrollmentWorkflow
    。在本例中,我将其称为
    工作流

  • 为工作流提供一系列字段和公共属性,这些字段和属性表示您需要从用户收集的每个数据项

  • 在启动多步骤用户界面的代码中,创建一个新的
    工作流
    实例,并将其传递给第一个表单的构造函数

  • 在用户完成表单时触发的事件处理程序中,添加代码以将表单的所有字段复制到
    工作流的属性中。然后实例化下一个表单,在构造函数中传递相同的工作流实例

  • 在下一个表单中,您可以从工作流对象中读取所需的所有值

  • 继续这样做,直到最后一步完成,此时您将把工作流传递到业务逻辑层进行处理

  • 如果愿意,您可以将数据查找、字段验证等辅助方法添加到工作流中,以便它们都包含在一个位置

  • 如果用户需要保存进度并在以后继续,只需少量工作,就可以将工作流作为序列化对象持久化,这是一件非常简单的事情

  • 最后,世界