0

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

因此,在最低级别的类中,我创建了一个像这样的公共枚举,以知道它是从哪里调用的,所以最后PopulateFields()知道如何根据它的来源来填充字段,正如您看到的调用堆栈转到不同的类所以我不得不将我的枚举定义为公开的。那么公共全局变量?嗯!这就是我想改变的,所以它不会再公开了。什么是更好的解决方案?也许我可以为这个枚举创建一个单独的类,而不是在那个类中定义它?那个更好吗?

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

1 回答 1

2

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

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

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

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

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

private enum FormState
{
    Insert,
    ViewData
} 

这将比“来源”更通用。

于 2012-09-21T14:23:41.650 回答