2012-09-21 63 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 
} 

這將是比「源」更通用。

相關問題