2012-11-23 300 views
1

我有一個自動滾屏面板,我需要改變鼠標的滾動行數更換鼠標滾輪滾動條?

我的意思是這樣的:

(西班牙語,對不起鼠標屬性)

enter image description here

但我將改變它在我的程序中,對於我的面板,obvius,而不是在SO! PS:例如Winamp媒體播放器有一個選項。

我無法找到任何信息,請幫助。

UPDATE

我的滾動條是 「自動滾動」 屬性面板

我的事件是這樣的:

Private Sub Panel1_MouseScroll(sender As Object, e As MouseEventArgs) Handles Panel1.MouseWheel 

    Panel1.Invalidate() 

    End Sub 

這是我的面板的內容:

' Checkbox drawing 
Public Sub updatecheckboxes() 
    ' delete the old checkboxes 
    Panel1.Controls.Clear() 
    ' create the new checkboxes 
    Dim filesystem = CreateObject("Scripting.FileSystemObject") 
    Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) 
    Dim i As Int32 = 0 
    Dim pos As Int32 = 10 
    For Each folder In ThisDir.Subfolders 
     Array.Resize(mcheck, i + 1) 
     mcheck(i) = New CheckBox 
     With mcheck(i) 
      .AutoSize = True 
      .Location = New Point(10, pos) 
      .Name = "CheckBox" & i + 1 
      .Text = folder.Name 
     End With 
     Me.Panel1.Controls.Add(mcheck(i)) 
     AddHandler mcheck(i).CheckedChanged, AddressOf LlamadaCheckBox 
     i += 1 
     pos += 20 
    Next 

End Sub 

enter image description here

我想改變,因爲面板內扭曲efefct的滾動的行數,如果我用「一個scoll頁」或「10個滾動在時間」像Windows的imagen畫質因此屬性然後我就可以修理它!

+0

你想改變'鼠標屬性 - >輪 - >在time'到任意數量的從你的程序下面的行數? – Neolisk

+0

我有一個面板,當我在我的應用程序使用鼠標滾輪的話,我想滾動「X」線,例如向上或向下20行,三江源評論和你的答案 – ElektroStudios

+0

眼下它不以滾動所有,這是否正確? (這是我遇到的,即默認面板上的鼠標滾輪不會滾動) – Neolisk

回答

1

您可以使用SendMessage任意數量的您想要的行滾動,無論什麼在SystemInformation.MouseWheelScrollLinesMouseWheel event does not occur for a Panel。所以,我測試了一個文本框:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ 
       (ByVal handle As IntPtr, ByVal wMsg As Integer, 
       ByVal wParam As Integer, ByVal lParam As Integer) As Integer 

滾動一行起來:

SendMessage(TextBox1.Handle, &HB6, 0, -1) 

滾動下移一行:

SendMessage(TextBox1.Handle, &HB6, 0, 1) 

最後一個參數是一個行數,符號指示方向。負面向上,積極向下。

你應該能夠覆蓋/抑制鼠標滾輪操作和插入這兩個語句來代替,這取決於傳遞delta價值符號。

+0

感謝,我試圖發送與你的例子,但我還是消息滾動5條默認線......也許是我做錯了什麼 – ElektroStudios

+0

@ElektroHacker:可能是因爲你沒有取消原有的事件。但請考慮「CheckedListBox」。它應該解決你的大部分問題。 – Neolisk

+0

我不能讓一個checkedlistbox透明的,它不具備自動滾屏增加一個滾動條(我沒有理念如何手動添加一個),三江源反正 – ElektroStudios

1

您可以查看MouseWheel事件的MSDN示例。他們建議像這樣的東西,您可以通過將SystemInformation.MouseWheelScrollLines替換爲要滾動的行數來更改更改的數量。

從鏈接:

Private Sub panel1_MouseWheel(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseWheel 
     ' Update the drawing based upon the mouse wheel scrolling. 
    Dim numberOfTextLinesToMove As Integer = CInt(e.Delta * SystemInformation.MouseWheelScrollLines/120) 
    Dim numberOfPixelsToMove As Integer = numberOfTextLinesToMove * fontSize 

    If numberOfPixelsToMove <> 0 The 
     Dim translateMatrix As New System.Drawing.Drawing2D.Matrix() 
     translateMatrix.Translate(0, numberOfPixelsToMove) 
     mousePath.Transform(translateMatrix) 
    End If 
    panel1.Invalidate() 
End Sub 

另外一個例子:

我轉身自動滾屏的,因爲它似乎想至少讓你的系統滾動線中的最低。我不得不進行一些檢查,以防止不斷滾動傳遞範圍。玩它,看看它是否適合你。

Private Sub panel1_MouseWheel(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseWheel 
    Dim numberOfTextLinesToMove As Integer = CInt(e.Delta * 20/120) 
    Dim numberOfPixelsToMove As Integer = numberOfTextLinesToMove * mcheck(0).Font.Size 

    If numberOfPixelsToMove <> 0 Then 
     If (numberOfPixelsToMove > 0) Then 
      If (mcheck(0).Top >= 0) Then Exit Sub 
     Else 
      If (mcheck(mcheck.Length - 1).Top) <= Panel1.Height Then Exit Sub 
     End If 

     TranslateCheckboxes(numberOfPixelsToMove) 
    Else 
     Exit Sub 
    End If 
    Panel1.Invalidate() 
End Sub 

Private Sub TranslateCheckboxes(pixels As Integer) 
    For x = 0 To mcheck.Length - 1 
     mcheck(x).Top += pixels 
    Next 
End Sub 
+0

'fontSize'和'mousePath'未申報? – Neolisk

+0

@Neolisk請參閱「從鏈接:」 – LarsTech

+0

@LarsTech:是的,我知道 - 只是試圖將引用的文章與在孤立項目中重現的問題進行匹配(無需繪製鼠標路徑) - 至今沒有運氣。 – Neolisk

2

MouseEventArgs的對象具有屬性Delta來確定鼠標滾輪滾動量。此外,還有SystemInformation.MouseWheelScrollLines。有一個當前常量,稱爲WHEEL_DELTA = 120,它反映了每個鼠標滾輪添加的增量。

所以一個好的定義是:

Dim numberOfTextLinesToMove As Integer = CInt(e.Delta * SystemInformation.MouseWheelScrollLines/120) 

來源:Control.MouseWheel Event on MSDN

+0

對不起,我是初學者,我試過使用它,但我不知道該怎麼做,你能舉個例子嗎? – ElektroStudios