簡體   English   中英

如何在 VB:NET 的 MouseMove 事件中自動滾動面板或圖片框

[英]How to autoscroll panel or picturebox in MouseMove event in VB:NET

我正在嘗試使用模擬動態縮放的 mousemove 事件使用圖像自動滾動面板。 我在 VB.NET 中找到了這個示例Pan/scroll an image in VB.NET和 this Scroll panel based on mouse position但我意識到用戶必須單擊圖像才能拖動它,所以我嘗試修改代碼但沒有'不起作用這是我嘗試過的:

Private m_PanStartPoint As New Point
    
Private Sub PictureBox2_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox2.MouseMove

    Dim DeltaX As Integer = (m_PanStartPoint.X - e.X)
    Dim DeltaY As Integer = (m_PanStartPoint.Y - e.Y)

    Panel1.AutoScrollPosition = New Point((DeltaX - Panel1.AutoScrollPosition.X), (DeltaY - Panel1.AutoScrollPosition.Y))
End Sub

Private Sub PictureBox2_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox2.MouseEnter
    PictureBox2.SizeMode = PictureBoxSizeMode.AutoSize
    m_PanStartPoint = New Point(MousePosition)
End Sub

Private Sub PictureBox2_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox2.MouseLeave
    PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage
End Sub

我還嘗試添加事件 MouseHover:

Private Sub PictureBox2_MouseHover(sender As Object, e As EventArgs) Handles PictureBox2.MouseHover
    m_PanStartPoint = New Point(MousePosition)
End Sub

如果有辦法在沒有面板的情況下做到這一點,那就更好了。

'下面的 VB/XAML 代碼實現了鼠標左鍵單擊並按住滾動,也適用於觸摸屏。 使用此代碼時,將您的框架/網格/圖像放在滾動查看器中,如下所示:

'XAML

<ScrollViewer x:Name="ScrollViewerObject" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Hidden" ScrollViewer.CanContentScroll="False" PreviewMouseDown="Part_ScrollViewer_PreviewMouseDown" PreviewMouseMove="Part_ScrollViewer_PreviewMouseMove">
            <Frame x:Name="PartViewer" NavigationUIVisibility="Hidden"/>
        </ScrollViewer>

'VB

Dim LastScrollPos As Double = 0
Dim MouseStartPos AS Double = 0

Private Sub ScrollViewerObject_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs)
    Dim position As Point = Mouse.GetPosition(ScrollViewerObject)
    ScrollViewerObject.UpdateLayout()
    LastScrollPos = ScrollViewerObject.ContentVerticalOffset
    MouseStartPos = position.Y
End Sub

Private Sub ScrollViewerObject_PreviewMouseMove(sender As Object, e As MouseEventArgs)
    If Mouse.LeftButton = MouseButtonState.Pressed Then
        Dim position As Point = Mouse.GetPosition(ScrollViewerObject)
        ScrollViewerObject.ScrollToVerticalOffset(LastScrollPos + (position.Y - MouseStartPos))
    End If
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM