Computerwissenschaften

Die Parameter Vb.Net Sender und e Event

In VB6 war eine Ereignis-Subroutine wie Button1_Click viel weniger kompliziert, da das System die Subroutine ausschließlich beim Namen nannte. Wenn ein Button1_Click-Ereignis vorhanden war, hat das System es aufgerufen. Es ist direkt und unkompliziert.

In VB.NET gibt es jedoch zwei wichtige Upgrades, die VB.NET SOOPercharged machen (das ist „OOP“ für objektorientierte Programmierung ).

  1. Die „Handles“ -Klausel steuert, ob das System die Unterroutine aufruft, nicht den Namen.
  2. Die Parameter sender und e werden an das Unterprogramm übergeben.

 

Verwendung von Parametern

Schauen wir uns ein einfaches Beispiel an, um den Unterschied zu sehen, den Parameter in VB.NET bewirken.


Private Sub Button1_Click (

 

 ByVal Absender Als System.Object,

 

 ByVal e As System.EventArgs

 

 ) Behandelt Button1.Click

 

 'Ihr Code geht hier

 

End Sub

Ereignisunterprogramme erhalten immer ein „Absender“ -Objekt und einen System-EventArgs-Parameter „e“. Da der Parameter EventArgs ein Objekt ist, unterstützt er alle erforderlichen Eigenschaften und Methoden. Zum Beispiel empfing die alte VB6 MouseMove-Ereignisunterroutine vier Parameter:

  • Schaltfläche als Ganzzahl
  • Als Ganzzahl verschieben
  • X als Single
  • Y als Single

Als fortgeschrittenere Mäuse mit mehr Tasten herauskamen, hatte VB6 ein echtes Problem damit, sie zu unterstützen. VB.NET übergibt nur einen MouseEventArgs-Parameter, unterstützt jedoch viel mehr Eigenschaften und Methoden. Und jedes von ihnen sind Objekte, die noch mehr unterstützen. Die e.Button-Eigenschaft enthält beispielsweise alle folgenden Eigenschaften:

  • Links
  • Mitte
  • Richtig
  • Keiner
  • XButton1
  • XButton2

Wenn jemand eine „trancendental“ -Maus mit einer „virtuellen“ Schaltfläche erfindet, muss VB.NET nur das .NET Framework aktualisieren, um dies zu unterstützen, und kein vorheriger Code wird dadurch beschädigt.

Es gibt eine Reihe von .NET-Technologien, die absolut von diesen Parametern abhängen. Da Ihr PC normalerweise nur einen einzigen Bildschirm zum Anzeigen von Grafiken hat, muss Ihr Code die von ihm erstellten Grafiken in demselben von Windows verwendeten Bild zusammenführen. Aus diesem Grund muss ein einzelnes „Grafik“ -Objekt gemeinsam genutzt werden. Die Hauptmethode, mit der Ihr Code dieses „Grafik“ -Objekt verwenden kann, besteht darin, den Parameter e zu verwenden, der mit dem PaintEventArgs-Objekt an das OnPaint-Ereignis übergeben wird.


Geschützte Überschreibungen Sub OnPaint (

 

 ByVal e As System.Windows.Forms.PaintEventArgs)

 

 Dim g As Graphics=e.Graphics

 

Andere Beispiele

Was können Sie mit diesen Parametern noch tun? Angenommen, Sie möchten herausfinden, ob eine Zeichenfolge, möglicherweise etwas, das Sie in ein Textfeld eingegeben haben, in einer Sammlung anderer Textfelder vorhanden ist, wenn Sie auf eines klicken. Sie können ein paar Dutzend praktisch identische Unterprogramme für jedes Textfeld codieren:


Wenn TextBox42.Text.IndexOf (

 

 SearchString.Text)=-1

 

 Dann NotFound.Text=

 

 "Nicht gefunden"

Aber es ist viel einfacher, nur einen zu codieren und ihn alle verarbeiten zu lassen. Der Absenderparameter zeigt an, auf welches Textfeld geklickt wurde.


Private Sub FindIt (

 

 ByVal Absender Als System.Object,

 

 ByVal e As System.EventArgs

 

 ) Behandelt TextBox1.Enter,

 

 TextBox2.Enter,

 

. . . und weiter und weiter . . .

 

 TextBox42.Enter

 

 Dim myTextbox As TextBox

 

 myTextbox=Absender

 

 Dim IndexChar As Integer=

 

 myTextbox.Text.IndexOf (

 

 SearchString.Text)

 

 Wenn IndexChar=-1, dann _

 

 NotFound.Text="Nicht gefunden" _

 

 Sonst _

 

 NotFound.Text="Gefunden!"

 

 End Sub

Kürzlich fragte mich ein Programmierer nach einer besseren Möglichkeit, „die Zeile zu löschen, auf die in einer der sechs angegebenen Listen geklickt wurde“. Er ließ es in ein paar Dutzend Codezeilen arbeiten, die mich einfach verwirrten. Aber mit dem Absender war es wirklich ganz einfach:


Private Sub ListBox_Click (

 

 ByVal Absender als Objekt,

 

 ByVal e As System.EventArgs

 

 ) Behandelt ListBox1.Click, ListBox2.Click

 

 Dim myListBox As New ListBox

 

 myListBox=Absender

 

 myListBox.Items.RemoveAt (myListBox.SelectedIndex)

 

End Sub

Ein weiteres Beispiel, um den Punkt zu verdeutlichen, ist eine Frage, die Pierre in Belgien eingereicht hat. Pierre testete die Gleichheit von Button1 und Absender mit dem Is- Operator für Objekte:


Wenn der Absender Button1 ist, dann ...

Dies ist syntaktisch korrekt, da Absender und Button1 beide Objekte sind, auf die verwiesen werden kann. Und da der Absender wirklich mit Button1 identisch ist, warum funktioniert es nicht?

Die Antwort hängt von einem Schlüsselwort ab, das etwas früher in der Anweisung gefunden wurde. Überprüfen wir zunächst die Microsoft-Dokumentation für den Operator Is .

Visual Basic vergleicht zwei Objektreferenzvariablen mit dem Is-Operator. Dieser Operator bestimmt, ob zwei Referenzvariablen auf dieselbe Objektinstanz verweisen.

Beachten Sie, dass der Absender von ByVal übergeben wird . Das bedeutet, dass eine Kopie von Button1 übergeben wird, nicht das eigentliche Objekt. Wenn Pierre also prüft, ob Absender und Button1 dieselbe Instanz sind, ist das Ergebnis False.

Um zu testen, ob auf Button1 oder Button2 geklickt wurde, müssen Sie den Absender in ein tatsächliches Button-Objekt verwandeln und dann eine Eigenschaft dieses Objekts testen. Normalerweise wird Text verwendet, aber Sie können einen Wert in Tag oder sogar in der Location-Eigenschaft testen.

Dieser Code funktioniert:


Dim myButton As Button

 

myButton=Absender

 

Wenn myButton.Text="Button1" Dann

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.