如何为多行文本框实现花哨的滚动条?

use*_*411 9 .net vb.net scrollbar winforms

我想为多行文本框实现一个花哨的滚动条,如下图所示:

标准滚动条和花式滚动条

那个花哨的滚动条的任何想法?

P/S:我想要vb.net解决方案.

Syn*_*max 5

这段代码非常粗巧,令人沮丧,但它正在工作

这是一个完全绘制的GDI +自定义滚动条控件类.它的所有绘图方法都是可重写的,允许开发人员根据自己的选择进行绘制.

http://www.codeproject.com/KB/miscctrl/corescrollbar.aspx


Sim*_*ier 3

如果花式滚动条可以实现为另一个控件(您的图像实际上看起来像那样),那么这里是支持自定义滚动的 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
Run Code Online (Sandbox Code Playgroud)

这是使用它的示例表单。我已将自定义滚动条实现为标准轨迹栏 (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
Run Code Online (Sandbox Code Playgroud)