vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Panel - 2 Probleme mit scrollen 
Autor: keco
Datum: 12.09.08 16:24

Hallo,

ich hab ein UserControl mit einem Panel, was mir Probleme mit dem scrollen bereitet. AutoScroll ist natürlich true. Ich habe folgenden Code:

EDIT: Der Code steht in dem UserControl

   Private filter As ScrollPanelMessageFilter
 
   Private Sub Panel1_Scroll(ByVal sender As System.Object, ByVal e As _
     System.Windows.Forms.ScrollEventArgs) Handles Panel1.Scroll
      lblScrollValue.Text = e.NewValue.ToString
   End Sub
 
   Private Sub btnScroll_Click(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles btnScroll.Click
      ScrollToBottom()
   End Sub
 
   Public Sub ScrollToBottom()
      Panel1.VerticalScroll.Value = Panel1.DisplayRectangle.Height - _
        Panel1.ClientRectangle.Height
   End Sub
 
   Private Sub ViewerList_MouseEnter(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles MyBase.MouseEnter, Panel1.MouseEnter
      filter = New ScrollPanelMessageFilter(Me.Panel1)
      Application.AddMessageFilter(filter)
   End Sub
 
   Private Sub ViewerList_MouseLeave(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles MyBase.MouseLeave
      Application.RemoveMessageFilter(filter)
   End Sub
 
   Private Class ScrollPanelMessageFilter
      Implements IMessageFilter
 
      Private Panel As Panel
      Private panelHasFocus As Boolean = False
 
      Const WM_MOUSEWHEEL As Integer = &H20A
      Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
        hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal _
        lParam As Integer) As Integer
 
      Public Sub New(ByVal Panel As Panel)
         Me.Panel = Panel
         AddFocusEvents(Panel)
      End Sub
 
      Private Sub AddFocusEvents(ByVal parentControl As Control)
         ' Für jedes Control die entsprechenden Events hinzufügen
         For Each ctrl As Control In parentControl.Controls
            If ctrl.Controls.Count = 0 Then
               ' Events hinzufügen
               AddHandler ctrl.GotFocus, AddressOf control_GotFocus
               AddHandler ctrl.LostFocus, AddressOf control_LostFocus
            Else
               ' Methode rekursiv ausführen, wenn Sub-Control Controls enthält
               AddFocusEvents(ctrl)
            End If
         Next
      End Sub
 
      Private Sub control_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
         panelHasFocus = True
      End Sub
 
      Private Sub control_LostFocus(ByVal sender As Object, ByVal e As _
        EventArgs)
         panelHasFocus = False
      End Sub
 
      Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) _
        As Boolean Implements _
        System.Windows.Forms.IMessageFilter.PreFilterMessage
         If m.Msg = WM_MOUSEWHEEL And Panel.CanFocus And Not panelHasFocus And _
         Panel.VerticalScroll.Visible Then
            Dim rect As Rectangle = Panel.RectangleToScreen( _
            Panel.ClientRectangle)
            Dim cursorPoint As New Point(Cursor.Position.X, Cursor.Position.Y)
 
            ' If-Abfrage, wenn Scrollen nur möglich sein soll, wenn der 
            ' Mauszeiger
            ' über dem Panel ist
 
            ' If (cursorPoint.X > rect.X And cursorPoint.X < rect.X + 
            ' rect.Width) And (cursorPoint.Y > rect.Y And cursorPoint.Y < 
            ' rect.Y + rect.Height) Then
            SendMessage(CInt(Panel.Handle), m.Msg, CInt(m.WParam), CInt( _
              m.LParam))
            Return True
            ' End If
         End If
 
         Return False
      End Function
   End Class
Mit dem ScrollPanelMessageFilter kann ich das Panel scrollen, sobald ich mit der Maus über dem userControl bin. Aber das wird nicht mehr zurückgesetzt, wenn ich das UserControl verlasse? Das wäre mein erstes Problem. Mein zweites Problem ist das Scrollen bis ganz nach unten. Dazu habe ich ienen Button, der das bezwecken soll, allerdings bleibt die Scrollbar an der gleichen Stelle (gescrollt wird trotzdem!). Gibts dafür eine Lösung?

Beitrag wurde zuletzt am 12.09.08 um 16:26:09 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Panel - 2 Probleme mit scrollen2.822keco12.09.08 16:24
Re: Panel - 2 Probleme mit scrollen1.070keco16.09.08 18:12

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel