[.NET] Arbeiten mit Delegates

Dieses Thema im Forum "Programmier Tutorials" wurde erstellt von meckes, 11. August 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. August 2007
    Arbeiten mit Delegates

    Hi Progger ,

    ich dachte ich schreib ma wieder n kleines Tut über etwas das mir persönlich sehr hilft ^^.

    Es handelt sich um Delegates. In diesem Tutorial werde ich erklären wie man mit Hilfe von Delegates bestimmte eingaben in einer Textbox verhindern kann. Wenn ich z.B. will dass ich nur Zahlen eingeben kann.

    Also Los Gehts:

    Als Allererstes muss ich meinem Programm beibringen dass, wenn ein Bestimmtes event ausgelöst wird, es auf eine selbstgeschriebene Prozedur leiten soll (Diese Prozedur muss die selben Übergabeparameter haben wie die Eventprozedur hätte (Textbox1.KeyPress z.B.).
    Dazu schreiben wir uns einen Sub "MyDelegates" und Rufen diesen an dem Zeitpunkt auf andem wir die Delegates brauchen (in meinem Fall schreib ich sie in das Form Load event, dann kann ich sie von anfang an Nutzen)

    Code:
     Private Sub MyDelegates()
     AddHandler TextBox1.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox2.KeyPress, AddressOf OnlyChars
     End Sub
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     MyDelegates()
     End Sub
    
    "OnlyNumbers" - wird die Prozedur heißen die verhindert dass Buchstaben oder Zeichen eingegeben werden.

    "OnlyChars" - wird die Prozedur die ausschließlich Buchstaben von "A-Z" zulässt

    Nun Zu den Prozeduren

    Code:
     Private Sub OnlyNumbers(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
     Dim character As Integer
     character = Convert.ToInt32(e.KeyChar)
    
     'Wenn das Zeichen nicht Numerisch ist und nicht die "Backspace" Taste ist, dann verhindere die Eingabe
     If IsNumeric(e.KeyChar) = False And (character <> 8) Then
     e.KeyChar = ""
     End If
     End Sub
    
    
     Private Sub OnlyChars(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
     Dim character As Integer
     character = Convert.ToInt32(e.KeyChar)
    
     'Wenn das Zeichen kein Buchstabe ist und nicht die "BackSpace" Taste ist, dann verhindere die Eingabe
     If Not ((character >= 65 And character <= 90) Or (character >= 97 And character <= 122)) Then
     If character <> 8 Then
     e.KeyChar = ""
     End If
     End If
     End Sub
    
    Als Ergänzung: der Wert 8 entspricht der Backspace Taste
    der Rest dürfte Klar sein.

    Hier nochmal der Ganze Code am Stück:
    Code:
    Public Class Form1
    
     Private Sub MyDelegates()
     AddHandler TextBox1.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox2.KeyPress, AddressOf OnlyChars
     End Sub
    
     Private Sub OnlyNumbers(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
     Dim character As Integer
     character = Convert.ToInt32(e.KeyChar)
    
     'Wenn das Zeichen nicht Numerisch ist und nicht die "Backspace" Taste ist, dann verhindere die Eingabe
     If IsNumeric(e.KeyChar) = False And (character <> 8) Then
     e.KeyChar = ""
     End If
     End Sub
    
    
     Private Sub OnlyChars(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
     Dim character As Integer
     character = Convert.ToInt32(e.KeyChar)
    
     'Wenn das Zeichen kein Buchstabe ist und nicht die "BackSpace" Taste ist, dann verhindere die Eingabe
     If Not ((character >= 65 And character <= 90) Or (character >= 97 And character <= 122)) Then
     If character <> 8 Then
     e.KeyChar = ""
     End If
     End If
     End Sub
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     MyDelegates()
     End Sub
    End Class
    Jetzt Stellt sich natürlich die Frage, warum sollte ich extra einen MyDelegates Sub anlegen wenn doch die VisualStudios z.b. für Textbox1.Keypress auch einen eigenen Sub erstellen könnte.
    Die Antwort ist ganz einfach, ich kann die selbe Prozedur für verschiedene Textboxen benutzen und hab nur einen Sub und nicht z.B. 10. Beispiel für 10 Textboxen (einfach die TB's im MyDelegates Sub dazufügen):

    Code:
     Private Sub MyDelegates()
     AddHandler TextBox1.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox2.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox3.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox4.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox5.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox6.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox7.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox8.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox9.KeyPress, AddressOf OnlyNumbers
     AddHandler TextBox10.KeyPress, AddressOf OnlyNumbers
     End Sub
    In diesem Fall könnte man von TB1 - TB10 nur Zahlen eingeben.


    Hier die Testapp, dass ihr seht wie es dann so is ^^
    Download offline!


    Ich hoffe ihr könnt was damit anfangen! Ich bin net so der große erklärer ^^ aber wenn ihr Fragen habt, dann meldet euch.
    Wenn euch das Tut was gebracht hat, würd ich mich freuen wenn ihr euch Bedankt, dann seh ich wem's was gebracht hat
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.