Option Strict Off
Imports System.IO
Public Class 公司組織結構
    Dim RI As Integer = -1
    Dim SK As String = "要查找的 KEY"
    Dim Str As String = Application.StartupPath
    Dim 對話框(15) As String
    Private Sub Set_清單1()
        If PA47 = "FUHUNG SYSTEM TECHNOLOGY CO., LTD." Then : Else
            Dim ds1 As New DataSet : 主管_dgv.DataSource = Nothing : ds1.Clear()
            主管_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
            主管_dgv.ColumnHeadersHeight = 25 : 主管_dgv.AllowUserToAddRows = False : 主管_dgv.RowTemplate.Height = 45
            SQL_系統組織結構圖_單位主管1()
            da.Fill(ds1) : 主管_dgv.DataSource = ds1.Tables(0) : conn.Close()
            主管_dgv.Columns(0).FillWeight = 100 : 主管_dgv.Columns(1).FillWeight = 50 : 主管_dgv.Columns(2).FillWeight = 150
            For i As Integer = 0 To 主管_dgv.Rows.Count - 1
                主管_dgv(0, i).Value = 主管_dgv(0, i).Value.ToString.ToUpper : 主管_dgv(2, i).Value = 主管_dgv(2, i).Value.ToString.ToUpper
                Dim 驗證 As String = "" : Dim 取變數 As String
                取變數 = 主管_dgv.Rows(i).Cells("職稱").Value.ToString : NN1 = 0
                For ii As Integer = 1 To 20
                    If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : NN1 += 1 : Else
                        If Strings.Mid(取變數, ii, 1) = "/" Then : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : NN1 += 1 : End If
                    End If
                Next
                主管_dgv.Rows(i).Cells("職稱").Value = 驗證
            Next
        End If
    End Sub
    Private Sub 公司組織結構_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.MdiParent = FH_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True
        分流計算.Enabled = True
    End Sub
    Private Sub 登入閒置控制_MouseMove(sender As Object, e As EventArgs) Handles MyBase.MouseMove
        timeNow = 0 : FH_ERP_SYS.Timer1.Enabled = False : FH_ERP_SYS.Timer1.Enabled = True
    End Sub
    Private Sub 登入閒置控制_KeyPress(sender As Object, e As EventArgs) Handles MyBase.KeyPress
        timeNow = 0 : FH_ERP_SYS.Timer1.Enabled = False : FH_ERP_SYS.Timer1.Enabled = True
    End Sub
    Private Sub 分流計算_Tick(sender As Object, e As EventArgs) Handles 分流計算.Tick
        分流計算.Enabled = False
        組織圖_tv.Nodes.Clear() : 組織圖1_tv.Nodes.Clear() : 組織圖2_tv.Nodes.Clear() : 組織圖3_tv.Nodes.Clear()
        組織圖_1_tv.Nodes.Clear() : 組織圖1_1_tv.Nodes.Clear() : 組織圖2_1_tv.Nodes.Clear() : 組織圖3_1_tv.Nodes.Clear()

        組織圖_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.") : 組織圖_1_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.")
        SQL_系統組織結構圖_部門()
        While (dr.Read())
            組織圖_tv.Nodes(0).Nodes.Add(dr("部門"))
            Dim 驗證 As String = "" : Dim 取變數 As String
            取變數 = dr("部門").ToString : NN1 = 0
            For ii As Integer = 1 To 20
                If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : NN1 += 1 : Else
                    If Strings.Mid(取變數, ii, 1) = " " Then : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : NN1 += 1 : End If
                End If
            Next : 組織圖_1_tv.Nodes(0).Nodes.Add(驗證)
        End While : conn.Close()
        For I As Integer = 0 To 組織圖_tv.Nodes(0).Nodes.Count - 1
            PA = 組織圖_tv.Nodes(0).Nodes(I).Text : SQL_系統組織結構圖_部門_人員() : Dim BB As Integer = 0
            While (dr.Read())
                組織圖_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red
                組織圖_1_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖_1_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red : BB += 1
            End While : conn.Close()
        Next
        組織圖_tv.ExpandAll() : 組織圖_1_tv.ExpandAll()

        組織圖1_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.") : 組織圖1_1_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.")
        SQL_系統組織結構圖_處別1()
        While (dr.Read())
            組織圖1_tv.Nodes(0).Nodes.Add(dr("處"))
            Dim 驗證 As String = "" : Dim 取變數 As String
            取變數 = dr("處").ToString : NN1 = 0
            For ii As Integer = 1 To 20
                If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : NN1 += 1 : Else
                    If Strings.Mid(取變數, ii, 1) = " " Then : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : NN1 += 1 : End If
                End If
            Next : 組織圖1_1_tv.Nodes(0).Nodes.Add(驗證)
        End While : conn.Close()
        For I As Integer = 0 To 組織圖1_tv.Nodes(0).Nodes.Count - 1
            PA = 組織圖1_tv.Nodes(0).Nodes(I).Text : SQL_系統組織結構圖_處別_人員() : Dim BB As Integer = 0
            While (dr.Read())
                組織圖1_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖1_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red
                組織圖1_1_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖1_1_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red : BB += 1
            End While : conn.Close()
        Next
        組織圖1_tv.ExpandAll() : 組織圖1_1_tv.ExpandAll()

        組織圖2_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.") : 組織圖2_1_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.")
        SQL_系統組織結構圖_課別1()
        While (dr.Read())
            組織圖2_tv.Nodes(0).Nodes.Add(dr("課"))
            Dim 驗證 As String = "" : Dim 取變數 As String
            取變數 = dr("課").ToString : NN1 = 0
            For ii As Integer = 1 To 20
                If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : NN1 += 1 : Else
                    If Strings.Mid(取變數, ii, 1) = " " Then : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : NN1 += 1 : End If
                End If
            Next : 組織圖2_1_tv.Nodes(0).Nodes.Add(驗證)
        End While : conn.Close()
        For I As Integer = 0 To 組織圖2_tv.Nodes(0).Nodes.Count - 1
            PA = 組織圖2_tv.Nodes(0).Nodes(I).Text : SQL_系統組織結構圖_課別_人員() : Dim BB As Integer = 0
            While (dr.Read())
                組織圖2_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖2_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red
                組織圖2_1_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖2_1_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red : BB += 1
            End While : conn.Close()
        Next
        組織圖2_tv.ExpandAll() : 組織圖2_1_tv.ExpandAll()

        組織圖3_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.") : 組織圖3_1_tv.Nodes.Add("FUHUNG SYSTEM TECHNOLOGY CO., LTD.")
        SQL_系統組織結構圖_組別1()
        While (dr.Read())
            組織圖3_tv.Nodes(0).Nodes.Add(dr("組"))
            組織圖3_1_tv.Nodes(0).Nodes.Add(dr("組"))
        End While : conn.Close()
        For I As Integer = 0 To 組織圖3_tv.Nodes(0).Nodes.Count - 1
            PA = 組織圖3_tv.Nodes(0).Nodes(I).Text : SQL_系統組織結構圖_組別_人員() : Dim BB As Integer = 0
            While (dr.Read())
                組織圖3_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖3_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red
                組織圖3_1_tv.Nodes(0).Nodes(I).Nodes.Add(dr("姓名")) : 組織圖3_1_tv.Nodes(0).Nodes(I).Nodes(BB).ForeColor = Color.Red : BB += 1
            End While : conn.Close()
        Next
        組織圖3_tv.ExpandAll() : 組織圖3_1_tv.ExpandAll()
    End Sub
    Private Function FindNodeByText(nodes As TreeNodeCollection, text As String) As TreeNode
        ' 遍歷所有節點尋找對應的節點
        For Each node As TreeNode In nodes
            If node.Text = text Then : Return node : End If
            Dim childNode As TreeNode = FindNodeByText(node.Nodes, text)
            If childNode IsNot Nothing Then : Return childNode : End If
        Next
        Return Nothing
    End Function
    Private Sub 組織圖_1_tv_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles 組織圖_1_tv.AfterSelect
        ' 只處理 A 的第三層節點
        If e.Node.Level = 2 Then
            ' 找到對應的 B 節點
            Dim nodeB As TreeNode = FindNodeByText(組織圖_tv.Nodes, e.Node.Text)
            ' 如果找到了，則觸發 B 的 AfterSelect 事件
            If nodeB IsNot Nothing Then : 組織圖_tv.SelectedNode = nodeB : 組織圖_tv_AfterSelect(組織圖_tv, New TreeViewEventArgs(nodeB)) : End If
        Else : 主管_dgv.DataSource = Nothing
        End If
    End Sub
    Private Sub 組織圖_tv_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles 組織圖_tv.AfterSelect
        Select Case Strings.Mid(e.Node.Text, 5, 1)
            Case "部" : 人員_tb.Text = "" : 級別_tb.Text = "" : 主管_dgv.DataSource = Nothing : Case Else : 人員_tb.Text = e.Node.Text : PA47 = 人員_tb.Text : Set_清單1() : 級別_tb.Text = PA46
        End Select
    End Sub
    Private Sub 組織圖1_1_tv_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles 組織圖1_1_tv.AfterSelect
        ' 只處理 A 的第三層節點
        If e.Node.Level = 2 Then
            ' 找到對應的 B 節點
            Dim nodeB As TreeNode = FindNodeByText(組織圖1_tv.Nodes, e.Node.Text)
            ' 如果找到了，則觸發 B 的 AfterSelect 事件
            If nodeB IsNot Nothing Then : 組織圖1_tv.SelectedNode = nodeB : 組織圖_tv_AfterSelect(組織圖1_tv, New TreeViewEventArgs(nodeB)) : End If
        Else : 主管_dgv.DataSource = Nothing
        End If
    End Sub
    Private Sub 組織圖1_tv_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles 組織圖1_tv.AfterSelect
        If Strings.Mid(e.Node.Text, 5, 1) = "工" Then
            Select Case Strings.Mid(e.Node.Text, 7, 1)
                Case "處" : 人員_tb.Text = "" : 級別_tb.Text = "" : 主管_dgv.DataSource = Nothing
                Case Else : 人員_tb.Text = e.Node.Text : PA47 = 人員_tb.Text : Set_清單1() : 級別_tb.Text = PA46
            End Select
        Else
            Select Case Strings.Mid(e.Node.Text, 6, 1)
                Case "處" : 人員_tb.Text = "" : 級別_tb.Text = "" : 主管_dgv.DataSource = Nothing
                Case Else : 人員_tb.Text = e.Node.Text : PA47 = 人員_tb.Text : Set_清單1() : 級別_tb.Text = PA46
            End Select
        End If
    End Sub
    Private Sub 組織圖2_1_tv_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles 組織圖2_1_tv.AfterSelect
        ' 只處理 A 的第三層節點
        If e.Node.Level = 2 Then
            ' 找到對應的 B 節點
            Dim nodeB As TreeNode = FindNodeByText(組織圖2_tv.Nodes, e.Node.Text)
            ' 如果找到了，則觸發 B 的 AfterSelect 事件
            If nodeB IsNot Nothing Then : 組織圖2_tv.SelectedNode = nodeB : 組織圖_tv_AfterSelect(組織圖2_tv, New TreeViewEventArgs(nodeB)) : End If
        Else : 主管_dgv.DataSource = Nothing
        End If
    End Sub
    Private Sub 組織圖2_tv_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles 組織圖2_tv.AfterSelect
        Select Case Strings.Mid(e.Node.Text, 7, 1)
            Case "課" : 人員_tb.Text = "" : 級別_tb.Text = "" : 主管_dgv.DataSource = Nothing : Case Else : 人員_tb.Text = e.Node.Text : PA47 = 人員_tb.Text : Set_清單1() : 級別_tb.Text = PA46
        End Select
    End Sub
    Private Sub 組織圖3_1_tv_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles 組織圖3_1_tv.AfterSelect
        ' 只處理 A 的第三層節點
        If e.Node.Level = 2 Then
            ' 找到對應的 B 節點
            Dim nodeB As TreeNode = FindNodeByText(組織圖3_tv.Nodes, e.Node.Text)
            ' 如果找到了，則觸發 B 的 AfterSelect 事件
            If nodeB IsNot Nothing Then : 組織圖3_tv.SelectedNode = nodeB : 組織圖_tv_AfterSelect(組織圖3_tv, New TreeViewEventArgs(nodeB)) : End If
        Else : 主管_dgv.DataSource = Nothing
        End If
    End Sub
    Private Sub 組織圖3_tv_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles 組織圖3_tv.AfterSelect
        Select Case Strings.Mid(e.Node.Text, 8, 1)
            Case "組" : 人員_tb.Text = "" : 級別_tb.Text = "" : 主管_dgv.DataSource = Nothing : Case Else : 人員_tb.Text = e.Node.Text : PA47 = 人員_tb.Text : Set_清單1() : 級別_tb.Text = PA46
        End Select
    End Sub
End Class