Imports System.Drawing.Drawing2D Imports System.Globalization Imports System.IO Imports Telerik.WinControls Imports Telerik.WinControls.Taskbar.Core Imports Telerik.WinControls.UI Public Class 新甘特圖模板 Dim ESTR, 檔名, 下載檔案位置1, 下載檔案位置2 As String Dim RI As Integer = -1 Dim SK As String = "要查找的 KEY" Dim Str As String = Application.StartupPath Dim 可加進度, 暫停計算, 放大 As Boolean Dim EDR As Integer DIM 對話框(31) As String Private Sub Set_合約清單() Dim ds6 As New DataSet : 合約_dgv.DataSource = Nothing : ds6.Clear() 合約_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 合約_dgv.ColumnHeadersHeight = 25 : 合約_dgv.AllowUserToAddRows = False PA = 關鍵字搜尋_tb.Text : PA46 = 合約編號1_cb.Text : PA47 = 工程期1_ch.Text SQL_合約清單1() da.Fill(ds6) : 合約_dgv.DataSource = ds6.Tables(0) : conn.Close() 合約_dgv.Columns(0).FillWeight = 80 : 合約_dgv.Columns(5).FillWeight = 200 : 合約_dgv.Columns(26).FillWeight = 50 合約_dgv.Columns(27).FillWeight = 50 : 合約_dgv.Columns(28).FillWeight = 50 For i As Integer = 1 To 29 : 合約_dgv.Columns(i).Visible = False : Next 合約_dgv.Columns(5).Visible = True : 合約_dgv.Columns(26).Visible = True : 合約_dgv.Columns(27).Visible = True : 合約_dgv.Columns(28).Visible = True End Sub Private Sub Set_進度清單() Dim ds5 As New DataSet : 合約2_dgv.DataSource = Nothing : ds5.Clear() 合約2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 合約2_dgv.ColumnHeadersHeight = 25 : 合約2_dgv.AllowUserToAddRows = False PA = 關鍵字搜尋_tb.Text : PA46 = 合約編號1_cb.Text : PA45 = 工程執行主管_cb.Text SQL_進度清單() da.Fill(ds5) : 合約2_dgv.DataSource = ds5.Tables(0) : conn.Close() 合約2_dgv.Columns(1).Visible = False : 合約2_dgv.Columns(2).Visible = False : 合約2_dgv.Columns(3).Visible = False : 合約2_dgv.Columns(4).Visible = False 合約2_dgv.Columns(5).Visible = False : 合約2_dgv.Columns(6).Visible = False : 合約2_dgv.Columns(7).Visible = False : 合約2_dgv.Columns(8).Visible = False 合約2_dgv.Columns(9).Visible = False : 合約2_dgv.Columns(10).Visible = False 合約2_dgv.Columns(0).ReadOnly = True If 系統語言 = "繁體中文" Then 合約2_dgv.Columns(表頭(1)).FillWeight = 250 If 放大 = True Then : 合約2_dgv.Columns(表頭(1)).Visible = True : 合約2_dgv.Columns(表頭(2)).Visible = False Else : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = False : End If Else 合約2_dgv.Columns(表頭(2)).FillWeight = 250 If 放大 = True Then : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = True Else : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = False : End If End If '--------移到錨定地點-------------------------------------------------------------------------------------------------------------------------------------------------------------- If 合約編號_tb.Text <> "" Then : Dim searchString As String = 合約編號_tb.Text For Each row As DataGridViewRow In 合約2_dgv.Rows If row.Cells(表頭(0)).Value IsNot Nothing AndAlso row.Cells(表頭(0)).Value.ToString() = searchString Then : 合約2_dgv.CurrentCell = row.Cells(表頭(0)) : Exit For : End If Next End If If Panel2.Visible = False Then Panel2.Visible = True : Panel4.Location = New System.Drawing.Point(162, 0) : Panel4.Size = New System.Drawing.Point(Panel4.Size.Width - 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width End If End Sub Private Sub Set_未建立進度清單() Dim ds5 As New DataSet : 未建清單_dgv.DataSource = Nothing : ds5.Clear() 未建清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 未建清單_dgv.ColumnHeadersHeight = 25 : 未建清單_dgv.AllowUserToAddRows = False PA = 關鍵字搜尋_tb.Text : PA46 = 合約編號1_cb.Text : PA45 = 工程執行主管_cb.Text SQL未建立甘特圖清單() da.Fill(ds5) : 未建清單_dgv.DataSource = ds5.Tables(0) : conn.Close() 未建清單_dgv.Columns(1).Visible = False : 未建清單_dgv.Columns(2).Visible = False : 未建清單_dgv.Columns(3).Visible = False : 未建清單_dgv.Columns(4).Visible = False 未建清單_dgv.Columns(5).Visible = False : 未建清單_dgv.Columns(6).Visible = False : 未建清單_dgv.Columns(7).Visible = False : 未建清單_dgv.Columns(8).Visible = False 未建清單_dgv.Columns(9).Visible = False : 未建清單_dgv.Columns(10).Visible = False : 未建清單_dgv.Columns(11).Visible = False 未建清單_dgv.Columns(0).ReadOnly = True For i As Integer = 0 To 未建清單_dgv.Rows.Count - 1 If Strings.Left(未建清單_dgv("乙方", i).Value.ToString, 2) = "HX" Then : 未建清單_dgv("乙方", i).Value = "HX" : Else : 未建清單_dgv("乙方", i).Value = "PGS" : End If Dim strA As String = 未建清單_dgv("開始日期", i).Value.ToString : Dim dateA As Date = Date.ParseExact(strA, "yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo) Dim days As Integer = 未建清單_dgv("工期", i).Value.ToString : Dim newDate As Date = dateA.AddDays(days) : 未建清單_dgv("結束日期", i).Value = newDate.ToString("yyyy/MM/dd") 未建清單_dgv("間距", i).Value = "月" Next If 系統語言 = "繁體中文" Then 未建清單_dgv.Columns(表頭(1)).FillWeight = 250 : 未建清單_dgv.Columns(表頭(1)).Visible = True : 未建清單_dgv.Columns(表頭(2)).Visible = False Else 未建清單_dgv.Columns(表頭(2)).FillWeight = 250 : 未建清單_dgv.Columns(表頭(1)).Visible = False : 未建清單_dgv.Columns(表頭(2)).Visible = True End If End Sub Private Sub 甲方條件下拉清單讀取() SQL合約條件讀取() : 合約編號1_cb.Items.Clear() : 合約編號1_cb.Items.Add("") : While (dr.Read()) : 合約編號1_cb.Items.Add(dr("約號甲方")) : End While : conn.Close() End Sub Private Sub 執行主管下拉清單讀取() SQL執行主管下拉() : 帳號_cb.Items.Clear() : 職稱_cb.Items.Clear() : 工程執行主管_cb.Items.Clear() 帳號_cb.Items.Add("") : 職稱_cb.Items.Add("") : 工程執行主管_cb.Items.Add("") While (dr.Read()) : 帳號_cb.Items.Add(dr("帳號")) : 職稱_cb.Items.Add(dr("職稱")) : 工程執行主管_cb.Items.Add(dr("姓名")) : End While : conn.Close() End Sub Private Sub Set_語言() 語言_dgv.DataSource = Nothing 語言_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 語言_dgv.ColumnHeadersHeight = 25 語言_dgv.AllowUserToAddRows = False For i As Integer = 0 To 語言_dgv.Rows.Count - 1 : 語言_dgv.Rows.RemoveAt(0) : Next If File.Exists(Str + "\LANGUAGE_FILE.csv") Then Dim filereader = My.Computer.FileSystem.OpenTextFileReader(Str + "\LANGUAGE_FILE.csv", System.Text.Encoding.Default) Dim line As String = filereader.ReadLine() While Not (line Is Nothing) line = filereader.ReadLine() If line <> Nothing Then line = line.Replace("""", "") If Strings.Left(line, 4) = "G000" Or Strings.Left(line, 8) = "H001-108" Or Strings.Left(line, 8) = "H110-118" Or Strings.Left(line, 4) = 介面 Then If 系統語言 = "繁體中文" Then If Strings.Mid(line, 10, 2) = "CH" Then : 語言_dgv.Rows.Insert(0) 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11) If Strings.Mid(line, 13, 300).EndsWith(",") Then 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1) Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If End If ElseIf 系統語言 = "English" Then If Strings.Mid(line, 10, 2) = "EN" Then : 語言_dgv.Rows.Insert(0) 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11) If Strings.Mid(line, 13, 300).EndsWith(",") Then 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1) Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If End If ElseIf 系統語言 = "Indonesian" Then If Strings.Mid(line, 10, 2) = "IN" Then : 語言_dgv.Rows.Insert(0) 語言_dgv.Rows(0).Cells(0).Value = Strings.Left(line, 11) If Strings.Mid(line, 13, 300).EndsWith(",") Then 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300).Substring(0, Strings.Mid(line, 13, 300).Length - 1) Else : 語言_dgv.Rows(0).Cells(1).Value = Strings.Mid(line, 13, 300) : End If End If End If End If End If End While filereader.Close() End If End Sub Private Sub Set_語言查詢() RI = -1 : For Each row As DataGridViewRow In 語言_dgv.Rows If Strings.Left(row.Cells(0).Value.ToString(), 8) = SK Then RI = row.Index : Exit For End If Next End Sub Private Sub 語言轉換讀取() Set_語言() SK = "H001-108" : Set_語言查詢() : Me.Text = 語言_dgv(1, RI).Value.ToString : SK = "G000-108" : Set_語言查詢() : ToolTip1.ToolTipTitle = 語言_dgv(1, RI).Value.ToString SK = "G000-198" : Set_語言查詢() : 對話框(0) = 語言_dgv(1, RI).Value.ToString : SK = "G000-113" : Set_語言查詢() : 對話框(1) = 語言_dgv(1, RI).Value.ToString SK = "H401-100" : Set_語言查詢() : 對話框(2) = 語言_dgv(1, RI).Value.ToString : SK = "H401-101" : Set_語言查詢() : 對話框(3) = 語言_dgv(1, RI).Value.ToString SK = "H401-102" : Set_語言查詢() : 對話框(4) = 語言_dgv(1, RI).Value.ToString : SK = "H401-103" : Set_語言查詢() : 對話框(5) = 語言_dgv(1, RI).Value.ToString SK = "H401-104" : Set_語言查詢() : 對話框(6) = 語言_dgv(1, RI).Value.ToString : SK = "H401-105" : Set_語言查詢() : 對話框(7) = 語言_dgv(1, RI).Value.ToString SK = "H401-106" : Set_語言查詢() : 對話框(8) = 語言_dgv(1, RI).Value.ToString : SK = "H401-107" : Set_語言查詢() : 對話框(9) = 語言_dgv(1, RI).Value.ToString SK = "G000-199" : Set_語言查詢() : 對話框(10) = 語言_dgv(1, RI).Value.ToString : SK = "G000-110" : Set_語言查詢() : 對話框(11) = 語言_dgv(1, RI).Value.ToString SK = "H401-108" : Set_語言查詢() : Label7.Text = 語言_dgv(1, RI).Value.ToString : SK = "H110-118" : Set_語言查詢() : Label40.Text = 語言_dgv(1, RI).Value.ToString SK = "H401-109" : Set_語言查詢() : Label1.Text = 語言_dgv(1, RI).Value.ToString : SK = "G000-200" : Set_語言查詢() : Label6.Text = 語言_dgv(1, RI).Value.ToString SK = "H401-110" : Set_語言查詢() : Label2.Text = 語言_dgv(1, RI).Value.ToString : SK = "H401-116" : Set_語言查詢() : 對話框(30) = 語言_dgv(1, RI).Value.ToString SK = "H401-111" : Set_語言查詢() : Label5.Text = 語言_dgv(1, RI).Value.ToString : SK = "G000-201" : Set_語言查詢() : Label8.Text = 語言_dgv(1, RI).Value.ToString SK = "H401-112" : Set_語言查詢() : Label3.Text = 語言_dgv(1, RI).Value.ToString : SK = "H401-113" : Set_語言查詢() : Label4.Text = 語言_dgv(1, RI).Value.ToString SK = "H401-114" : Set_語言查詢() : 高級編輯_lb.Text = 語言_dgv(1, RI).Value.ToString : SK = "G000-118" : Set_語言查詢() : 對話框(12) = 語言_dgv(1, RI).Value.ToString SK = "G000-202" : Set_語言查詢() : 對話框(13) = 語言_dgv(1, RI).Value.ToString : SK = "G000-203" : Set_語言查詢() : 對話框(14) = 語言_dgv(1, RI).Value.ToString SK = "G000-204" : Set_語言查詢() : 對話框(15) = 語言_dgv(1, RI).Value.ToString : SK = "G000-205" : Set_語言查詢() : 對話框(16) = 語言_dgv(1, RI).Value.ToString SK = "G000-206" : Set_語言查詢() : 對話框(17) = 語言_dgv(1, RI).Value.ToString : SK = "G000-207" : Set_語言查詢() : 對話框(18) = 語言_dgv(1, RI).Value.ToString SK = "G000-208" : Set_語言查詢() : 對話框(19) = 語言_dgv(1, RI).Value.ToString : SK = "G000-209" : Set_語言查詢() : 對話框(20) = 語言_dgv(1, RI).Value.ToString SK = "G000-210" : Set_語言查詢() : 對話框(21) = 語言_dgv(1, RI).Value.ToString : SK = "G000-211" : Set_語言查詢() : 對話框(22) = 語言_dgv(1, RI).Value.ToString SK = "G000-212" : Set_語言查詢() : 對話框(23) = 語言_dgv(1, RI).Value.ToString : SK = "G000-119" : Set_語言查詢() : 對話框(24) = 語言_dgv(1, RI).Value.ToString SK = "H401-115" : Set_語言查詢() : 對話框(25) = 語言_dgv(1, RI).Value.ToString : SK = "G000-213" : Set_語言查詢() : 對話框(26) = 語言_dgv(1, RI).Value.ToString SK = "G000-214" : Set_語言查詢() : 對話框(27) = 語言_dgv(1, RI).Value.ToString : SK = "G000-120" : Set_語言查詢() : 對話框(28) = 語言_dgv(1, RI).Value.ToString SK = "G000-126" : Set_語言查詢() : 對話框(29) = 語言_dgv(1, RI).Value.ToString : SK = "G000-215" : Set_語言查詢() : 表頭(1) = 語言_dgv(1, RI).Value.ToString SK = "G000-216" : Set_語言查詢() : 表頭(2) = 語言_dgv(1, RI).Value.ToString : SK = "H401-117" : Set_語言查詢() : 對話框(31) = 語言_dgv(1, RI).Value.ToString SK = "G000-156" : Set_語言查詢() : Label379.Text = 語言_dgv(1, RI).Value.ToString : 表頭(0) = 語言_dgv(1, RI).Value.ToString End Sub Private Sub 縮放2_bt_MouseEnter(sender As Object, e As EventArgs) Handles 縮放2_bt.MouseEnter ToolTip1.SetToolTip(Me.縮放2_bt, 對話框(0)) End Sub Private Sub 縮放1_bt_MouseEnter(sender As Object, e As EventArgs) Handles 縮放1_bt.MouseEnter ToolTip1.SetToolTip(Me.縮放1_bt, 對話框(0)) End Sub Private Sub 查詢_bt_MouseEnter(sender As Object, e As EventArgs) Handles 查詢_bt.MouseEnter ToolTip1.SetToolTip(Me.查詢_bt, 對話框(1)) End Sub Private Sub 新增主項_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增主項_bt.MouseEnter ToolTip1.SetToolTip(Me.新增主項_bt, 對話框(2)) End Sub Private Sub 創建甘特圖_bt_MouseEnter(sender As Object, e As EventArgs) Handles 創建甘特圖_bt.MouseEnter ToolTip1.SetToolTip(Me.創建甘特圖_bt, 對話框(3)) End Sub Private Sub 刪除項目_bt_MouseEnter(sender As Object, e As EventArgs) Handles 刪除項目_bt.MouseEnter ToolTip1.SetToolTip(Me.刪除項目_bt, 對話框(4)) End Sub Private Sub 新增子項1_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增子項1_bt.MouseEnter ToolTip1.SetToolTip(Me.新增子項1_bt, 對話框(5)) End Sub Private Sub 新增子項2_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增子項2_bt.MouseEnter ToolTip1.SetToolTip(Me.新增子項2_bt, 對話框(6)) End Sub Private Sub 新增標點1_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增標點1_bt.MouseEnter ToolTip1.SetToolTip(Me.新增標點1_bt, 對話框(7)) End Sub Private Sub 新增標點2_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增標點2_bt.MouseEnter ToolTip1.SetToolTip(Me.新增標點2_bt, 對話框(8)) End Sub Private Sub 進度表刪除_bt_MouseEnter(sender As Object, e As EventArgs) Handles 進度表刪除_bt.MouseEnter ToolTip1.SetToolTip(Me.進度表刪除_bt, 對話框(9)) End Sub Private Sub 導出_bt_MouseEnter(sender As Object, e As EventArgs) Handles 導出_bt.MouseEnter ToolTip1.SetToolTip(Me.導出_bt, 對話框(10)) End Sub Private Sub 存檔_bt_MouseEnter(sender As Object, e As EventArgs) Handles 存檔_bt.MouseEnter ToolTip1.SetToolTip(Me.存檔_bt, 對話框(11)) End Sub Private Sub 新甘特圖模板_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.MdiParent = HX_PGS_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True : HX_PGS_ERP_SYS.WindowState = 2 H(401) = True : 介面 = "H401" : 語言轉換讀取() : 顯示說明(999, False) 視窗2_pl.Visible = False : Panel1.SendToBack() If CInt(登入人級別) <= 3 Then : 進度表刪除_bt.Enabled = True : 工程執行主管_cb.Enabled = True ElseIf CInt(登入人級別) > 3 Then : 進度表刪除_bt.Enabled = False : 工程執行主管_cb.Enabled = False : End If End Sub Private Sub 新甘特圖模板_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 執行主管下拉清單讀取() : 甲方條件下拉清單讀取() : Set_合約清單() : Set_進度清單() : 新甘特圖模板_Siz() End Sub Private Sub 新甘特圖模板_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed MyMod.虛擬桌面開啟() End Sub Private Sub 新甘特圖模板_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged 新甘特圖模板_Siz() : 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width End Sub Private Sub 新甘特圖模板_Siz() MyMod.清單字體大小調整() 合約_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", HX_PGS_ERP_SYS.字體_NUD.Value) 合約2_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", HX_PGS_ERP_SYS.字體_NUD.Value) End Sub Private Sub 語轉扭_bt_Click(sender As Object, e As EventArgs) Handles 語轉扭_bt.Click H(401) = True : 介面 = "H401" : 語言轉換讀取() : Set_進度清單() : Set_未建立進度清單() End Sub Private Sub 未建清單_dgv_CellClick(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles 未建清單_dgv.CellClick If e.RowIndex = -1 Then : Else : 暫停計算 = True 合約編號_cb.Text = 未建清單_dgv("乙方", e.RowIndex).Value.ToString : 合約編號1_tb.Text = 未建清單_dgv("甲方", e.RowIndex).Value.ToString 合約編號2_tb.Text = 未建清單_dgv("立約號", e.RowIndex).Value.ToString : 合約編號3_tb.Text = 未建清單_dgv("序號", e.RowIndex).Value.ToString 合約編號_tb.Text = 未建清單_dgv(表頭(0), e.RowIndex).Value.ToString : 工程名稱_中_tb.Text = 未建清單_dgv(表頭(1), e.RowIndex).Value.ToString 工程名稱_英_tb.Text = 未建清單_dgv(表頭(2), e.RowIndex).Value.ToString : 工程執行主管_cb.Text = 未建清單_dgv("項目負責", e.RowIndex).Value.ToString 開始日期_dtp.Value = 未建清單_dgv("開始日期", e.RowIndex).Value.ToString : 結束日期_dtp.Value = 未建清單_dgv("結束日期", e.RowIndex).Value.ToString 暫停計算 = False : 時間區間計算() : 可加進度 = True 新建甘特圖() : 新增主項_bt.PerformClick() : 新增主項_bt.PerformClick() : 新增主項_bt.PerformClick() End If End Sub Private Sub 合約2_dgv_CellClick(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles 合約2_dgv.CellClick If e.RowIndex = -1 Then : Else : 暫停計算 = True If 放大 = True Then : 縮放2_bt.PerformClick() : End If 合約編號_cb.Text = 合約2_dgv("乙方", e.RowIndex).Value.ToString : 合約編號1_tb.Text = 合約2_dgv("甲方", e.RowIndex).Value.ToString 合約編號2_tb.Text = 合約2_dgv("立約號", e.RowIndex).Value.ToString : 合約編號3_tb.Text = 合約2_dgv("序號", e.RowIndex).Value.ToString 合約編號_tb.Text = 合約2_dgv(表頭(0), e.RowIndex).Value.ToString : 工程名稱_中_tb.Text = 合約2_dgv(表頭(1), e.RowIndex).Value.ToString If 合約2_dgv("間距", e.RowIndex).Value.ToString = "天" Then : 天_ch.Checked = True : 周_ch.Checked = False : 月_ch.Checked = False ElseIf 合約2_dgv("間距", e.RowIndex).Value.ToString = "周" Then : 天_ch.Checked = False : 周_ch.Checked = True : 月_ch.Checked = False ElseIf 合約2_dgv("間距", e.RowIndex).Value.ToString = "月" Then : 天_ch.Checked = False : 周_ch.Checked = False : 月_ch.Checked = True : End If 暫停計算 = False : 時間區間計算() : 可加進度 = True Dim ds1 As New DataSet PA5 = 合約編號_tb.Text : ds1.Clear() : SQL_工程進度表讀取() : da.Fill(ds1) 下載檔案位置1 = Str + "\" & PA5 & "_Items.csv" 下載檔案位置2 = Str + "\" & PA5 & "_Links.csv" If 下載檔案位置1 <> "" Then : If File.Exists(下載檔案位置1) Then : File.Delete(下載檔案位置1) : End If : End If If 下載檔案位置2 <> "" Then : If File.Exists(下載檔案位置2) Then : File.Delete(下載檔案位置2) : End If : End If If ds1.Tables(0).Rows.Count > 0 Then If IsDBNull(ds1.Tables(0).Rows(0).Item("清單")) = False Then Dim imgData1() As Byte : imgData1 = ds1.Tables(0).Rows(0).Item("清單") Dim imgData2() As Byte : imgData2 = ds1.Tables(0).Rows(0).Item("連線") Dim fs1 As FileStream : fs1 = File.Create(Str + "\" & PA5 & "_Items.csv", imgData1.Length - 1) Dim fs2 As FileStream : fs2 = File.Create(Str + "\" & PA5 & "_Links.csv", imgData2.Length - 1) fs1.Write(imgData1, 0, imgData1.Length - 1) : fs1.Close() fs2.Write(imgData2, 0, imgData2.Length - 1) : fs2.Close() 檔名 = 合約編號_tb.Text 設定清單_dgv.DataSource = Nothing : 清單_dgv.DataSource = Nothing 連線清單_dgv.Rows.Clear() : 甘特圖_gv.GanttViewElement.SelectedItem = Nothing 甘特圖_gv.Links.Clear() : 連線清單_dgv.Rows.Clear() : 甘特圖_gv.GanttViewElement.SelectedItem = Nothing 載入Itemcsv內容() : 載入Linkcsv內容() : 載入甘特圖() If 設定清單_dgv.Rows.Count > 0 Then : 載入Links() : End If Else : 新建甘特圖() : 新增主項_bt.PerformClick() : 新增主項_bt.PerformClick() : 新增主項_bt.PerformClick() : End If End If : conn.Close() If 下載檔案位置1 <> "" Then : If File.Exists(下載檔案位置1) Then : File.Delete(下載檔案位置1) : End If : End If If 下載檔案位置2 <> "" Then : If File.Exists(下載檔案位置2) Then : File.Delete(下載檔案位置2) : End If : End If Panel2.Visible = False : Panel4.Location = New System.Drawing.Point(0, 0) : Panel4.Size = New System.Drawing.Point(Panel4.Size.Width + 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width 開始日期_dtp.Value = 合約2_dgv("開始日期", e.RowIndex).Value.ToString : 結束日期_dtp.Value = 合約2_dgv("結束日期", e.RowIndex).Value.ToString 工程名稱_英_tb.Text = 合約2_dgv(表頭(2), e.RowIndex).Value.ToString : 工程執行主管_cb.Text = 合約2_dgv("項目負責", e.RowIndex).Value.ToString End If End Sub Private Sub 時間區間計算() If 天_ch.Checked = True Then : 間距_nud.Value = DateDiff("d", 開始日期_dtp.Value, 結束日期_dtp.Value) If 間距_nud.Value > 55 Then : 天_ch.Checked = False : 周_ch.Checked = True : 月_ch.Checked = False 間距_nud.Value = DateDiff("ww", 開始日期_dtp.Value, 結束日期_dtp.Value) : End If ElseIf 周_ch.Checked = True Then : 間距_nud.Value = DateDiff("ww", 開始日期_dtp.Value, 結束日期_dtp.Value) If 間距_nud.Value > 55 Then : 天_ch.Checked = False : 周_ch.Checked = False : 月_ch.Checked = True 間距_nud.Value = DateDiff("m", 開始日期_dtp.Value, 結束日期_dtp.Value) : End If ElseIf 月_ch.Checked = True Then : 間距_nud.Value = DateDiff("m", 開始日期_dtp.Value, 結束日期_dtp.Value) : End If End Sub Private Sub 新建甘特圖() 設定清單_dgv.DataSource = Nothing : 清單_dgv.DataSource = Nothing 連線清單_dgv.Rows.Clear() : 甘特圖_gv.GanttViewElement.SelectedItem = Nothing 載入甘特圖() : If 設定清單_dgv.Rows.Count > 0 Then : 載入Links() : End If End Sub Private Sub 創建甘特圖_bt_Click(sender As Object, e As EventArgs) Handles 創建甘特圖_bt.Click Dim XD As Integer = Me.Size.Width : XD = (XD - 750) / 2 : Dim YD As Integer = Me.Size.Height : YD = (YD - 583) / 2 If 視窗2_pl.Visible = False Then 視窗2_pl.Location = New System.Drawing.Point(XD, YD) : 視窗2_pl.BringToFront() : 視窗2_pl.Visible = True : Set_未建立進度清單() Else : 視窗2_pl.Visible = False : End If End Sub Private Sub CanceL2_bt_Click(sender As Object, e As EventArgs) Handles CanceL2_bt.Click If 視窗2_pl.Visible = False Then : 視窗2_pl.Visible = True : 視窗2_pl.BringToFront() : Else 視窗2_pl.Visible = False : End If End Sub Private Sub 合約編號1_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 合約編號1_cb.SelectedIndexChanged Set_合約清單() : Set_進度清單() End Sub Private Sub 工程執行主管_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 工程執行主管_cb.SelectedIndexChanged 帳號_cb.SelectedIndex = 工程執行主管_cb.SelectedIndex : 職稱_cb.SelectedIndex = 工程執行主管_cb.SelectedIndex : Set_進度清單() End Sub Private Sub 縮放2_bt_Click(sender As Object, e As EventArgs) Handles 縮放2_bt.Click Dim NX, NY, NX1, NY1 As Integer : NX = 合約2_dgv.Size.Width : NY = 合約2_dgv.Size.Height : NX1 = Panel2.Size.Width : NY1 = Panel2.Size.Height If 系統語言 = "繁體中文" Then 合約2_dgv.Columns(表頭(1)).FillWeight = 250 If 放大 = True Then 合約2_dgv.Size = New System.Drawing.Point(NX - 400, NY) : 放大 = False : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = False Panel2.Size = New System.Drawing.Point(NX1 - 400, NY1) Else 合約2_dgv.Size = New System.Drawing.Point(NX + 400, NY) : 放大 = True : 合約2_dgv.Columns(表頭(1)).Visible = True : 合約2_dgv.Columns(表頭(2)).Visible = False Panel2.Size = New System.Drawing.Point(NX1 + 400, NY1) End If Else 合約2_dgv.Columns(表頭(2)).FillWeight = 250 If 放大 = True Then 合約2_dgv.Size = New System.Drawing.Point(NX - 400, NY) : 放大 = False : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = False Panel2.Size = New System.Drawing.Point(NX1 - 400, NY1) Else 合約2_dgv.Size = New System.Drawing.Point(NX + 400, NY) : 放大 = True : 合約2_dgv.Columns(表頭(1)).Visible = False : 合約2_dgv.Columns(表頭(2)).Visible = True Panel2.Size = New System.Drawing.Point(NX1 + 400, NY1) End If End If End Sub Private Sub 載入CSV檔() 項目清單_dgv.AllowUserToAddRows = False : 項目清單_dgv.AllowUserToDeleteRows = False : 項目清單_dgv.AllowUserToResizeRows = False 項目清單_dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill : 項目清單_dgv.ReadOnly = True : 項目清單_dgv.RowHeadersVisible = False 項目清單_dgv.Columns.Add("File Name", "File Name") : Dim fileNames() As String = Directory.GetFiles("./GanttView", "*.csv") For Each fileName As String In fileNames Dim name As String = Path.GetFileNameWithoutExtension(fileName).Split("_"c)(0) If Not 項目清單_dgv.Rows.Cast(Of DataGridViewRow)().Any(Function(row) row.Cells("File Name").Value = name) Then : Dim row As String() = {name} : 項目清單_dgv.Rows.Add(row) : End If Next End Sub Private Sub 載入甘特圖() 甘特圖_gv.Items.Clear() : 甘特圖_gv.Columns.Clear() '新增表格表頭 Dim titleColumn As New GanttViewTextViewColumn("Title") : Dim startColumn As New GanttViewTextViewColumn("Start") : Dim endColumn As New GanttViewTextViewColumn("End") Me.甘特圖_gv.GanttViewElement.Columns.Add(titleColumn) : Me.甘特圖_gv.GanttViewElement.Columns.Add(startColumn) : Me.甘特圖_gv.GanttViewElement.Columns.Add(endColumn) Me.甘特圖_gv.GanttViewElement.Columns("Title").HeaderText = 對話框(30) Me.甘特圖_gv.GanttViewElement.Columns("Start").HeaderText = Label1.Text Me.甘特圖_gv.GanttViewElement.Columns("End").HeaderText = Label2.Text '甘特圖時間指標設定 Dim todayIndicator As GanttViewTodayIndicatorElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.TodayIndicatorElement todayIndicator.BackColor = Color.Red : todayIndicator.BackColor2 = Color.Red Dim timelineTodayIndicator As GanttViewTimelineTodayIndicatorElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.TimelineTodayIndicatorElement timelineTodayIndicator.BackColor = Color.Green : timelineTodayIndicator.BackColor2 = Color.Green If 清單_dgv.Rows.Count > 0 Then 開始日期_dtp.Value = 清單_dgv.Rows(0).Cells(1).Value.ToString() : 結束日期_dtp.Value = 清單_dgv.Rows(清單_dgv.Rows.Count - 1).Cells(2).Value.ToString() For i As Integer = 0 To 清單_dgv.Rows.Count - 1 Dim progress As Double = 清單_dgv.Rows(i).Cells(3).Value.ToString() Dim item As New GanttViewDataItem With { .Start = 清單_dgv.Rows(i).Cells(1).Value.ToString(), .End = 清單_dgv.Rows(i).Cells(2).Value.ToString(), .Progress = progress, .Title = 清單_dgv.Rows(i).Cells(0).Value.ToString() } Dim parentTitle As String = 清單_dgv.Rows(i).Cells(5).Value.ToString() : Dim level As Integer = CInt(清單_dgv.Rows(i).Cells(6).Value.ToString()) If level = 1 Then : If parentTitle = "Nothing" Then : Me.甘特圖_gv.Items.Add(item) : End If ElseIf level = 2 Then : Dim parentIndex As Integer = -1 For m As Integer = 0 To 甘特圖_gv.Items.Count - 1 : If 甘特圖_gv.Items(m).Title = parentTitle Then : parentIndex = m : End If : Next If parentIndex <> -1 Then : 甘特圖_gv.Items(parentIndex).Items.Add(item) : End If ElseIf level = 3 Then For Each rootItem As GanttViewDataItem In 甘特圖_gv.Items For Each childItem As GanttViewDataItem In rootItem.Items If childItem.Title = parentTitle Then : 甘特圖_gv.Items(rootItem.Index).Items(childItem.Index).Items.Add(item) : End If Next Next ElseIf level = 4 Then Dim parentItems = From rootItem In 甘特圖_gv.Items From childItem In rootItem.Items From grandchildItem In childItem.Items Where grandchildItem.Title = parentTitle Select New With { .RootIndex = rootItem.Index, .ChildIndex = childItem.Index, .GrandchildIndex = grandchildItem.Index } For Each parentItem In parentItems : 甘特圖_gv.Items(parentItem.RootIndex).Items(parentItem.ChildIndex).Items(parentItem.GrandchildIndex).Items.Add(item) : Next ElseIf level = 5 Then Dim parentItems = From rootItem In 甘特圖_gv.Items From childItem In rootItem.Items From grandchildItem In childItem.Items From fivechildItem In grandchildItem.Items Where fivechildItem.Title = parentTitle Select New With { .RootIndex = rootItem.Index, .ChildIndex = childItem.Index, .GrandchildIndex = grandchildItem.Index, .FiveChildIndex = fivechildItem.Index } For Each parentItem In parentItems 甘特圖_gv.Items(parentItem.RootIndex).Items(parentItem.ChildIndex).Items(parentItem.GrandchildIndex).Items(parentItem.FiveChildIndex).Items.Add(item) Next End If Next Else : End If 甘特圖_gv.GanttViewElement.GraphicalViewElement.OnePixelTime = New TimeSpan(0, 50, 0) Me.甘特圖_gv.GanttViewElement.Columns(0).Width = 300 : Me.甘特圖_gv.GanttViewElement.Columns(1).Width = 130 : Me.甘特圖_gv.GanttViewElement.Columns(2).Width = 130 End Sub Private Sub 載入Links() For i As Integer = 0 To 設定清單_dgv.Rows.Count - 1 Dim linkItem As New GanttViewLinkDataItem With { .StartItem = FindItemByTitle(甘特圖_gv.Items, 設定清單_dgv.Rows(i).Cells(0).Value.ToString()), .EndItem = FindItemByTitle(甘特圖_gv.Items, 設定清單_dgv.Rows(i).Cells(1).Value.ToString()) } If 設定清單_dgv.Rows(i).Cells(2).Value.ToString() = "FinishToFinish" Then : linkItem.LinkType = 0 ElseIf 設定清單_dgv.Rows(i).Cells(2).Value.ToString() = "FinishToStart" Then : linkItem.LinkType = 1 ElseIf 設定清單_dgv.Rows(i).Cells(2).Value.ToString() = "StartToFinish" Then : linkItem.LinkType = 2 Else : linkItem.LinkType = 3 : End If : Me.甘特圖_gv.Links.Add(linkItem) Next End Sub Private Function FindItemByTitle(items As GanttViewDataItemCollection, title As String) As GanttViewDataItem For Each item In items If item.Title = title Then : Return item : End If : Dim childItem = FindItemByTitle(item.Items, title) : If childItem IsNot Nothing Then : Return childItem : End If Next : Return Nothing End Function Private Sub 開始日期_rdtp_ValueChanged(sender As Object, e As EventArgs) Handles 開始日期_dtp.ValueChanged If 結束日期_dtp.Value >= 開始日期_dtp.Value Then 甘特圖_gv.GanttViewElement.GraphicalViewElement.TimelineStart = 開始日期_dtp.Value : 甘特圖_gv.GanttViewElement.GraphicalViewElement.TimelineEnd = 結束日期_dtp.Value End If End Sub Private Sub 結束日期_rdtp_ValueChanged(sender As Object, e As EventArgs) Handles 結束日期_dtp.ValueChanged If 結束日期_dtp.Value >= 開始日期_dtp.Value Then 甘特圖_gv.GanttViewElement.GraphicalViewElement.TimelineStart = 開始日期_dtp.Value : 甘特圖_gv.GanttViewElement.GraphicalViewElement.TimelineEnd = 結束日期_dtp.Value End If End Sub Private Sub 項目清單_dgv_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles 項目清單_dgv.CellClick If e.RowIndex = -1 Then : Else : 檔名 = 項目清單_dgv.Rows(e.RowIndex).Cells(0).Value.ToString() 甘特圖_gv.Links.Clear() : 連線清單_dgv.Rows.Clear() : 甘特圖_gv.GanttViewElement.SelectedItem = Nothing : 載入Itemcsv內容() : 載入Linkcsv內容() : 載入甘特圖() If 設定清單_dgv.Rows.Count > 0 Then : 載入Links() : End If End If End Sub Private Sub TraverseItems(ByVal item As GanttViewDataItem, ByVal level As Integer, ItemRows As List(Of String)) Dim itemElement As GanttGraphicalViewBaseItemElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.GetElement(item) If item.Parent Is Nothing Then ItemRows.Add(item.Title & "," & item.Start & "," & item.End & "," & item.Progress & "," & item.Index & "," & "Nothing" & "," & item.Level & "," & ColorTranslator.FromHtml(ColorTranslator.ToHtml(itemElement.TaskElement.BackColor)).Name) Else ItemRows.Add(item.Title & "," & item.Start & "," & item.End & "," & item.Progress & "," & item.Index & "," & item.Parent.Title & "," & item.Level & "," & ColorTranslator.FromHtml(ColorTranslator.ToHtml(itemElement.TaskElement.BackColor)).Name) End If For Each childItem As GanttViewDataItem In item.Items : TraverseItems(childItem, level + 1, ItemRows) : Next End Sub Public Class MyRadGanttView Inherits RadGanttView Public Sub Export(ByVal path As String) Dim traverser As New GanttViewTraverser(Me.GanttViewElement) : traverser.TraverseAllItems = True : Dim flatItemsCollection As New List(Of GanttViewDataItem)() While traverser.MoveNext() : flatItemsCollection.Add(traverser.Current) : End While : Dim height As Single = flatItemsCollection.Count * Me.ItemHeight + Me.HeaderHeight Dim width As Single = CSng((Me.GanttViewElement.GraphicalViewElement.TimelineBehavior.AdjustedTimelineEnd.AddDays(1) - Me.GanttViewElement.GraphicalViewElement.TimelineBehavior.AdjustedTimelineStart).TotalSeconds / CSng(Me.GanttViewElement.GraphicalViewElement.OnePixelTime.TotalSeconds)) Dim columnsWidth As Integer = 0 For Each col As GanttViewTextViewColumn In Me.Columns : If col.Visible Then : columnsWidth += col.Width : End If : Next width += columnsWidth : Dim bmp As New Bitmap(CInt(width), CInt(height)) : Me.drawArea = New RectangleF(0, 0, columnsWidth, 100) Using grp As Graphics = Graphics.FromImage(bmp) : grp.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height) : End Using MyBase.DrawTextViewAndGraphicalViewToBitmap(bmp) : MyBase.DrawHeaderAndTimelineViewToBitmap(bmp) : bmp.Save(path) End Sub End Class Private Sub 甘特圖_gv_TxtViewCellFormatting(sender As Object, e As GanttViewTextViewCellFormattingEventArgs) Handles 甘特圖_gv.TextViewCellFormatting e.CellElement.BackColor = Color.White End Sub Private Sub 甘特圖_gv_TextViewItemFormatting(sender As Object, e As GanttViewTextViewItemFormattingEventArgs) Handles 甘特圖_gv.TextViewItemFormatting If (e.Item.Items.Count > 0) Then : e.ItemElement.DrawFill = True : e.ItemElement.BackColor = Color.LightSeaGreen : e.ItemElement.GradientStyle = GradientStyles.Solid ElseIf (e.Item.Start <> e.Item.End) Then : e.ItemElement.DrawFill = True : e.ItemElement.BackColor = Color.LightYellow : e.ItemElement.GradientStyle = GradientStyles.Solid Else : e.ItemElement.ResetValue(LightVisualElement.DrawBorderProperty, ValueResetFlags.Local) : e.ItemElement.ResetValue(LightVisualElement.BackColorProperty, ValueResetFlags.Local) e.ItemElement.ResetValue(LightVisualElement.GradientStyleProperty, ValueResetFlags.Local) End If End Sub Private Sub 甘特圖_gv_TimelineItemFormatting(sender As Object, e As GanttViewTimelineItemFormattingEventArgs) Handles 甘特圖_gv.TimelineItemFormatting Dim currentCulture As CultureInfo = CultureInfo.CurrentCulture Dim weekNo As Integer = currentCulture.Calendar.GetWeekOfYear(e.Item.Start, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek) Dim color1 As Color = Color.Black : Dim color2 As Color = Color.White : If weekNo Mod 2 = 0 Then : color1 = Color.White : color2 = Color.Black : End If e.ItemElement.TopElement.DrawFill = True : e.ItemElement.TopElement.DrawBorder = False : e.ItemElement.TopElement.GradientStyle = GradientStyles.Solid e.ItemElement.TopElement.BackColor = color1 : e.ItemElement.TopElement.ForeColor = color2 : e.ItemElement.Size = New Size(e.ItemElement.Size.Width, 60) End Sub Private Sub 甘特圖_gv_GraphicalViewItemFormatting(sender As Object, e As GanttViewGraphicalViewItemFormattingEventArgs) Handles 甘特圖_gv.GraphicalViewItemFormatting For i As Integer = 0 To 連線清單_dgv.Rows.Count - 2 Dim startItem2 As GanttViewDataItem = FindItemByTitle(甘特圖_gv.Items, 連線清單_dgv.Rows(i).Cells(0).Value.ToString()) Dim endItem2 As GanttViewDataItem = FindItemByTitle(甘特圖_gv.Items, 連線清單_dgv.Rows(i).Cells(1).Value.ToString()) If startItem2 IsNot Nothing AndAlso endItem2 IsNot Nothing Then If startItem2.Title.Contains("New Item") Or endItem2.Title.Contains("New Item") Then : Else If endItem2.Start < startItem2.End Then Dim totalDuration As TimeSpan = endItem2.End - endItem2.Start : endItem2.Start = startItem2.End : endItem2.End = endItem2.Start + totalDuration End If End If End If Next For Each row In 清單_dgv.Rows If row.Cells(0).Value.ToString() = e.Item.Title Then : e.ItemElement.TaskElement.BackColor = Color.FromName(row.Cells(7).Value.ToString()) : Exit For : End If Next End Sub Private Sub 甘特圖_gv_GraphicalViewLinkItemFormatting(sender As Object, e As GanttViewLinkItemFormattingEventArgs) Handles 甘特圖_gv.GraphicalViewLinkItemFormatting Dim penColor As Color = Color.Black : Dim dash As DashStyle = DashStyle.Solid Select Case e.Link.LinkType Case TasksLinkType.FinishToFinish : dash = DashStyle.DashDotDot : penColor = Color.Red : Exit Select Case TasksLinkType.FinishToStart : dash = DashStyle.Dash : penColor = Color.Green : Exit Select Case TasksLinkType.StartToFinish : dash = DashStyle.DashDot : penColor = Color.Blue : Exit Select Case TasksLinkType.StartToStart : dash = DashStyle.Dot : penColor = Color.Black : Exit Select End Select Dim pen As New Pen(penColor) : pen.DashStyle = dash : pen.Width = 3 : pen.LineJoin = LineJoin.Bevel : pen.EndCap = LineCap.ArrowAnchor : e.Pen = pen End Sub Private Sub 甘特圖_gv_ToolTipTextNeeded(sender As Object, e As ToolTipTextNeededEventArgs) Handles 甘特圖_gv.ToolTipTextNeeded Dim taskElement As GanttViewTaskElement = TryCast(sender, GanttViewTaskElement) Dim mileStone As GanttViewMilestoneElement = TryCast(sender, GanttViewMilestoneElement) Dim summaryItem As GanttViewSummaryElement = TryCast(sender, GanttViewSummaryElement) If mileStone IsNot Nothing Then Dim itemElement As GanttViewMilestoneItemElement = TryCast(mileStone.Parent, GanttViewMilestoneItemElement) e.ToolTipText = itemElement.Data.Title & " : " & itemElement.Data.Start.ToShortDateString() & " - " + itemElement.Data.[End].ToShortDateString() End If If summaryItem IsNot Nothing Then Dim itemElement As GanttGraphicalViewBaseItemElement = TryCast(summaryItem.Parent, GanttGraphicalViewBaseItemElement) e.ToolTipText = itemElement.Data.Title & " : " & itemElement.Data.Start.ToShortDateString() & " - " + itemElement.Data.[End].ToShortDateString() End If If taskElement IsNot Nothing Then Dim itemElement As GanttGraphicalViewBaseItemElement = TryCast(taskElement.Parent, GanttGraphicalViewBaseItemElement) If itemElement IsNot Nothing Then e.ToolTipText = itemElement.Data.Title & " : " & itemElement.Data.Start.ToShortDateString() & " - " + itemElement.Data.[End].ToShortDateString() End If End If End Sub Private Sub 甘特圖_gv_SelectedItemChanged(sender As Object, e As GanttViewSelectedItemChangedEventArgs) Handles 甘特圖_gv.SelectedItemChanged If 甘特圖_gv.SelectedItem IsNot Nothing AndAlso 甘特圖_gv.SelectedItem.Progress.ToString() <> "" Then 進度_nud.Value = 甘特圖_gv.SelectedItem.Progress End If End Sub Private Sub 甘特圖_gv_LinkAdding(sender As Object, e As GanttViewLinkAddingEventArgs) Handles 甘特圖_gv.LinkAdding '==========連線環狀判斷、是否往後移動判斷======= Dim startItem As GanttViewDataItem = e.Link.StartItem : Dim endItem As GanttViewDataItem = e.Link.EndItem If CheckCircularDependency(startItem, endItem) Then : e.Cancel = True : End If ' 檢查新增的連結是否會形成環狀 If IsNothing(startItem.Title) = False Then If startItem.Title.Contains("") Or endItem.Title.Contains("") Or startItem.Title.Contains("") Or endItem.Title.Contains("") Or startItem.Title.Contains("") Or endItem.Title.Contains("") Then : e.Cancel = True End If If e.Cancel = False Then If endItem.Start <= startItem.End And e.Link.LinkType = TasksLinkType.FinishToStart Then Dim totalDuration As TimeSpan = endItem.End - endItem.Start : endItem.Start = startItem.End : endItem.End = endItem.Start + totalDuration End If Dim row() As String = {startItem.Title, endItem.Title, e.Link.LinkType.ToString} : 連線清單_dgv.Rows.Add(row) End If End If End Sub Private Sub 甘特圖_gv_LinkRemove(sender As Object, e As GanttViewLinkRemovedEventArgs) Handles 甘特圖_gv.LinkRemoved For Each row In 連線清單_dgv.Rows If row.Cells(0).Value.ToString() = e.Link.StartItem.Title And row.Cells(1).Value.ToString() = e.Link.EndItem.Title And row.Cells(2).Value.ToString() = e.Link.LinkType.ToString() Then : 連線清單_dgv.Rows.Remove(row) : Exit For End If Next End Sub Private Sub 甘特圖_gv_ItemAdded(sender As Object, e As GanttViewItemAddedEventArgs) Handles 甘特圖_gv.ItemAdded If e.Item.Level >= 6 Then : 甘特圖_gv.SelectedItem.Items.Remove(e.Item) : End If End Sub Private Function CheckCircularDependency(startItem As GanttViewDataItem, endItem As GanttViewDataItem) As Boolean For Each link As GanttViewLinkDataItem In 甘特圖_gv.Links ' 檢查已經存在的連結是否和當前新增的連結形成環狀 If link.StartItem Is endItem AndAlso link.EndItem Is startItem Then : Return True ElseIf link.EndItem Is startItem AndAlso CheckCircularDependency(link.StartItem, endItem) Then : Return True : End If Next : Return False End Function Private Sub 進度條_rtb_ValueChanged(sender As Object, e As EventArgs) Handles 進度條_rtb.ValueChanged Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.OnePixelTime = New TimeSpan(0, CInt(Fix(Me.進度條_rtb.Value)), 0) End Sub Private Sub 載入Itemcsv內容() Try Dim dt As New DataTable() : Dim filePath As String = Str + "\" & 檔名 & "_Items.csv" If File.Exists(filePath) Then Using reader As New StreamReader(filePath) : Dim headers() As String = reader.ReadLine().Split(","c) For Each header As String In headers : dt.Columns.Add(header) : Next While Not reader.EndOfStream : Dim row() As String = reader.ReadLine().Split(","c) : dt.Rows.Add(row) : End While End Using End If 清單_dgv.AllowUserToAddRows = False : 清單_dgv.AllowUserToDeleteRows = False : 清單_dgv.AllowUserToResizeRows = False 清單_dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill : 清單_dgv.ReadOnly = True : 清單_dgv.RowHeadersVisible = False : 清單_dgv.DataSource = dt For i As Integer = 0 To 清單_dgv.Rows.Count - 1 If Strings.Left(清單_dgv.Rows(i).Cells("Color").Value.ToString(), 1) = "L" Then : Else 清單_dgv.Rows(i).Cells("Color").Value = "LightGray" End If Next Catch ex As Exception : MGB(對話框(31), 1) : End Try End Sub Private Sub 載入Linkcsv內容() Dim dt As New DataTable() : Dim filePath As String = Str + "\" & 檔名 & "_Links.csv" If File.Exists(filePath) Then Using reader As New StreamReader(filePath) : Dim headers() As String = reader.ReadLine().Split(","c) For Each header As String In headers : dt.Columns.Add(header) : Next While Not reader.EndOfStream : Dim row() As String = reader.ReadLine().Split(","c) : dt.Rows.Add(row) : End While End Using End If 設定清單_dgv.AllowUserToAddRows = False : 設定清單_dgv.AllowUserToDeleteRows = False : 設定清單_dgv.AllowUserToResizeRows = False 設定清單_dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill : 設定清單_dgv.ReadOnly = True : 設定清單_dgv.RowHeadersVisible = False : 設定清單_dgv.DataSource = dt End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles 導出_bt.Click Dim sfd As New SaveFileDialog() sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) sfd.Filter = "PNG檔案 (*.png)|*.png" : sfd.FileName = 合約編號_tb.Text & ".png" '取得存檔路徑 If sfd.ShowDialog() = DialogResult.OK Then '在這裡進行檔案存檔的程式碼 Dim saveFilePath As String = sfd.FileName 甘特圖_gv.Export(saveFilePath) : MGB(對話框(29), 1) End If End Sub Private Sub 新增主項_bt_Click(sender As Object, e As EventArgs) Handles 新增主項_bt.Click Dim newItem As New GanttViewDataItem() : newItem.Start = 開始日期_dtp.Value : newItem.End = 開始日期_dtp.Value.AddDays(3) newItem.Title = "" : 甘特圖_gv.Items.Add(newItem) End Sub Private Sub 工程進度表檔案更新() 檔名 = 合約編號_tb.Text 下載檔案位置1 = Str + "\" & 檔名 & "_Items.csv" 下載檔案位置2 = Str + "\" & 檔名 & "_Links.csv" If 下載檔案位置1 <> "" Then : If File.Exists(下載檔案位置1) Then : File.Delete(下載檔案位置1) : End If : End If If 下載檔案位置2 <> "" Then : If File.Exists(下載檔案位置2) Then : File.Delete(下載檔案位置2) : End If : End If '==========Links.csv================== Dim filePath As String = Str + "\" & 檔名 & "_Links.csv" : Dim LinkRows As New List(Of String)() For i As Integer = 0 To 甘特圖_gv.Links.Count - 1 LinkRows.Add(甘特圖_gv.Links(i).StartItem.Title & "," & 甘特圖_gv.Links(i).EndItem.Title & "," & 甘特圖_gv.Links(i).LinkType.ToString()) Next File.WriteAllText(filePath, "StartItem, EndItem, LinkType" & Environment.NewLine) File.AppendAllLines(filePath, LinkRows) '============Items.csv=============== filePath = Str + "\" & 檔名 & "_Items.csv" : Dim ItemRows As New List(Of String)() For Each rootItem As GanttViewDataItem In 甘特圖_gv.Items : TraverseItems(rootItem, 0, ItemRows) : Next File.WriteAllText(filePath, "Title,Start,End,Progress,index,Parent,Level,Color" & Environment.NewLine) File.AppendAllLines(filePath, ItemRows) '======== 載入Itemcsv內容() : 載入Linkcsv內容() PA49 = 下載檔案位置1 : PA1 = 合約編號_tb.Text : SQL_工程責任表_新增檔案1() PA49 = 下載檔案位置2 : PA1 = 合約編號_tb.Text : SQL_工程責任表_新增檔案2() If 下載檔案位置1 <> "" Then : If File.Exists(下載檔案位置1) Then : File.Delete(下載檔案位置1) : End If : End If If 下載檔案位置2 <> "" Then : If File.Exists(下載檔案位置2) Then : File.Delete(下載檔案位置2) : End If : End If End Sub Private Sub 進度表刪除_bt_Click(sender As Object, e As EventArgs) Handles 進度表刪除_bt.Click If 合約編號_tb.Text = "" Then : MGB(對話框(25), 1) : Else MGB(對話框(26), 2) If 訊息回應 = "YES" Then INB(對話框(27)) : PA = 訊息回應 If PA = "YES" Then : PA = 合約編號_tb.Text SQL_工程進度表_刪除總表2() : SQL_工程進度表_刪除總表1() : SQL_工程進度表_刪除總表3() : MGB(對話框(28), 1) : Set_進度清單() End If End If End If End Sub Private Sub 存檔_bt_Click(sender As Object, e As EventArgs) Handles 存檔_bt.Click Dim 合約編號條件 As Boolean = True If 合約編號_cb.Text = "" Then : MGB(對話框(13), 1) : 合約編號條件 = False : End If If 合約編號1_tb.Text = "" Then : MGB(對話框(14), 1) : 合約編號條件 = False : Else Dim d As Int32 For index = 0 To 合約編號1_tb.Text.Length - 1 d = Asc(合約編號1_tb.Text(index)) Dim 可能不行 As Boolean = False If (d < 65 Or d > 90) Then : 可能不行 = True : End If 'c變數若在65~90是大寫的英文字母 If 可能不行 = True Then If (d < 97 Or d > 122) Then : 可能不行 = True : Else : 可能不行 = False : End If 'c變數若在97~122是小寫的英文字母 If 可能不行 = True Then '然後查表, c變數若在48~57, 表示它是數字, If (d < 48 Or d > 57) Then : MGB(對話框(15), 1) : 合約編號條件 = False : Exit For : End If End If End If Next End If If 合約編號2_tb.Text = "" Then : MGB(對話框(16), 1) : 合約編號條件 = False : End If Dim c As Int32 '然後查表, c變數若在48~57, 表示它是數字, For index = 0 To 合約編號2_tb.Text.Length - 1 c = Asc(合約編號2_tb.Text(index)) If c < 48 Or c > 57 Then : MGB(對話框(17), 1) : 合約編號條件 = False : Exit For : Else If Len(合約編號2_tb.Text) <> 6 Then : MGB(對話框(18), 1) : 合約編號條件 = False : Exit For : End If End If Next If 合約編號3_tb.Text = "" Then : MGB(對話框(19), 1) : 合約編號條件 = False ElseIf IsNumeric(合約編號3_tb.Text) = False Then : MGB(對話框(20), 1) : 合約編號條件 = False End If If 工程執行主管_cb.Text = "" Then : MGB(對話框(21), 1) : 合約編號條件 = False : End If If 工程名稱_中_tb.Text = "" Then : MGB(對話框(22), 1) : 合約編號條件 = False : End If If 工程名稱_英_tb.Text = "" Then : MGB(對話框(23), 1) : 合約編號條件 = False : End If If 合約編號條件 = True Then SQL_工程責任表_最後一筆資料() If dr.Read() Then : EDR = Double.Parse(Strings.Right(dr("流水號").ToString, 9)) : Else : EDR = 0 : End If conn.Close() : EDR += 1 If EDR < 10 Then : ESTR = "PR" & "00000000" & EDR : ElseIf EDR > 9 And EDR < 100 Then : ESTR = "PR" & "0000000" & EDR ElseIf EDR > 99 And EDR < 1000 Then : ESTR = "PR" & "000000" & EDR : ElseIf EDR > 999 And EDR < 10000 Then : ESTR = "PR" & "00000" & EDR ElseIf EDR > 9999 And EDR < 100000 Then : ESTR = "PR" & "0000" & EDR : ElseIf EDR > 99999 And EDR < 100000 Then : ESTR = "PR" & "000" & EDR ElseIf EDR > 999999 And EDR < 1000000 Then : ESTR = "PR" & "00" & EDR : ElseIf EDR > 9999999 And EDR < 10000000 Then : ESTR = "PR" & "0" & EDR ElseIf EDR > 99999999 Then : ESTR = "PR" & EDR : End If : PA9 = ESTR PA = 合約編號_tb.Text : PA2 = 工程執行主管_cb.Text : PA3 = 帳號_cb.Text : PA4 = 職稱_cb.Text : PA5 = 工程名稱_中_tb.Text : PA6 = 工程名稱_英_tb.Text PA7 = Strings.Format(開始日期_dtp.Value, "yyyy/MM/dd") : PA8 = Strings.Format(結束日期_dtp.Value, "yyyy/MM/dd") If 天_ch.Checked = True Then : PA1 = "天" : ElseIf 周_ch.Checked = True Then : PA1 = "周" : ElseIf 月_ch.Checked = True Then : PA1 = "月" : End If SQL_工程責任表_資料重複認證() If dr.Read() Then SQL_工程責任表_修改資料() : 工程進度表檔案更新() : Set_進度清單() : MGB(對話框(24), 1) Else SQL_工程責任表_新增資料() : 工程進度表檔案更新() : Set_進度清單() : MGB(對話框(12), 1) End If End If End Sub Private Sub 刪除項目_bt_Click(sender As Object, e As EventArgs) Handles 刪除項目_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then Dim children As List(Of GanttViewDataItem) = New List(Of GanttViewDataItem)() : Dim queue As Queue(Of GanttViewDataItem) = New Queue(Of GanttViewDataItem)() queue.Enqueue(Me.甘特圖_gv.GanttViewElement.SelectedItem) Do While queue.Count > 0 Dim item As GanttViewDataItem = queue.Dequeue() : children.Add(item) If Not item.Items Is Nothing AndAlso item.Items.Count > 0 Then : Dim i As Integer = 0 Do While i < item.Items.Count queue.Enqueue(item.Items(i)) : i += 1 Loop End If Loop Dim j As Integer = 0 Do While j < Me.甘特圖_gv.GanttViewElement.Links.Count If children.Contains(Me.甘特圖_gv.GanttViewElement.Links(j).StartItem) OrElse children.Contains(Me.甘特圖_gv.GanttViewElement.Links(j).EndItem) Then Me.甘特圖_gv.GanttViewElement.Links.RemoveAt(j) : Else : j += 1 End If Loop If Me.甘特圖_gv.GanttViewElement.SelectedItem.Parent Is Nothing Then : Me.甘特圖_gv.GanttViewElement.Items.Remove(Me.甘特圖_gv.GanttViewElement.SelectedItem) Else : Me.甘特圖_gv.GanttViewElement.SelectedItem.Parent.Items.Remove(Me.甘特圖_gv.GanttViewElement.SelectedItem) : End If End If End Sub Private Sub 進度_nud_ValueChanged(sender As Object, e As EventArgs) Handles 進度_nud.ValueChanged If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then Dim selectedItem As GanttViewDataItem = Me.甘特圖_gv.GanttViewElement.SelectedItem : selectedItem.Progress = 進度_nud.Value End If End Sub Private Sub 新增子項1_bt_Click(sender As Object, e As EventArgs) Handles 新增子項1_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then Dim newItem As GanttViewDataItem = New GanttViewDataItem() : newItem.Start = Me.甘特圖_gv.GanttViewElement.SelectedItem.Start newItem.End = Me.甘特圖_gv.GanttViewElement.SelectedItem.End : newItem.Title = "" Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Insert(0, newItem) End If End Sub Private Sub 新增子項2_bt_Click(sender As Object, e As EventArgs) Handles 新增子項2_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then Dim newItem As GanttViewDataItem = New GanttViewDataItem() : newItem.Start = Me.甘特圖_gv.GanttViewElement.SelectedItem.Start newItem.End = Me.甘特圖_gv.GanttViewElement.SelectedItem.End : newItem.Title = "" Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Insert(Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Count, newItem) End If End Sub Private Sub 新增標點1_bt_Click(sender As Object, e As EventArgs) Handles 新增標點1_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim newItem As GanttViewDataItem = New GanttViewDataItem() newItem.Start = Me.甘特圖_gv.GanttViewElement.SelectedItem.Start : newItem.End = newItem.Start : newItem.Title = "" Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Insert(0, newItem) End If End Sub Private Sub 新增標點2_bt_Click(sender As Object, e As EventArgs) Handles 新增標點2_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim newItem As GanttViewDataItem = New GanttViewDataItem() newItem.Start = Me.甘特圖_gv.GanttViewElement.SelectedItem.Start : newItem.End = newItem.Start : newItem.Title = "" Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Insert(Me.甘特圖_gv.GanttViewElement.SelectedItem.Items.Count, newItem) End If End Sub '==========變色按鈕=============== Private Sub 紅色_bt_Click(sender As Object, e As EventArgs) Handles 紅色_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim selectedItem As GanttViewDataItem = Me.甘特圖_gv.GanttViewElement.SelectedItem Dim itemElement As GanttGraphicalViewBaseItemElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.GetElement(selectedItem) itemElement.TaskElement.BackColor = Color.LightPink For Each row In 清單_dgv.Rows If row.Cells(0).Value.ToString() = 甘特圖_gv.GanttViewElement.SelectedItem.Title Then : row.Cells(7).Value = "LightPink" : Exit For : End If Next End If End Sub Private Sub 綠色_bt_Click(sender As Object, e As EventArgs) Handles 綠色_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim selectedItem As GanttViewDataItem = Me.甘特圖_gv.GanttViewElement.SelectedItem Dim itemElement As GanttGraphicalViewBaseItemElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.GetElement(selectedItem) itemElement.TaskElement.BackColor = Color.LimeGreen For Each row In 清單_dgv.Rows If row.Cells(0).Value.ToString() = 甘特圖_gv.GanttViewElement.SelectedItem.Title Then : row.Cells(7).Value = "LimeGreen" : Exit For : End If Next End If End Sub Private Sub 藍色_bt_Click(sender As Object, e As EventArgs) Handles 藍色_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim selectedItem As GanttViewDataItem = Me.甘特圖_gv.GanttViewElement.SelectedItem Dim itemElement As GanttGraphicalViewBaseItemElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.GetElement(selectedItem) itemElement.TaskElement.BackColor = Color.LightSkyBlue For Each row In 清單_dgv.Rows If row.Cells(0).Value.ToString() = 甘特圖_gv.GanttViewElement.SelectedItem.Title Then : row.Cells(7).Value = "LightSkyBlue" : Exit For : End If Next End If End Sub Private Sub 黃色_bt_Click(sender As Object, e As EventArgs) Handles 黃色_bt.Click If Not Me.甘特圖_gv.GanttViewElement.SelectedItem Is Nothing Then : Dim selectedItem As GanttViewDataItem = Me.甘特圖_gv.GanttViewElement.SelectedItem Dim itemElement As GanttGraphicalViewBaseItemElement = Me.甘特圖_gv.GanttViewElement.GraphicalViewElement.GetElement(selectedItem) itemElement.TaskElement.BackColor = Color.LightGoldenrodYellow For Each row In 清單_dgv.Rows If row.Cells(0).Value.ToString() = 甘特圖_gv.GanttViewElement.SelectedItem.Title Then : row.Cells(7).Value = "LightGoldenrodYellow" : Exit For : End If Next End If End Sub Private Sub 縮放1_bt_Click(sender As Object, e As EventArgs) Handles 縮放1_bt.Click If Panel2.Visible = True Then Panel2.Visible = False : Panel4.Location = New System.Drawing.Point(0, 0) : Panel4.Size = New System.Drawing.Point(Panel4.Size.Width + 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width Else Panel2.Visible = True : Panel4.Location = New System.Drawing.Point(162, 0) : Panel4.Size = New System.Drawing.Point(Panel4.Size.Width - 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width End If End Sub Private Sub Panel2_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel2.MouseMove Dim mousePos As Point = e.Location ' 滑鼠在 Panel 內的位置 Dim panelRect As Rectangle = Panel2.ClientRectangle ' Panel 的邊界 Dim rightRect As New Rectangle(panelRect.Right - 10, panelRect.Top, 10, panelRect.Height) ' Panel 右邊界 If rightRect.Contains(mousePos) Then ' 碰到右邊界,執行事件 C If Panel2.Visible = True Then Panel2.Visible = False : Panel4.Location = New System.Drawing.Point(0, 0) Panel4.Size = New System.Drawing.Point(Panel4.Size.Width + 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width End If End If End Sub Private Sub Panel4_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel4.MouseMove Dim mousePos As Point = e.Location ' 滑鼠在 Panel 內的位置 Dim panelRect As Rectangle = Panel4.ClientRectangle ' Panel 的邊界 Dim leftRect As New Rectangle(panelRect.Left, panelRect.Top, 10, panelRect.Height) ' Panel 左邊界 If leftRect.Contains(mousePos) Then ' 碰到左邊界,執行事件 A If Panel2.Visible = False Then Panel2.Visible = True : Panel4.Location = New System.Drawing.Point(162, 0) Panel4.Size = New System.Drawing.Point(Panel4.Size.Width - 162, Panel4.Size.Height) 甘特圖_gv.Ratio = 565 / 甘特圖_gv.Size.Width End If End If End Sub Dim OldX, OldY As Long Dim drag As Boolean Private Sub 視窗2_pl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 視窗2_pl.MouseDown If e.Button = MouseButtons.Left Then : OldX = e.X : OldY = e.Y : drag = True : End If End Sub Private Sub 視窗2_pl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 視窗2_pl.MouseMove If drag Then : 視窗2_pl.Left = 視窗2_pl.Left + e.X - OldX : 視窗2_pl.Top = 視窗2_pl.Top + e.Y - OldY : End If End Sub Private Sub 視窗2_pl_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 視窗2_pl.MouseUp drag = False End Sub End Class