现在我想拖动其中一个ListBox的滚动条,让其他ListBox的滚动条也能跟着一起动
就是说滚动幅度都是一致的
10 个解决方案
#1
我也試過這個問題,不能成功。除排你給ListBox外加滾動條,就可以解你的問題。
#2
'经本人测试成功,而且还加了那么多注释,不能说不会看的啊~~~
'最后当然要记得给分了啊 ^_^
Imports System.Runtime.InteropServices
Public Class Form1
''' <summary>垂直滚动条 </summary>
Private Const WM_VSCROLL = &H115
''' <summary>水平滚动条 </summary>
Private Const WM_HSCROLL = &H114
<DllImport("user32")> _
Public Shared Function SendMessageA(ByVal hwnd As IntPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Object) As IntPtr
End Function
''' <summary> 看清楚 Handles 后面的啊~~</summary>
Private Sub ListBox1_MouseWheel(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseWheel, ListBox2.MouseWheel
If e.Delta < 0 Then
'//Delta < 0 ,垂直滚动条向下滚动
SendMessageA(ListBox2.Handle, WM_VSCROLL, 1, vbNull)
Else
'//Delta > 0 ,垂直滚动条向下滚动
SendMessageA(ListBox2.Handle, WM_VSCROLL, 0, vbNull)
End If
End Sub
''' <summary>向两个ListBox填充内容,使其出现滚动条 </summary>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i = 1 To 20
ListBox1.Items.Add(i)
ListBox2.Items.Add(i)
Next
End Sub
End Class
#3
发现错了,ListBox1.MouseWheel和 ListBox2.MouseWheel要分开写.
#4
建议CSDN能开放修改权限,代码经常要改的啊,限制在半个小时内改也行~~~
#5
一起写也不要紧,里面判断一下CType(Sender,Listbox).Name 再决定向另一个ListBox SendMessage即可,稍微改一下
Private Sub ListBox1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseWheel, ListBox2.MouseWheel
Dim H As System.IntPtr
If CType(sender, ListBox).Name = "ListBox1" Then
H = ListBox2.Handle
Else
H = ListBox1.Handle
End If
If e.Delta < 0 Then
'//Delta < 0 ,垂直滚动条向下滚动
SendMessageA(H, WM_VSCROLL, 1, vbNull)
Else
'//Delta > 0 ,垂直滚动条向下滚动
SendMessageA(H, WM_VSCROLL, 0, vbNull)
End If
End Sub
#6
用不了啊
检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::SendMessageA”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::SendMessageA”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
#7
比较麻烦,没那么简单,至少下头的函数我想是要用到的:
SetScrollPos,GetScrollInfo等
SetScrollPos,GetScrollInfo等
#8
我就奇怪了,为什么一定要用ListBox呢?实现起来麻烦死了,用DataGridView不是很方便吗?
#9
而且楼上的代码我都试验过了,是可行的,楼主偏说不行。楼上的代码演示的是按鼠标的滚轮实现同时移动,而不是拉滚动条
#10
我今天做了一个比较完美的解决方法,谁想要的,PM Me.
因为代码有点长,不想再贴出来.
因为代码有点长,不想再贴出来.
#1
我也試過這個問題,不能成功。除排你給ListBox外加滾動條,就可以解你的問題。
#2
'经本人测试成功,而且还加了那么多注释,不能说不会看的啊~~~
'最后当然要记得给分了啊 ^_^
Imports System.Runtime.InteropServices
Public Class Form1
''' <summary>垂直滚动条 </summary>
Private Const WM_VSCROLL = &H115
''' <summary>水平滚动条 </summary>
Private Const WM_HSCROLL = &H114
<DllImport("user32")> _
Public Shared Function SendMessageA(ByVal hwnd As IntPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Object) As IntPtr
End Function
''' <summary> 看清楚 Handles 后面的啊~~</summary>
Private Sub ListBox1_MouseWheel(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseWheel, ListBox2.MouseWheel
If e.Delta < 0 Then
'//Delta < 0 ,垂直滚动条向下滚动
SendMessageA(ListBox2.Handle, WM_VSCROLL, 1, vbNull)
Else
'//Delta > 0 ,垂直滚动条向下滚动
SendMessageA(ListBox2.Handle, WM_VSCROLL, 0, vbNull)
End If
End Sub
''' <summary>向两个ListBox填充内容,使其出现滚动条 </summary>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i = 1 To 20
ListBox1.Items.Add(i)
ListBox2.Items.Add(i)
Next
End Sub
End Class
#3
发现错了,ListBox1.MouseWheel和 ListBox2.MouseWheel要分开写.
#4
建议CSDN能开放修改权限,代码经常要改的啊,限制在半个小时内改也行~~~
#5
一起写也不要紧,里面判断一下CType(Sender,Listbox).Name 再决定向另一个ListBox SendMessage即可,稍微改一下
Private Sub ListBox1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseWheel, ListBox2.MouseWheel
Dim H As System.IntPtr
If CType(sender, ListBox).Name = "ListBox1" Then
H = ListBox2.Handle
Else
H = ListBox1.Handle
End If
If e.Delta < 0 Then
'//Delta < 0 ,垂直滚动条向下滚动
SendMessageA(H, WM_VSCROLL, 1, vbNull)
Else
'//Delta > 0 ,垂直滚动条向下滚动
SendMessageA(H, WM_VSCROLL, 0, vbNull)
End If
End Sub
#6
用不了啊
检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::SendMessageA”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::SendMessageA”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
#7
比较麻烦,没那么简单,至少下头的函数我想是要用到的:
SetScrollPos,GetScrollInfo等
SetScrollPos,GetScrollInfo等
#8
我就奇怪了,为什么一定要用ListBox呢?实现起来麻烦死了,用DataGridView不是很方便吗?
#9
而且楼上的代码我都试验过了,是可行的,楼主偏说不行。楼上的代码演示的是按鼠标的滚轮实现同时移动,而不是拉滚动条
#10
我今天做了一个比较完美的解决方法,谁想要的,PM Me.
因为代码有点长,不想再贴出来.
因为代码有点长,不想再贴出来.