vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Maus & Tastatur · Maus   |   VB-Versionen: VB2005, VB2008, VB201023.03.11
FlowLayoutPanel: Scrollen über Maus- und Tastatur-Events

Ein Tipp, der zeigt, wie sich der Inhalt des FlowLayoutPanel autom. per Maus und Tastatur scrollen lässt, sobald der Mauszeiger in das Control bewegt wurde.

Autor:   Hubert PröschlBewertung:  Views:  14.667 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Auch wenn die vertikale Scroll-Leiste sichtbar ist, reagiert das u.U. FlowLayoutPanel nicht sofort - wie andere Controls - auf die gewohnten Eingaben über Tastatur bzw. Maus. Dies ist erst mit zusätzlichen Programmieraufwand möglich.

Dieser Tipp soll die Funktionsweise veranschaulichen.

Private Sub Form1_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
 
  ' AutoScroll aktivieren
  Me.FlowLayoutPanel1.AutoScroll = True
End Sub
' Event-Code für das Maus-Rad:
Private Sub FlowLayoutPanel1_MouseEnter(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles FlowLayoutPanel1.MouseEnter
 
  FlowLayoutPanel1.Focus()
End Sub
' Event-Code für die Tastatur:
Private Sub FlowLayoutPanel1_PreviewKeyDown(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) 
  Handles FlowLayoutPanel1.PreviewKeyDown
 
  Select Case e.KeyCode
    Case Keys.Up
      Call scrollFlowLayoutPanel(Me.FlowLayoutPanel1, "up", False, 2)
    Case Keys.Down
      Call scrollFlowLayoutPanel(Me.FlowLayoutPanel1, "down", False, 2)
    Case Keys.PageUp
      Call scrollFlowLayoutPanel(Me.FlowLayoutPanel1, "up", True)
    Case Keys.PageDown
      Call scrollFlowLayoutPanel(Me.FlowLayoutPanel1, "down", True)
  End Select
End Sub
' Prozedur für das Scrollen per Tastatur
Private Sub scrollFlowLayoutPanel(ByVal flp As System.Windows.Forms.FlowLayoutPanel, _
  ByVal sDirection As String, _
  ByVal bLargeChange As Boolean, _
  Optional ByVal intFactor As Integer = 3)
 
  ' Scrollbetrag
  Dim intChangeAmount As Integer
 
  With flp
    ' Festlegen des in bLargeChange übergebenen Scrollbetrages
    If bLargeChange = False Then
      intChangeAmount = flp.VerticalScroll.SmallChange * intFactor
    Else
      intChangeAmount = flp.VerticalScroll.LargeChange
    End If
 
    ' Aktuelle Position der Scrollbar
    Dim currentPosition As Integer = flp.VerticalScroll.Value
 
    ' Scrollrichtung
    If sDirection.ToLower = "up" Then
      ' Scoll UP
      If currentPosition - intChangeAmount > flp.VerticalScroll.Minimum Then
        flp.VerticalScroll.Value -= intChangeAmount
      Else
        flp.VerticalScroll.Value = flp.VerticalScroll.Minimum
      End If
    ElseIf sDirection.ToLower = "down" Then
      ' Scroll DOWN
      If currentPosition + intChangeAmount < flp.VerticalScroll.Maximum Then
        flp.VerticalScroll.Value += intChangeAmount
      Else
        flp.VerticalScroll.Value = flp.VerticalScroll.Maximum
      End If
    End If
 
    ' Layout-Logik anwenden
    flp.PerformLayout()
    My.Application.DoEvents()
  End With
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.