2016-04-17 7 views
0

Der nächste Code funktioniert für meine, aber ich weiß nicht, ob es der beste Weg ist, es zu tun. Auf diese Weise muss ich schreiben: _Button1 = Button1 und _MyVar = MyVar Diese Art zu tun scheint wiederholt und lang, wenn die Parameter an den Klassenkonstruktor übergeben werden, sind viel mehr.Handle ein Formular steuert Ereignisse aus einer Klasse

Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
     Dim myVar As String = "My children" 
     Dim NewClass1 As New Class1(Button1, myVar) 
     '... do more ... 
    End Sub 
End Class 

Public Class Class1 
    Private WithEvents _Button1 As Button 
    Private _MyVar As String 

    Public Sub New(ByVal Button1 As Button, ByVal MyVar As String) 
     _Button1 = Button1 
     _MyVar = MyVar 
    '... do more ... 
    End Sub 

    Private Sub _Button1_Click(sender As Object, e As EventArgs) _ 
     Handles _Button1.Click 
     MsgBox("Button1 clicked and I love: " & _MyVar) 
    End Sub 
End Class 
+0

Behandeln Sie das Klickereignis nicht, bevor Sie nicht einmal über eine Schaltfläche verfügen. Verwenden Sie stattdessen "AddHandler" im Konstruktor. –

Antwort

0

_Button1 = Button1 und _MyVar = EigeneVar Auf diese Weise, es zu tun scheint, sich wiederholende und lang, wenn die an den Konstruktor der Klasse übergebenen Parameter viele mehr sind.

Dies ist eigentlich Dependency Injection und ist in der Regel eine gute Sache. Wenn Sie zu viele Konstruktorparameter haben, sollte es ein Hinweis darauf sein, dass Ihre Klasse zu viele Dinge tut und gegen die Prinzipien SOLID verstößt.

Allerdings sollte Ihre Class1 keine Abhängigkeiten zu Form1 haben, es sollte umgekehrt sein. Der Code könnte viel einfacher sein:

Public Class Class1 
    Friend Sub DoSomething(ByVal MyVar As String) 
     MsgBox(MyVar) 
    End Sub 
End Class 

Public Class Form1 
    Public Property class1() As Class1 

    Sub New() 
     InitializeComponent() 
     Me.class1 = New Class1() 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     class1.DoSomething("blah, blah") 
    End Sub 
End Class 

Während ich nicht Dependency Injection hier demonstriert (der Einfachheit halber), können Sie nur sehen Class1 weiß, dass es einige Arbeit zu tun, sie nicht wissen, über das Formular alle.

Sie könnten das Button-Click-Ereignis in Class1 abonnieren, anstatt den Button hinein zu geben. Es wäre sauberer, aber immer noch schlechtes Design.

Verwandte Themen