2015-08-15 37 views
0

NET用一種方法處理多個表單的VB.NET

我覺得我正在構建太多類似的方法。但是,我不知道如何最小化類似方法的數量。

我爲每個表單的事件實現了類似的方法。然而,每種方法都做着幾乎相同的任務,每種方法處理不同格式的事件

例如,我有一個類處理表單事件和兩個表單。

Public Class Form1 

    Dim IFL As New InterfaceLoader 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     IFL.Change_Label(Me) 
    End Sub 
End Class 


Public Class Form2 

    Dim IFL As New InterfaceLoader 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     IFL.Change_Label(Me) 
    End Sub 
End Class 


Public Class InterfaceLoader 

    Public Sub Change_Label(Nameofform As Form1) 
     Nameofform.Label1.Text = "Hey This is Form !!" 
    End Sub 

    Public Sub Change_Label(Nameofform As Form2) 
     Nameofform.Label1.Text = "Hey This is Form !!" 
    End Sub 
End Class 

基本上,Interfaceloader類中的方法執行完全相同的任務。但是,它處理來自不同形式的標籤。

我在想「對象」 Param類型可能會奏效,但它給了錯誤

我不知道如何使一個方法來處理多形式的活動。 :(

還有什麼能讓一個方法來處理這兩種形式事件分別?

+0

如果您有兩種形式做同樣的事情,他們爲什麼是兩種不同的形式? – Plutonix

+0

@Plutonix謝謝你的問題。這僅僅是一個例子。然而,當我正在建立學校項目時,每個設置部分都具有完全相同的行爲(但不是每個表單中的每個事件),但它是通過不同的方法工作的。 (如加載一些數據來形成。)。因此,我只想製作一種每種形式都可以共享窗體事件的方法。 – NBB

+0

聲明一個接口,同時具有兩個窗體類實現它。現在只需要一個Change_Label()方法。 –

回答

0

我假設你發佈僅僅是一個例子,所以最好的解決方案將取決於你真正需要做的任何方式。但是,這樣做你貼什麼是將標籤傳遞給單個Change_Label方法的簡單的方法。

Public Class Form1 
    Dim IFL As New InterfaceLoader 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     IFL.Change_Label(me.Label1) 
    End Sub 
End Class 

Public Class Form2 
    Dim IFL As New InterfaceLoader 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     IFL.Change_Label(me.Label1) 
    End Sub 
End Class 

Public Class InterfaceLoader 
    Public Sub Change_Label(theLabel As Label) 
     theLabel.Text = "Hey This is Form !!" 
    End Sub 
End Class 

注意這是因爲來自Button.Click事件傳遞的參數的類型是相同的(即Label )。

如果您有幾種具有相同特徵的表單,另一種可能的方法是創建基類(我們稱之爲MyForm),它繼承自Form幷包含所有這些共同特徵。現在您可以讓所有表單繼承MyForm而不是從Form繼承,並且您的InterfaceLoader類可以擁有類型爲MyForm的參數的方法。更好的是,您在InterfaceLoader中的方法可以改爲MyForm的方法。有關從Form繼承的信息,可以在MSDN上閱讀Windows Forms Visual Inheritance

+0

是的,這是例子。當我在研究項目時,我一直在想方法來簡化所有的代碼。我正在考慮接口和抽象類,但我找不到合適的方法......是否有任何資源可以研究這種VB.NET方法?謝謝:) – NBB

+0

@NBB:我編輯了我的答案,包含一個涵蓋從「Form」繼承的MSDN文檔的鏈接。 – Blackwood

0

您使用引用Click的另一個控件(Me.Label1)按鈕的事件處理程序。
在這種情況下,可用於所有窗體和按鈕的事件處理程序需要了解該標籤控件。
使用.Tag在每個表單構造函數引用Label

Public Class InterfaceLoader 

    Public Shared Sub Button_ClickChangeLabel(sender as Object, e As EventArgs) 
     Dim btn As Button = TryCast(sender, Button) 
     If btn Is Nothing Then Exit Sub 
     Dim mylabel As Label = TryCast(btn.Tag, Label) 
     If mylabel Is Nothing Then Exit Sub 
     mylabel.Text = "This is Form" 
    End Sub 

End Class 

然後Button財產下一行線處理程序添加到控制

Me.YourButton.Tag = Me.Label1 
AddHandler Me.Button1.Click, AddressOf InterfaceLoader.Button_ClickChangeLabel 

但如果過程的邏輯可以保持內部表格,然後我沒有看到你需要使用外部類的原因。
如果在不同形式下使用相同的行爲,則爲其創建基類

+0

感謝您的幫助,我有任何資源可以爲這些想法學習嗎?謝謝 :) – NBB