我想为多行文本框实现一个花哨的滚动条,如下图所示:
对于那个花哨的滚动条的任何想法?
P / S:我想要vb.net解决方案。答案 0 :(得分:5)
这段代码非常粗巧,令人沮丧但工作正常
这是一个完全绘制的GDI +自定义 滚动条控件类。所有的 绘图方法是可重写的, 允许开发人员绘制它 但是他们选择了。
答案 1 :(得分:4)
如果花哨的滚动条可以实现为另一个控件(您的图像实际上看起来像这样),这里是支持自定义滚动的ListBox的代码:
Imports System.Runtime.InteropServices
Public Class CustomScrollListBox
Inherits ListBox
Public Sub Scroll(ByVal percentage As Single)
If (percentage < 0.0!) Then
Throw New ArgumentException(Nothing, "percentage")
End If
' Sends the scroll / set position Windows message
Const WM_VSCROLL As Integer = &H115
Const SB_THUMBPOSITION As Integer = 4
Dim wp As Integer = CInt(((percentage * MyBase.Items.Count) * 65536.0!)) + SB_THUMBPOSITION
CustomScrollListBox.SendMessage(MyBase.Handle, WM_VSCROLL, New IntPtr(wp), IntPtr.Zero)
End Sub
<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
' Removes the vertical scroll window style
Dim p As CreateParams = MyBase.CreateParams
Const WS_VSCROLL As Integer = &H200000
p.Style = (p.Style And -WS_VSCROLL)
Return p
End Get
End Property
End Class
这是一个使用它的示例表单。我已将自定义滚动条实现为标准的Trackbar(trackBar1),例如:
Public Class Form1
Private trackBar As TrackBar
Private listBox As CustomScrollListBox
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
' initialize some listbox props
listBox = New CustomScrollListBox
listBox.Location = New Point(&H19, 210)
listBox.Name = "listBox2"
listBox.Size = New Size((&H17D - Me.TrackBar1.Width), &HAD)
listBox.TabIndex = 1
MyBase.Controls.Add(listBox)
' add some items
Dim i As Integer
For i = 0 To 100 - 1
listBox.Items.Add(("item" & i))
Next i
End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
' compute trackbar's position as a percentage
listBox.Scroll(CSng(TrackBar1.Maximum - TrackBar1.Value) / TrackBar1.Maximum - TrackBar1.Minimum)
End Sub
End Class