2013-01-22 44 views
2

我有一個Private Sub Modify()裏面的表格類A來處理按鈕或標籤的行爲(都屬於相同的A類)。 比方說,它這樣做:使用模塊處理表單類元素是否正確?

Private Sub Modify() 
    btnFoo.Enabled = True 
    lblBar.Text = "labelbar" 
End Sub 

如果我將Private Sub Modify()從表單類A移動到模塊B,並將它命名Public Sub Modify我必須做些什麼來改變同一按鈕或標籤的行爲是一樣的東西這樣的:

Public Sub Modify() 
    A.btnFoo.Enabled = True 
    A.lblBar.Text = "labelbar" 
End Sub 

但是這會不會aproppiate,考慮到模塊是某種靜態元素? 我想知道propper的方式,所以我可以跟上良好的做法。

在此先感謝。

+0

沒有............. –

回答

1

對於模塊,類或其他任何訪問另一個對象的屬性的多層次來說,這幾乎不是一個好主意。如果沒有別的,它會打破The Law of Demeter。更籠統地說,讓表單外的任何東西直接操縱表單的任何控件都不是一個好主意。我認爲,首先違反控制措施是公開的,這是令人遺憾的。如果您需要從表單外部調用它,最好將Modify方法保留在表單上,​​並將其設置爲Public

+0

很有用的答案@StevenDoggart,謝謝。現在,當我需要開發任何OOP解決方案時,我會牢記LoD。 – luchosrock

1

如果沿着這條路走下去,最終會有很多模塊在很多窗體中改變很多東西......如果您想要使用新功能擴展程序或修復錯誤。

更好的規則是:在表單中完成所有關於表單的內容。

爲什麼你真的想要將代碼提取到模塊中?是否因爲你會在很多形式中做同樣的事情?在這種情況下,它可能會提取來提取此類代碼,但不要讓Module知道特定的表單。相反,你可以做

Public Sub Modify(button As Button, label As Label) 
    button.Enabled True 
    label.Text = "labelbar" 
End Sub 

,並調用以多種形式與

Private Sub ChangeElements() 
    Modify(btnFoo, lblBar) 
End Sub 

但同樣,它是更好的形式來告別這樣的事情。