⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpanderlist.vb

📁 使用Access数据库演示的任务分配管理程序 一个使用ADO.NET基于Microsoft Access数据库演示的任务分配管理的程序
💻 VB
字号:
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Runtime.CompilerServices
Imports System.Windows.Forms

<DesignTimeVisible(True), Designer(GetType(XPanderListDesigner))> _
    Public Class XPanderList
    Inherits UserControl

    ' Methods
    Shared Sub New()
        XPanderList.c_LightBackColor = Color.FromArgb(123, 162, 239)
        XPanderList.c_DarkBackColor = Color.FromArgb(99, 117, 222)
    End Sub

    Public Sub New()
        AddHandler MyBase.Load, New EventHandler(AddressOf Me.XPanderList_Load)
        AddHandler MyBase.SizeChanged, New EventHandler(AddressOf Me.XPanderList_SizeChanged)
        Me.m_BgColorLight = XPanderList.c_LightBackColor
        Me.m_BgColorDark = XPanderList.c_DarkBackColor
        Me.m_ControlList = New SortedList(Me.m_XPanderComparer)
        Me.m_NextControlKey = 0
        Me.InitializeComponent()
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        Me.SetStyle(ControlStyles.ResizeRedraw, False)
        Me.SetStyle(ControlStyles.UserPaint, True)
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    End Sub

    Public Sub ControlCollapsed(ByVal x As XPander)
        Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
        Do While enumerator1.MoveNext
            Dim control1 As Control = DirectCast(enumerator1.Value, Control)
            If (control1.Top > x.Top) Then
                Dim control2 As Control = control1
                control2.Top = (control2.Top - (x.ExpandedHeight - x.CaptionHeight))
            End If
        Loop
    End Sub

    Public Sub ControlCollapsing(ByVal x As XPander, ByVal delta As Integer)
        Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
        Do While enumerator1.MoveNext
            Dim control1 As Control = DirectCast(enumerator1.Value, Control)
            If (control1.Top > x.Top) Then
                Dim control2 As Control = control1
                control2.Top = (control2.Top - delta)
            End If
        Loop
    End Sub

    Public Sub ControlExpanded(ByVal x As XPander)
        Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
        Do While enumerator1.MoveNext
            Dim control1 As Control = DirectCast(enumerator1.Value, Control)
            If (control1.Top > x.Top) Then
                Dim control2 As Control = control1
                control2.Top = (control2.Top + (x.ExpandedHeight - x.CaptionHeight))
            End If
        Loop
    End Sub

    Public Sub ControlExpanding(ByVal x As XPander, ByVal delta As Integer)
        Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
        Do While enumerator1.MoveNext
            Dim control1 As Control = DirectCast(enumerator1.Value, Control)
            If (control1.Top > x.Top) Then
                Dim control2 As Control = control1
                control2.Top = (control2.Top + delta)
            End If
        Loop
    End Sub

    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        If (disposing AndAlso (Not Me.components Is Nothing)) Then
            Me.components.Dispose()
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private Function FixRGB(ByVal RGBValue As Integer) As Integer
        If ((RGBValue >= 0) And (RGBValue <= 255)) Then
            Return RGBValue
        End If
        If (RGBValue < 0) Then
            Return 0
        End If
        Return 255
    End Function

    Private Function GetNextTopPosition() As Integer
        Dim num2 As Integer = 10
        Dim num3 As Integer = 0
        Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
        Do While enumerator1.MoveNext
            Dim control1 As Control = DirectCast(enumerator1.Value, Control)
            num3 = (control1.Top + control1.Height)
            If (num3 > num2) Then
                num2 = num3
            End If
        Loop
        If (num2 <> 10) Then
            num2 = (num2 + 14)
        End If
        Return num2
    End Function

    <DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.AutoScroll = True
        Me.Name = "XPanderList"
    End Sub

    Protected Overrides Sub OnControlAdded(ByVal e As ControlEventArgs)
        MyBase.OnControlAdded(e)
        If (e.Control.GetType Is GetType(XPander)) Then
            If (e.Control.Width <= Me.Width) Then
                e.Control.Left = 8
                e.Control.Width = (Me.Width - 16)
                e.Control.Top = Me.GetNextTopPosition
                e.Control.Anchor = (AnchorStyles.Right Or (AnchorStyles.Left Or AnchorStyles.Top))
            End If
            Dim pander1 As XPander = DirectCast(e.Control, XPander)
            AddHandler pander1.XPanderCollapsed, New XPander.XPanderCollapsedHandler(AddressOf Me.ControlCollapsed)
            AddHandler pander1.XPanderExpanded, New XPander.XPanderExpandedHandler(AddressOf Me.ControlExpanded)
            e.Control.Tag = Me.m_NextControlKey
            Me.m_NextControlKey += 1
            Me.m_ControlList.Add(RuntimeHelpers.GetObjectValue(e.Control.Tag), e.Control)
        End If
    End Sub

    Protected Overrides Sub OnControlRemoved(ByVal e As ControlEventArgs)
        Dim num2 As Integer = e.Control.Top
        Dim num1 As Integer = 0
        If (e.Control.GetType Is GetType(XPander)) Then
            Dim enumerator1 As IDictionaryEnumerator = Me.m_ControlList.GetEnumerator
            Do While enumerator1.MoveNext
                Dim control1 As Control = DirectCast(enumerator1.Value, Control)
                If (control1.Top > num2) Then
                    num1 = num2
                    num2 = control1.Top
                    control1.Top = num1
                End If
            Loop
            Dim pander1 As XPander = DirectCast(e.Control, XPander)
            RemoveHandler pander1.XPanderCollapsed, New XPander.XPanderCollapsedHandler(AddressOf Me.ControlCollapsed)
            RemoveHandler pander1.XPanderExpanded, New XPander.XPanderExpandedHandler(AddressOf Me.ControlExpanded)
            Me.m_ControlList.Remove(RuntimeHelpers.GetObjectValue(e.Control.Tag))
        End If
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        Dim rectangle1 As New Rectangle(0, 0, Me.Width, Me.Height)
        Dim brush1 As New LinearGradientBrush(rectangle1, Me.m_BgColorLight, Me.m_BgColorDark, LinearGradientMode.Vertical)
        e.Graphics.FillRectangle(brush1, rectangle1)
    End Sub

    Private Sub XPanderList_Load(ByVal sender As Object, ByVal e As EventArgs)
        Me.BackColor = Me.m_BgColorDark
        Me.m_NextControlKey = Me.m_ControlList.Count
    End Sub

    Private Sub XPanderList_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
        Me.Invalidate()
    End Sub


    ' Properties
    <DefaultValue("99,117,222"), Category("Appearance"), Description("Dark color used in gradient for background.")> _
    Public Property BackColorDark() As Color
        Get
            Return Me.m_BgColorDark
        End Get
        Set(ByVal Value As Color)
            Me.m_BgColorDark = Value
            Me.Invalidate()
        End Set
    End Property

    <Description("Light color used in gradient for background."), Category("Appearance"), DefaultValue("123,162,239")> _
    Public Property BackColorLight() As Color
        Get
            Return Me.m_BgColorLight
        End Get
        Set(ByVal Value As Color)
            Me.m_BgColorLight = Value
            Me.Invalidate()
        End Set
    End Property


    ' Fields
    Private Shared ReadOnly c_DarkBackColor As Color
    Private Const c_HorizontalSpacing As Integer = 8
    Private Const c_InitialVerticalSpacing As Integer = 10
    Private Shared ReadOnly c_LightBackColor As Color
    Private Const c_VerticalSpacing As Integer = 14
    Private components As IContainer
    Private m_BgColorDark As Color
    Private m_BgColorLight As Color
    Private m_ControlList As SortedList
    Private m_NextControlKey As Integer
    Private m_XPanderComparer As XPanderComparer
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -