在同一DLL的两个类之间传递信息但没有Global,Public变量

时间:2012-09-21 14:12:00

标签: c#

当我的表单中显示一个对话框时,可以从两个不同的调用堆栈打开它,可以是右键菜单选项或菜单命令。它们是不同的(一个是创建一个新的报告字段,另一个是显示当前报告字段的属性)所以我在该表单的字段中填充的数据是不同的,但在某处,它们也使用了一些常用的方法。 所以我想要一种方法将信息传递给PopulateFields()方法,以便它知道是从属性窗口的右键单击还是从“插入菜单”选项调用它。

因此,在最低级别的课程中,我创建了一个这样的公共启动,以便知道从哪里调用它,所以最后PopulateFields()知道如何填充字段,具体取决于它来自哪里,就像你一样看到调用堆栈进入不同的类,所以我不得不将我的枚举定义为public。那么公共全局变量?咩!这就是我想改变的地方,所以它不会再公开了。什么是更好的解决方案?也许不是在那个类中定义它,我可以为这个枚举创建一个单独的类?那更好吗?

public enum FieldDialogSource
{
    FromPropertiesWindow,
    FromInsertMenu
}

public FieldDialogSource FieldDialogLaunchSource { get; set; }

MyLibrary.FieldDlgController.PopulateFields()
MyLibrary.frmMyForm.Init()
MyLibrary.frmMyForm.ShowForm()
MyLibrary.FieldDlgController.ShowForm()
MyLibrary.Controller.FiledProperties()

1 个答案:

答案 0 :(得分:2)

您可以在表单类中定义枚举(因为它确实属于表单)

另一方面,传递表格的“从哪里”可能不被视为良好做法。如果您突然允许用户也使用右键单击以在不同的状态下打开表单,或者如果需要添加第三个源来打开表单(在两个现有状态之一中),该怎么办...

也许你可以重载你的构造函数:

  • 无参数构造函数:我们需要以“创建模式”打开表单。
  • 包含数据的构造函数:在“查看模式”中打开表单并显示属性。

您仍然可以在表单中将枚举和属性用作私有,以便所有方法都知道调用哪个构造函数(因此我们是创建新报告还是正在查看现有报告)
然后可以将此枚举定义为(例如):

private enum FormState
{
    Insert,
    ViewData
} 

这比“来源”更通用。