Hab mich heute mal ein bißchen rumgespielt und einige Extension-Methods gebastelt. Wenn ihr dieses Modul in euer Projekt einfügt, dann habt ihr drei neue Methoden bei euren Steuerelementen (getestet mit Buttons): Shrink, Grow, Attention.
Es richtet sich an die Bastler, für die Profis unter euch wird das nichts Neues sein. Die Bastler haben hier vielleicht einen Anreiz für eigene Ideen... (und die "Copy-und-Paste"-Kiddies... nun ja; Werdet glücklich damit;-) )
Extension-Methods wurden mit VB2008 eingeführt, laufen also nicht vorher.
Es richtet sich an die Bastler, für die Profis unter euch wird das nichts Neues sein. Die Bastler haben hier vielleicht einen Anreiz für eigene Ideen... (und die "Copy-und-Paste"-Kiddies... nun ja; Werdet glücklich damit;-) )
Extension-Methods wurden mit VB2008 eingeführt, laufen also nicht vorher.
VB.NET-Quellcode
- 'Erweitert die Controls mit Hilfe des Extensions-Attributs, deshalb:
- Imports System.Runtime.CompilerServices
- ''' <summary>
- ''' enthält diverse Erweiterungen für Controls.
- ''' </summary>
- ''' <remarks></remarks>
- Module Erweiterungen
- ''' <summary>
- ''' lässt das Control auf Breite=0 zusammenschrumpfen und dann verschwinden
- ''' </summary>
- ''' <param name="ct">wird auf dieses Control angewandt</param>
- ''' <remarks></remarks>
- <Extension()> Sub Shrink(ByVal ct As Control)
- 'Aktuelle Breite abfragen
- Dim breite As Integer = ct.Width
- 'die Schrift wird während des Vorgangs ausgeblendet
- Dim temptext As String = ct.Text
- ct.Text = ""
- 'das Control wird auf Breite=0 geschrumpft
- For q = breite To 0 Step -1
- ct.Width = q
- Next
- '...und zum Schluß unsichtbar gemacht
- ct.Visible = False
- 'die Breite wird wieder zurückgesetzt auf Original
- ct.Width = breite
- '...und die Beschriftung auch
- ct.Text = temptext
- End Sub
- ''' <summary>
- ''' lässt das Control erscheinen und von Breite=0 wachsen
- ''' </summary>
- ''' <param name="ct">wird auf dieses Control angewandt</param>
- ''' <remarks></remarks>
- <Extension()> Sub Grow(ByVal ct As Control)
- 'Wenn das Control unsichtbar ist...
- If ct.Visible = False Then
- 'die Beschriftung merken
- Dim temptext As String = ct.Text
- 'und vom Control entfernen
- ct.Text = ""
- 'die Breite merken
- Dim breite As Integer = ct.Width
- '...und auf den Startwert setzen
- ct.Width = 0
- 'dann das Control sichtbar machen
- ct.Visible = True
- 'und auf die Originalgrösse wachsen lassen
- For q = 0 To breite
- 'die Breite setzen
- ct.Width = q
- 'bei jedem 2. Schleifendurchlauf das Neuzeichnen des Controls erzwingen
- If CBool(q Mod 2) Then ct.Refresh()
- Next
- '...und den Text wieder auf den Originaltext setzen
- ct.Text = temptext
- End If
- End Sub
- ''' <summary>
- ''' bestimmt die Richtung des Attention-Effekts
- ''' </summary>
- ''' <remarks></remarks>
- Friend Enum enRichtung
- UhrzeigerSinn
- GegenUhrzeigerSinn
- End Enum
- ''' <summary>
- ''' bestimmt die Dauer des Attention-Effekts
- ''' </summary>
- ''' <remarks></remarks>
- Friend Enum enDauer
- kurz
- normal
- lang
- End Enum
- ''' <summary>
- ''' bestimmt, wie intensiv der Attention-Effekt ist
- ''' </summary>
- ''' <remarks></remarks>
- Friend Enum enIntensität
- sanft
- normal
- heftig
- End Enum
- ''' <summary>
- ''' die Aufmerksamkeit auf das Control legen
- ''' </summary>
- ''' <param name="ct">wird auf dieses Control angewandt</param>
- ''' <param name="dauer">die Dauer des Effekts</param>
- ''' <param name="Intensität">die Intensität des Effekts</param>
- ''' <param name="Richtung">in welcher Richtung</param>
- ''' <remarks>das Control wird dazu gebracht, zu "shaken", um die Aufmerksamkeit des Benzutzers zu bekommen</remarks>
- <Extension()> _
- Sub Attention(ByVal ct As Control, _
- Optional ByVal dauer As enDauer = enDauer.normal, _
- Optional ByVal Intensität As enIntensität = enIntensität.normal, _
- Optional ByVal Richtung As enRichtung = enRichtung.UhrzeigerSinn)
- 'die Anzahl der Durchläufe
- ' (entspricht der Dauer des Effektes)
- Dim Anzahl As Integer
- 'Abfragen des Enum-Wertes "Dauer"
- Select Case dauer
- Case enDauer.kurz
- Anzahl = 2
- Case enDauer.lang
- Anzahl = 15
- Case enDauer.normal
- Anzahl = 9
- End Select
- 'die Intensität des Effektes
- ' (soweit wird das Control nach allen Seiten bewegt)
- Dim iIntensität As Integer
- 'Abfragen des Enum-Wertes "Intensität"
- Select Case Intensität
- Case enIntensität.heftig
- iIntensität = 9
- Case enIntensität.normal
- iIntensität = 5
- Case enIntensität.sanft
- iIntensität = 3
- End Select
- 'den aktuellen Mauszeiger merken
- Dim oldMouse As System.Windows.Forms.Cursor
- oldMouse = ct.Cursor
- 'Mauszeiger ändern auf "Sanduhr"
- ct.Cursor = Cursors.WaitCursor
- 'Richtung einstellen
- If Richtung = enRichtung.GegenUhrzeigerSinn Then iIntensität = -iIntensität
- ''================================
- ''
- ''und hier geht der Effekt los...
- ''
- ''================================
- 'die aktuelle Position speichern
- 'diese Variablen werden zur Hilfe genommen, um die Position zu berechnen
- Dim oben As Integer = ct.Top
- Dim links As Integer = ct.Left
- 'i deklarieren (weil ich nicht immer "iIntensität" schreiben will ;-} )
- Dim i As Integer = iIntensität ''''''''''''''''''' mit i ist es hier momentan noch leichter
- Dim r As Integer = CInt(IIf(i < 0, 1, -1))
- 'Hilfsvariablen für die Schleifen
- Dim verPos, horPos As Integer
- ''Den Button zuerst mal in die Startposition bringen
- For verPos = 0 To i Step r
- ct.Top = oben + verPos
- Next
- For horPos = 0 To i Step r
- ct.Left = links + horPos
- Next
- ''Jetzt geht die Schleife los, und zwar...
- '' ...[Anzahl] Mal.
- Dim anz As Integer
- For anz = 1 To Anzahl
- 'in der Höhe in die eine Richtung gehen
- For verPos = i To -i Step r
- ct.Top = oben + verPos
- Next
- 'und jetzt in der horizontalen Richtung
- For horPos = i To -i Step r
- ct.Left = links + horPos
- Next
- 'in der Höhe ans andere Ende
- For verPos = -i To i Step -r
- ct.Top = oben + verPos
- Next
- 'und wieder auf der Horizontalen
- For horPos = -i To i Step -r
- ct.Left = links + horPos
- Next
- Next
- ''Jetzt kommt der Button wieder in die Ausgangsposition
- For verPos = i To 0 Step r
- ct.Top = oben + verPos
- Next
- For horPos = i To 0 Step r
- ct.Left = links + horPos
- Next
- 'und den Mauszeiger wieder zurücksetzen
- ct.Cursor = oldMouse
- End Sub
- End Module
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „der_Kurt“ ()