2012-09-21 100 views
0

当我的表单显示一个对话框时,它可以从两个不同的调用栈打开,无论是从右键菜单选项还是从菜单命令。他们是不同的(一个是创建一个新的报告字段,另一个显示当前报告字段的属性)因此,我填写在该窗体的字段中的数据是不同的,但在某种程度上,他们也使用一些常见的方法。 所以我想要一种方法将信息传递给PopulateFields()方法,以便知道它是从属性窗口的右键单击还是从插入菜单选项中调用。在同一个DLL的两个类之间传递信息,但没有全局变量,公共变量

因此,在最低级别的课程中,我创建了一个像这样的公共激活来知道它在哪里被调用,因此最后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() 

回答

2

你可以定义表单类中枚举(因为它不属于形式)

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

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

  • 参数的构造函数:我们需要在“创建模式”,以打开的形式。
  • 带数据的构造函数:在“查看模式”中打开窗体并显示属性。

你仍然可以使用枚举和财产形式私有,这样所有的方法知道哪个构造函数被调用(因此无论我们正在创造一个新的报告或正在查看现有的)的所有点
这个枚举然后可以定义为(例如):

private enum FormState 
{ 
    Insert, 
    ViewData 
} 

这将是比“源”更通用。

相关问题