Public Class UserControl1
    Structure SM
        Private vStyle As Drawing2D.HatchStyle
        Private vwidth As Single, vHeight As Single
        Private vFColor As Color
        Private vBColor As Color
       
        Property Style() As Drawing2D.HatchStyle
            Get
                Return Me.vStyle
            End Get
            Set(ByVal value As Drawing2D.HatchStyle)
                Me.vStyle = value
            End Set
        End Property
        Property Width() As Single
            Get
                Return Me.vwidth
            End Get
            Set(ByVal value As Single)
                Me.vwidth = value
            End Set
        End Property
        Property Height() As Single
            Get
                Return Me.vHeight
            End Get
            Set(ByVal value As Single)
                Me.vHeight = value
            End Set
        End Property
        Property FColor() As Color
            Get
                Return Me.vFColor
            End Get
            Set(ByVal value As Color)
                Me.vFColor = value
            End Set
        End Property
        Property BColor() As Color
            Get
                Return Me.vBColor
            End Get
            Set(ByVal value As Color)
                Me.vBColor = value
            End Set
        End Property
    End Structure

    Dim vMFilltype(0) As SM
    Dim vVertical As Boolean = True
    Dim vMaxWidth As Single = Me.Width  '//총너비

    Property MaxSize() As Single
        Get
            Return (vMaxWidth)
        End Get
        Set(ByVal value As Single)
            Me.vMaxWidth = value
            Me.Refresh()
        End Set
    End Property

    Property Vertical() As Boolean  '//그림이 세로형태?
        Get
            Return (vVertical)
        End Get
        Set(ByVal value As Boolean)
            Me.vVertical = value
            Me.Refresh()
            ' MsgBox(value)

        End Set
    End Property

    Property M1FillType() As SM()
        Get
            Return (Me.vMFilltype)
        End Get
        Set(ByVal value As SM())
            Me.vMFilltype = value
            Me.Refresh()
            '  MsgBox("sdf")
        End Set
    End Property

    Private Sub UserControl1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        If Me.vMFilltype Is Nothing OrElse Me.MaxSize <= 0 Then Return
        Dim G As Graphics = e.Graphics

        Dim Rect As Rectangle
        Dim W As Single
        ' If Me.MaxWidth <> 0 Then
        For i As Integer = 0 To Me.M1FillType.GetUpperBound(0)  '//갯수만큼 돈다
            '//해당 사각형의 Rectangle 을 생성
            '  전체가 : 100% = 현재 : ?
            ' ? = 100 * 현재 / 전체
            ' MsgBox(i)


            If i = 0 Then
                If Me.Vertical Then
                    W = Me.Width / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(0, 5, W, Me.Height - 10)
                Else
                    W = Me.Height / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(5, 0, Me.Width - 10, W)
                End If
            Else
                If Me.Vertical Then
                    W = Me.Width / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(GetWidth(i), 5, W, Me.Height - 10)
                Else
                    W = Me.Height / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(5, GetWidth(i), Me.Width - 10, W)
                End If
                
            End If
            'MsgBox(Me.M1FillType(i).Style.ToString)
            Try
                Dim B As New System.Drawing.Drawing2D.HatchBrush(Me.M1FillType(i).Style, Me.M1FillType(i).FColor, Me.M1FillType(i).BColor)
                G.FillRectangle(B, Rect)
            Catch ex As Exception

            End Try


           
            ' G.DrawString(W.ToString("N2"), Me.Font, New SolidBrush(Me.M1FillType(i).FColor), Rect.X + Rect.Width, i * 15)

        Next

        For i As Integer = 0 To Me.M1FillType.GetUpperBound(0)  '//갯수만큼 돈다
            '//해당 사각형의 Rectangle 을 생성
            '  전체가 : 100% = 현재 : ?
            ' ? = 100 * 현재 / 전체
            If Vertical Then
                If i = 0 Then
                    W = Me.Width / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(0, 5, W, Me.Height - 10)
                Else
                    W = Me.Width / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(GetWidth(i), 5, W, Me.Height - 10)
                End If
                If i <> 0 Then ' AndAlso i <> Me.M1FillType.GetUpperBound(0) Then
                    G.DrawLine(New Pen(Color.Black), Rect.X, 5, Rect.X, Me.Height - 5)
                End If
            Else
                If i = 0 Then
                    W = Me.Height / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(5, 0, Me.Width - 10, W)
                Else
                    W = Me.Height / Me.MaxSize * Me.M1FillType(i).Width
                    Rect = New Rectangle(5, GetWidth(i), Me.Width - 10, W)
                End If
                If i <> 0 Then 'AndAlso i <> Me.M1FillType.GetUpperBound(0) Then
                    G.DrawLine(New Pen(Color.Black), 5, Rect.Y, Me.Width - 5, Rect.Y)
                End If
            End If
          


            '            G.DrawString(Rect.X & "/" & Rect.Width, Me.Font, New SolidBrush(Me.M1FillType(i).FColor), Rect.X, i * 15)

        Next
        G.DrawRectangle(New Pen(Color.Black), New Rectangle(0, 0, Me.Width - 2, Me.Height - 2))


        '  End If

        G.Dispose()
    End Sub

    Private Function GetWidth(ByVal idx As Integer) As Single
        Dim Retval As Single = 0
        For i As Integer = 0 To idx - 1

            Retval += IIf(Me.Vertical = True, Me.Width, Me.Height) / Me.MaxSize * Me.M1FillType(i).Width
        Next
        Return Retval
    End Function
End Class
