Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung

...powered by haas.homelinux.net...

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 2 Aufbauwissen VB.NET
  gp 2.1 Ein zweiter Dialog
  gp 2.2 Ein Süßigkeitenautomat
  gp 2.3 Eine Listbox
  gp 2.4 With ... End With
  gp 2.5 Die Liste
  gp 2.6 Eine ComboBox
  gp 2.7 Die Select-Case-Verzweigung
  gp 2.8 Ein theoretischer Exkurs: Ereignisse
    gp 2.8.1 Dynamisch ein- und ausblenden
    gp 2.8.2 Dynamische Größenänderung
  gp 2.9 Zwei völlig überflüssige Beispiele
  gp 2.10 Schleifen
  gp 2.11 For ... Next
  gp 2.12 Do ... Loop
  gp 2.13 Eine Schleife über den Süßigkeiten
  gp 2.14 Ein theoretischer Exkurs: Sammlungen oder Collections
  gp 2.15 Die For ... Each-Schleife
  gp 2.16 Schleifen spielerisch
    gp 2.16.1 Primzahlen
    gp 2.16.2 Fibonacci-Zahlen
    gp 2.16.3 ggT und kgV
    gp 2.16.4 Ein Scherz zum Schluss
  gp 2.17 Rekursives Programmieren
  gp 2.18 Arrays (Datenfelder)
    gp 2.18.1 Eindimensionale Arrays
    gp 2.18.2 Mehrdimensionale Arrays
  gp 2.19 Konstanten
  gp 2.20 Funktionen
  gp 2.21 Zusammenfassung


Galileo Computing

2.9 Zwei völlig überflüssige Beispiele  toptop

Manchmal sieht man es im Internet. Auf einer Dialogbox steht »Wenn Sie hier klicken, dann werden Sie befördert«. Kaum versuche ich, auf die Befehlsschaltfläche zu klicken, da ist sie schon auf der anderen Seite des Dialogs. Geht man mit der Maus dorthin, ist sie wieder zurückgesprungen. So kann man nie darauf klicken und wird nicht befördert.

Die Idee ist witzig. Das können Sie selbst basteln. Das Ereignis dazu heißt »MouseMove«.

Abbildung

Abbildung 2.26   Die Dialogbox mit der Befehlsschaltfläche

Das Ereignis »MouseMove« reagiert, wenn sich der Mauszeiger über der Schaltfläche befindet. Dann muss die Lage des Objekts verändert werden. Zwar kann die Lage mit der Eigenschaft Left abgefragt werden, aber leider ist sie schreibgeschützt, kann also nicht gesetzt werden. Deshalb muss man im Code nachsehen, welchen der Windows Form Designer generiert hat. Und dort findet sich die Lösung, die man dann wie folgt umsetzen kann:

Private Sub Button1_MouseMove(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If Me.Button1.Left = 8 Then
   Me.Button1.Location = New System.Drawing.Point(360, 56)
End If
End Sub

Wie kommt man auf die Zahlen? Nun: die Position von links (8) findet sich in den Eigenschaften. Der Code Designer setzt den Button auf:

Me.Button1.Location = New System.Drawing.Point(8, 56)

Nun kann man ausprobieren, an welche linke Position der Button verschoben werden soll. Damit er wieder nach rechts hüpft, kann das Beispiel erweitert werden:

If Me.Button1.Left = 8 Then
   Me.Button1.Location = New System.Drawing.Point(360, 56)
Else
   Me.Button1.Location = New System.Drawing.Point(8, 56)
End If

Wenn er links sitzt, dann setze ihn nach rechts, sonst nach links.

Übrigens würde es auch mit zwei Command-Buttons funktionieren, die sich jeweils gegenseitig unsichtbar machen (visible = true und visible = false).

Abbildung

Abbildung 2.27   Der Mauszeiger schafft es nie, auf die Befehlsschaltfläche zu klicken.

Ein Doppelklick auf die »Userform« führt zu »Userform_Load«. Doch auch das Formular verfügt über eine Reihe Ereignisse. Dazu darf aus der Liste der Steuerelemente nicht »Userform« gewählt werden, sondern »Basisklassenereignisse«. Dann findet sich in der rechten Dropdown-Liste eine große Anzahl von Ereignissen, die sich auf das Formular beziehen. Damit könnte beispielsweise die Position des Mauszeigers abgefangen werden.

Das Systemargument e verfügt beim Ereignis MouseMove über die beiden Eigenschaften X und Y. Damit kann die aktuelle Mausposition bestimmt werden. Auf dem Formular sitzen zwei Labels, LabelX und LabelY, welche dynamisch wie folgt beschriftet werden:

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal _
e As System.Windows.Forms.MouseEventArgs) Handles _
MyMase.MouseMove
   LabelX.Text = "X-Pos.: " & e.X.ToString
   LabelY.Text = "Y-Pos.: " & e.Y.ToString
Abbildung

Abbildung 2.28   Die aktuelle Mausposition wird bestimmt.

Dies kann nun verwendet werden, um farblich zu kennzeichnen, dass sich der Cursor über einem Steuerelement befindet. Vielleicht fragen Sie nun, wer so etwas benötigt.

In Access 97 wird diese Eigenschaft in einigen Dialogblättern verwendet. Zum Beispiel: Eine Befehlsschaltfläche trägt einen schwarzen Text. Bewegt sich der Mauszeiger darüber, dann wird der Text weiß. Befindet sich der Mauszeiger wieder daneben, kehrt die ursprüngliche Farbe zurück. Andere – nicht Microsoft-Produkte – machen hiervon exzessiv Gebrauch. Zugegeben, manchmal ist es schon ein wenig verwirrend, wenn sich ständig der Text in der Titelzeile verändert beim Schieben des Mauszeigers.

Die beiden Farben werden über den Button an die beiden Ereignisse MouseMove und MouseLeave gebunden:

Private Sub Button4_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button4.Click
   Me.Button4.ForeColor = System.Drawing.Color.White
End Sub

Private Sub Button4_MouseMove(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button4.Click
   Me.Button4.ForeColor = System.Drawing.Color.Black
End Sub
Abbildung

Abbildung 2.29   MouseMove

Abbildung

Abbildung 2.30   MouseLeave

Natürlich könnte man das zweite Ereignis auch an die »Userform« an das Ereignis »MouseMove« binden. Dies hätte aber den Nachteil, dass das Ereignis permanent aufgerufen würde, was Rechnerkapazitäten kostet.

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML