Vollständige Version anzeigen : [.NET] Arbeiten mit Delegates


meckes
11.08.2007, 10:39

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)


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


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:

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):


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 :)

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Ähnliche Themen zu [.NET] Arbeiten mit Delegates
  • Arbeiten mit 16?
    Also ich werde nächstes Jahr 16 und würde gerne meinen ersten teilzeit job aufnehmen. Nur leider bin ich mir da mit der Rechtslage nicht ganz sicher. Was brauch ich denn alles um eiene job anehmen zu können? [...]

  • Arbeiten in den USA
    Hallo zusammen! Passend zum Thread über ein Praktikum, spinn ich mir gerade etwas zusammen evtl nach dem Studium im Ausland zu arbeiten. Ich hab Physik mit Schwerpunkt auf Experimental/Festkörperphysik studiert und schließ mein Studium wohl mit ner recht herzeigbaren Note ab, weshalb ich mir e [...]

  • Arbeiten USA?
    Hallo Leute, und zwar habe ich mich da mal was gefragt. Zur Zeit mache ich mein Abitur und würde gerne nach dem Abitur auf einer Uni studieren oder ein Dualstudium machen. Ich habe mich gefragt, ob es bestimmte Firmen gibt durch die man in den Staaten arbeiten könnte, oder es Studiengänge gibt o [...]

  • Arbeiten um zu leben oder Leben um zu arbeiten ??
    Hi, Es wird alles Teurer das ist fakt, angefangen hat es mit der Milch die um bis zu 40 Cent teurer wurde. Dann kam dazu das die Getreide Ernten ausblieben was zur folge hatte das die Tiernahrung teurer wurde. Wodurch Rind um 7%, Geflügel um 10% und Schweinefleisch sogar bis zu 30% teuer werden [...]



raid-rush.ws | Imprint & Contact pr