Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
ActiveGanttVBNCtl1.RowHeight = 20
ActiveGanttVBNCtl1.RowHeadings.Add("")
ActiveGanttVBNCtl1.Rows.Add("K010", "Row K010", True)
ActiveGanttVBNCtl1.Rows.Item("K010").Tag = "-"
ActiveGanttVBNCtl1.Rows.Add("K010010", "Row K010010", True)
ActiveGanttVBNCtl1.Rows.Item("K010010").Tag = "-"
ActiveGanttVBNCtl1.Rows.Add("K010010010", "Row K010010010", True)
ActiveGanttVBNCtl1.Rows.Add("K010020", "Row K010020", True)
ActiveGanttVBNCtl1.Rows.Add("K010030", "Row K010030", True)
ActiveGanttVBNCtl1.Rows.Item("K010030").Tag = "-"
ActiveGanttVBNCtl1.Rows.Add("K010030010", "Row K010030010", True)
ActiveGanttVBNCtl1.Rows.Add("K010030020", "Row K010030020", True)
ActiveGanttVBNCtl1.Rows.Add("K020", "Row K020", True)
ActiveGanttVBNCtl1.Rows.Item("K020").Tag = "-"
ActiveGanttVBNCtl1.Rows.Add("K020010", "Row K020010", True)
ActiveGanttVBNCtl1.Rows.Add("K020020", "Row K020020", True)
ActiveGanttVBNCtl1.Rows.Add("K020030", "Row K020030", True)
ActiveGanttVBNCtl1.Rows.Add("K030", "Row K030", True)
ActiveGanttVBNCtl1.Rows.Item("K030").Tag = "-"
ActiveGanttVBNCtl1.Rows.Add("K030010", "Row K030010", True)
ActiveGanttVBNCtl1.Rows.Add("K030020", "Row K030020", True)
ActiveGanttVBNCtl1.Rows.Add("K030030", "Row K030030", True)
ActiveGanttVBNCtl1.Rows.Add("K030040", "Row K030040", True)
End Sub
Private Function IsSibling(ByVal sMasterKey As String, ByVal sKey As String) _
As Boolean
Dim sSiblingID As String
If sMasterKey.Length() = 4 Then
sSiblingID = "K"
Else
sSiblingID = sMasterKey.Substring(0, sMasterKey.Length - 3)
End If
If (sMasterKey.Length() = sKey.Length()) Then
If (sKey.Substring(0, sSiblingID.Length()) = sSiblingID) Then
Return True
Else
Return False
End If
Else
Return False
End If
End Function
Private Function bHasChildren(ByVal Index As Integer) As Boolean
Dim sMasterKey As String
Dim sKey As String
If Index >= ActiveGanttVBNCtl1.Rows.Count Then
Return False
Exit Function
End If
sMasterKey = ActiveGanttVBNCtl1.Rows.Item(Index).Key
Index = Index + 1
sKey = ActiveGanttVBNCtl1.Rows.Item(Index).Key
If sKey.Length < sMasterKey.Length Then
Return False
Exit Function
End If
If sKey.Substring(0, sMasterKey.Length) = sMasterKey Then
Return True
Exit Function
End If
End Function
Private Function bIsChild(ByVal Key As String) As Boolean
If Key.Length() = 4 Then
Return False
Else
Return True
End If
End Function
Private Sub HideChildren(ByVal sKey As String)
Dim i As Integer
Dim sChildKey As String
For i = 1 To ActiveGanttVBNCtl1.Rows.Count
sChildKey = ActiveGanttVBNCtl1.Rows.Item(i).Key
If sChildKey.Length > sKey.Length() Then
If (sChildKey.Substring(0, sKey.Length()) = sKey) And _
(sChildKey.Length() > sKey.Length()) Then
ActiveGanttVBNCtl1.Rows.Item(i).Height = -1
End If
End If
Next i
End Sub
Private Sub ShowChildren(ByVal sKey As String)
Dim i As Integer
Dim sChildKey As String
For i = 1 To ActiveGanttVBNCtl1.Rows.Count
sChildKey = ActiveGanttVBNCtl1.Rows.Item(i).Key
If sChildKey.Length() > sKey.Length() Then
If (sChildKey.Substring(0, sKey.Length()) = sKey) And _
(sChildKey.Length() > sKey.Length()) Then
ActiveGanttVBNCtl1.Rows.Item(i).Height = 20
If ActiveGanttVBNCtl1.Rows.Item(i).Tag = "+" Then
ActiveGanttVBNCtl1.Rows.Item(i).Tag = "-"
End If
End If
End If
Next i
End Sub
Private Sub ActiveGanttVBNCtl1_RowClick(ByVal Index As Integer, _
ByVal Position As System.Drawing.Point, _
ByVal Button As System.Windows.Forms.MouseButtons) _
Handles ActiveGanttVBNCtl1.RowClick
Dim sTag As String
If bHasChildren(Index) = True Then
sTag = ActiveGanttVBNCtl1.Rows.Item(Index).Tag
If sTag = "+" Then
ActiveGanttVBNCtl1.Rows.Item(Index).Tag = "-"
ShowChildren(ActiveGanttVBNCtl1.Rows.Item(Index).Key)
ElseIf sTag = "-" Then
ActiveGanttVBNCtl1.Rows.Item(Index).Tag = "+"
HideChildren(ActiveGanttVBNCtl1.Rows.Item(Index).Key)
End If
ActiveGanttVBNCtl1.Redraw()
End If
End Sub
Private Sub ActiveGanttVBNCtl1_RowDraw(ByRef CustomDraw As Boolean, _
ByVal Index As Integer, ByRef oGraphics As System.Drawing.Graphics) _
Handles ActiveGanttVBNCtl1.RowDraw
If ActiveGanttVBNCtl1.Rows.Item(Index).Height > -1 Then
CustomDraw = True
Dim oTextBrush As System.Drawing.Brush
Dim sCaption As String
Dim sKey As String
Dim sTag As String
Dim oTextFont As New System.Drawing.Font("Arial", 8)
Dim lTextX As Single
Dim lTextY As Single
oTextBrush = New System.Drawing.SolidBrush(Color.Black)
sCaption = ActiveGanttVBNCtl1.Rows.Item(Index).Caption
sKey = ActiveGanttVBNCtl1.Rows.Item(Index).Key
sTag = ActiveGanttVBNCtl1.Rows.Item(Index).Tag
lTextX = ActiveGanttVBNCtl1.RowHeadings.Item(1).Left + (sKey.Length * 5)
lTextY = ActiveGanttVBNCtl1.Rows.Item(Index).Top + 1
If bHasChildren(Index) = True Then
If sTag = "+" Then
oGraphics.DrawRectangle(New System.Drawing.Pen(Color.Black), _
New System.Drawing.Rectangle(lTextX - 10, _
ActiveGanttVBNCtl1.Rows.Item(Index).Top + 3, 8, 8))
oGraphics.DrawLine(New System.Drawing.Pen(Color.Black), _
lTextX - 8, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 7, _
lTextX - 4, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 7)
oGraphics.DrawLine(New System.Drawing.Pen(Color.Black), _
lTextX - 6, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 5, _
lTextX - 6, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 9)
ElseIf sTag = "-" Then
oGraphics.DrawRectangle(New System.Drawing.Pen(Color.Black), _
New System.Drawing.Rectangle(lTextX - 10, _
ActiveGanttVBNCtl1.Rows.Item(Index).Top + 3, 8, 8))
oGraphics.DrawLine(New System.Drawing.Pen(Color.Black), _
lTextX - 8, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 7, _
lTextX - 4, ActiveGanttVBNCtl1.Rows.Item(Index).Top + 7)
End If
End If
If bIsChild(sKey) = True And sTag = "" Then
Dim y As Single
Dim x1 As Single
x1 = ActiveGanttVBNCtl1.RowHeadings.Item(1).Left + (sKey.Length * 5)
y = CSng(ActiveGanttVBNCtl1.Rows.Item(Index).Top + _
((ActiveGanttVBNCtl1.Rows.Item(Index).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(Index).Top) / 2))
Dim oPen As System.Drawing.Pen
oPen = New System.Drawing.Pen(Color.Gray)
oPen.DashStyle = Drawing.Drawing2D.DashStyle.Dot
oGraphics.DrawLine(oPen, x1, y, x1 - 5, y)
End If
oGraphics.DrawString(sCaption, oTextFont, oTextBrush, lTextX, lTextY)
Else
CustomDraw = False
End If
End Sub
Private Sub ActiveGanttVBNCtl1_FixedColumnDraw(ByRef oGraphics As _
System.Drawing.Graphics) Handles ActiveGanttVBNCtl1.FixedColumnDraw
Dim i As Integer
Dim k As Integer
Dim sMasterKey As String
Dim sKey As String
Dim lTextX As Single
Dim lTop As Single
Dim lBottom As Single
For i = 1 To ActiveGanttVBNCtl1.Rows.Count
sMasterKey = ActiveGanttVBNCtl1.Rows.Item(i).Key
If bHasChildren(i) = True And ActiveGanttVBNCtl1.Rows.Item(i).Height > -1 _
And ActiveGanttVBNCtl1.Rows.Item(i).Tag = "-" Then
lTextX = ActiveGanttVBNCtl1.RowHeadings.Item(1).Left + _
((sMasterKey.Length() + 3) * 5) - 6
lTop = CSng(ActiveGanttVBNCtl1.Rows.Item(i).Top + _
((ActiveGanttVBNCtl1.Rows.Item(i).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(i).Top) / 2)) + 5
If bHasChildren(i + 1) = False Then
lBottom = CSng(ActiveGanttVBNCtl1.Rows.Item(i + 1).Top + _
((ActiveGanttVBNCtl1.Rows.Item(i + 1).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(i + 1).Top) / 2))
Else
lBottom = CSng(ActiveGanttVBNCtl1.Rows.Item(i + 1).Top) + 4
End If
Dim oPen As System.Drawing.Pen
oPen = New System.Drawing.Pen(Color.Gray)
oPen.DashStyle = Drawing.Drawing2D.DashStyle.Dot
oGraphics.DrawLine(oPen, lTextX, lTop, lTextX, lBottom)
End If
For k = i + 1 To ActiveGanttVBNCtl1.Rows.Count
sKey = ActiveGanttVBNCtl1.Rows.Item(k).Key
If IsSibling(sMasterKey, sKey) = True Then
If ActiveGanttVBNCtl1.Rows.Item(i).Height > -1 And _
ActiveGanttVBNCtl1.Rows.Item(k).Height > -1 Then
lTextX = ActiveGanttVBNCtl1.RowHeadings.Item(1).Left + _
(sKey.Length * 5) - 6
If (ActiveGanttVBNCtl1.Rows.Item(i).Tag = "") Then
lTop = CSng(ActiveGanttVBNCtl1.Rows.Item(i).Top + _
((ActiveGanttVBNCtl1.Rows.Item(i).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(i).Top) / 2))
Else
lTop = CSng(ActiveGanttVBNCtl1.Rows.Item(i).Top + _
((ActiveGanttVBNCtl1.Rows.Item(i).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(i).Top) / 2)) + 1
End If
If (ActiveGanttVBNCtl1.Rows.Item(k).Tag = "") Then
lBottom = CSng(ActiveGanttVBNCtl1.Rows.Item(k).Top + _
((ActiveGanttVBNCtl1.Rows.Item(k).Bottom - _
ActiveGanttVBNCtl1.Rows.Item(k).Top) / 2))
Else
lBottom = CSng(ActiveGanttVBNCtl1.Rows.Item(k).Top) + 2
End If
Dim oPen As System.Drawing.Pen
oPen = New System.Drawing.Pen(Color.Gray)
oPen.DashStyle = Drawing.Drawing2D.DashStyle.Dot
oGraphics.DrawLine(oPen, lTextX, lTop, lTextX, lBottom)
End If
Exit For
End If
Next k
Next i
End Sub
|