Files
Desktop_RCULogAgent/RCU_Logviewer.vb
2025-12-11 11:39:02 +08:00

1269 lines
48 KiB
VB.net
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Imports System.IO
Imports System.Threading
Imports FlexCell
Public Class RCU_Logviewer
Enum TableColName
ID = 1
TimeSpan
mac
createdatetime
logfilename
logprojectid
logroomid
log_valid
log_sn
log_len
log_datetime
log_timespan
log_type
log_content
type_param_1
type_param_2
type_param_3
type_param_4
type_param_5
type_param_6
type_param_7
type_param_8
type_param_9
type_param_10
remark
End Enum
Private Sub RCU_Logviewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
pan_sqldata.Parent = Nothing
Timer1.Start()
g_fileAnalysisThread = New Thread(AddressOf FileDataToSqlRuning)
Text = Text & "__" & Application.ProductVersion
My.Settings.Reload()
DirPath_txt.Text = My.Settings.FileDir
LoadingFileTreeInit()
g_RowFileDic = New Dictionary(Of Integer, String)
'初始化字体
Dim theFont As New System.Drawing.Text.InstalledFontCollection
theFont = New System.Drawing.Text.InstalledFontCollection()
For Each family As System.Drawing.FontFamily In theFont.Families
systemfont.Items.Add(family.Name)
Next
systemfont.SelectedIndex = 9
'Font.Name = DropDownList1.SelectedItem.Text
'初始化字号
Dim sizeArray() As Integer = [Enum].GetValues(GetType(TableColName))
Dim strbuff() As String
strbuff = Array.ConvertAll(sizeArray, New Converter(Of Integer, String)(AddressOf inttostring))
Textsize.Items.AddRange(strbuff)
Textsize.SelectedIndex = 8
Dim str As String = systemfont.SelectedItem.ToString
Dim gtheFont As New System.Drawing.Font(str, 9.ToString)
Grid_tab.Font = gtheFont
g_OldRowColor = New Dictionary(Of Integer, Color())
InitRowConfig()
'//获取系统所有颜色(利用枚举获取系统的颜色并且将Dropdownlist的字体颜色改成当前的颜色)
' String[] colorArray = Enum.GetNames(TypeOf(System.Drawing.KnownColor));
' foreach(String color In colorArray)
' {
' ListItem item = New ListItem(Color);
' item.Attributes.Add("style", "color:" + Color);
' DropDownList2.Style.Add("BackColor", Color);
' DropDownList2.Items.Add(item);
' }
' //系统字体大小
' String[] sizeArray = Enum.GetNames(TypeOf(System.Web.UI.WebControls.FontSize));
' RadioButtonList1.DataSource = sizeArray;
' RadioButtonList1.SelectedIndex = -1;
' RadioButtonList1.DataBind();
End Sub
Public Sub InitRowConfig()
Grid_RowConfig.Cols = 3
Grid_RowConfig.Cell(0, 1).Text = "列名"
Grid_RowConfig.Cell(0, 2).Text = "列值"
Grid_RowConfig.Rows = TableColName.remark + 1
Grid_RowConfig.Column(0).Visible = False
Grid_RowConfig.Range(1, 1, Grid_RowConfig.Rows - 1, Grid_RowConfig.Cols - 1).Alignment = AlignmentEnum.CenterCenter
For i As Integer = 1 To TableColName.remark
Grid_RowConfig.Cell(i, 1).Text = [Enum].GetName(GetType(TableColName), i)
Next
End Sub
Public Function inttostring(val As Integer) As String
Return val.ToString
End Function
Private Sub RCU_Logviewer_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
m_FolderIcon.Dispose()
m_FileIcon.Dispose()
Timer1.Stop()
My.Settings.Save()
End Sub
#Region "时间显示"
Private AutoCount As Integer
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Label3.Text = Now.ToString("yyyy-MM-dd HH:mm:ss")
If AutoCount > 5 Then
AotuDirToMySQL()
AutoCount = 0
Judgmentpoint()
Else
AutoCount = AutoCount + 1
End If
End Sub
Public DbConnString As String = "Server=blv-cloud-db.mysql.rds.aliyuncs.com;Port=3307;Database=rculog;Uid=blv_rcu;Pwd=fnadiaJDIJ7546;charset=utf8;"
Public Sub CellMysqlFunction()
Using db As New DbExecutor(DbExecutor.DbTypeEnum.Mysql, DbConnString)
Try
db.Open()
Dim CreateTableStr As String = "CALL `rculog`.`DeleteOldRecords`()"
db.ExecuteNonQuery(CreateTableStr)
db.Close()
Catch ex As Exception
AdminLog.ApplicationLog.WriteErrorLog($"CALL `rculog`.`DeleteOldRecords` Error, {ex.Message}")
db.Close()
End Try
End Using
End Sub
Public Sub Judgmentpoint()
Dim currentTime As DateTime = DateTime.Now
' 判断当前时间是否为凌晨3点
If currentTime.Hour = 3 AndAlso currentTime.Minute = 0 AndAlso currentTime.Second = 0 Then
Console.WriteLine("现在是凌晨3点。")
AdminLog.ApplicationLog.WriteErrorLog($"现在是凌晨3点,开始清理过期文件与数据 10天")
Dim directoryPath As String = TextBox1.Text ' 替换为你的目录路径
Dim cutOffDate As TimeSpan = DateTime.Now - DateTime.Now.AddDays(-15)
DeleteFilesOlderThan(directoryPath, cutOffDate)
CellMysqlFunction()
End If
End Sub
Sub DeleteFilesOlderThan(path As String, timeSpan As TimeSpan)
Dim directoryInfo As New DirectoryInfo(path)
Dim cutOffDate As DateTime = DateTime.Now.Subtract(timeSpan)
' 遍历目录中的文件
For Each file As FileInfo In directoryInfo.GetFiles()
If file.CreationTime < cutOffDate Then
file.Delete()
Console.WriteLine("Deleted file: " & file.FullName)
End If
Next
' 递归遍历子目录
For Each subDir As DirectoryInfo In directoryInfo.GetDirectories()
DeleteFilesOlderThan(subDir.FullName, timeSpan)
Next
End Sub
#End Region
#Region "文件夹加载"
#Region "选择文件夹"
Private Sub Btn_refresh_Click(sender As Object, e As EventArgs) Handles Btn_refresh.Click
If String.IsNullOrEmpty(DirPath_txt.Text) OrElse Not Directory.Exists(DirPath_txt.Text) Then Return
Grid_File.AutoRedraw = False
m_Tree.Nodes.Clear()
If Grid_File.Rows >= 2 Then
Grid_File.Range(1, 1, Grid_File.Rows - 1, 1).DeleteByRow()
End If
Dim tempNode = m_Tree.Nodes.Add()
tempNode.IsDirectory = True
Grid_File.AddItem(GetFileConfig(DirPath_txt.Text))
LoadingFileTree(DirPath_txt.Text, tempNode 1)
Grid_File.AutoRedraw = True
Grid_File.Refresh()
End Sub
Private Sub Btn_refresh_Click1()
If String.IsNullOrEmpty(DirPath_txt.Text) OrElse Not Directory.Exists(DirPath_txt.Text) Then Return
Grid_File.AutoRedraw = False
m_Tree.Nodes.Clear()
If Grid_File.Rows >= 2 Then
Grid_File.Range(1, 1, Grid_File.Rows - 1, 1).DeleteByRow()
End If
Dim tempNode = m_Tree.Nodes.Add()
tempNode.IsDirectory = True
Grid_File.AddItem(GetFileConfig(DirPath_txt.Text))
LoadingFileTree(DirPath_txt.Text, tempNode 1)
Grid_File.AutoRedraw = True
Grid_File.Refresh()
End Sub
Private Sub SelectFile_btn_Click(sender As Object, e As EventArgs) Handles SelectFile_btn.Click
Using dlg As New FolderBrowserDialog
dlg.Description = "请选择入库文件夹!"
If String.IsNullOrEmpty(DirPath_txt.Text) Or IO.Directory.Exists(DirPath_txt.Text) Then
dlg.SelectedPath = My.Settings.FileDir
Else
dlg.SelectedPath = DirPath_txt.Text
End If
If dlg.ShowDialog <> DialogResult.OK Then Return
DirPath_txt.Text = dlg.SelectedPath
End Using
My.Settings.FileDir = DirPath_txt.Text
My.Settings.Save()
'第一个节点
Btn_refresh.PerformClick()
'Dim tempNode = m_Tree.Nodes.Add()
'Grid_File.AddItem(GetFileConfig(DirPath_txt.Text))
'LoadingFileTree(DirPath_txt.Text, tempNode 1)
End Sub
#End Region
#Region "树状目录加载"
Private m_FolderIcon As System.Drawing.Icon
Private m_FileIcon As System.Drawing.Icon
Public Sub LoadingFileTreeInit()
Dim resourceStream As System.IO.Stream
resourceStream = MyBase.GetType().Assembly.GetManifestResourceStream("RCU_LogAgent_sqllite.Folder.ico")
m_FolderIcon = New Drawing.Icon(resourceStream)
resourceStream = MyBase.GetType().Assembly.GetManifestResourceStream("RCU_LogAgent_sqllite.File.ico")
m_FileIcon = New Drawing.Icon(resourceStream)
Grid_File.AutoRedraw = False
Grid_File.ExtendLastCol = True
Grid_File.DrawMode = FlexCell.DrawModeEnum.OwnerDraw
Grid_File.AllowUserPaste = FlexCell.ClipboardDataEnum.Text
Grid_File.Cols = 7
Grid_File.Rows = 1
Grid_File.DisplayRowNumber = True
Grid_File.Cell(0, 0).Text = "ID"
Grid_File.Cell(0, 1).Text = "A"
Grid_File.Cell(0, 2).Text = "名称"
Grid_File.Cell(0, 3).Text = "修改日期"
Grid_File.Cell(0, 4).Text = "类型"
Grid_File.Cell(0, 5).Text = "大小"
Grid_File.Cell(0, 6).Text = "备注"
Grid_File.Range(0, 1, 0, 6).Alignment = FlexCell.AlignmentEnum.CenterCenter
Grid_File.Column(0).Width = 20
Grid_File.Column(1).Width = 20
Grid_File.Column(2).Width = 350
Grid_File.Column(3).Width = 120
Grid_File.Column(4).Width = 50
Grid_File.Column(5).Width = 50
Grid_File.Column(1).Locked = False
Grid_File.Column(2).Locked = True
Grid_File.Column(3).Locked = True
Grid_File.Column(4).Locked = True
Grid_File.Column(5).Locked = True
Grid_File.Column(1).CellType = FlexCell.CellTypeEnum.CheckBox
Grid_File.AutoRedraw = True
Grid_File.Refresh()
End Sub
Private m_Tree As New Node
Public Sub LoadingFileTree(filedirPath As String tempNode As Node, Level As Integer)
If Directory.Exists(filedirPath) = False Then Return '指定目录不存在
Dim datas As IReadOnlyCollection(Of String) = My.Computer.FileSystem.GetFiles(filedirPath) '获取文件夹内的文件路径集合
For Each strFileName As String In datas
tempNode.Nodes.Add()
Grid_File.AddItem(GetFileConfig(strFileName))
Next
End Sub
Public Function IsNewAnalyzeFile(filedirPath As String btime As Date) As Boolean
If Directory.Exists(filedirPath) = False Then Return False '指定目录不存在
Dim datas As IReadOnlyCollection(Of String) = My.Computer.FileSystem.GetFiles(filedirPath) '获取文件夹内的文件路径集合
For Each strFileName As String In datas
Dim fa As FileAttributes = File.GetAttributes(strFileName)
If fa = FileAttributes.Directory Then
Continue For
Else
Dim tmpFileInfo As New FileInfo(strFileName)
Dim sp = btime - tmpFileInfo.LastWriteTime
If sp.TotalSeconds > 600 Then
Return False
End If
End If
Next
Return True
End Function
Public Function GetFileConfig(path As String) As String
Dim result As String = "0" & vbTab
Dim filesize As Double = 0
Dim fa As FileAttributes = File.GetAttributes(path)
If fa = FileAttributes.Directory Then
Dim tmpDirInfo As New DirectoryInfo(path)
result = result & tmpDirInfo.Name & vbTab & Format(tmpDirInfo.LastWriteTime, "yyyy-MM-dd HH:mm:ss") & vbTab & "Directory"
Else
Dim tmpFileInfo As New FileInfo(path)
result = result & tmpFileInfo.Name & vbTab & Format(tmpFileInfo.LastWriteTime, "yyyy-MM-dd HH:mm:ss") & vbTab & "File" & vbTab
result = result & GetfileSize(tmpFileInfo.Length)
End If
Return result
End Function
Public Function GetfileSizefileSize As Long As String
Dim num As Double = 1024
If fileSize < num Then
Return fileSize.ToString & "B"
ElseIf fileSize < Math.Pow(num, 2) Then
Return (fileSize / num).ToString("f2") & "K"
ElseIf fileSize < Math.Pow(num, 3) Then
Return (fileSize / Math.Pow(num, 2)).ToString("f2") & "M"
ElseIf fileSize < Math.Pow(num, 4) Then
Return (fileSize / Math.Pow(num, 3)).ToString("f2") & "G"
ElseIf fileSize < Math.Pow(num, 5) Then
Return (fileSize / Math.Pow(num, 4)).ToString("f2") & "T"
Else
Return "文件大小获取异常"
End If
End Function
Private Declare Function DrawIconEx Lib "user32" (ByVal hDC As IntPtr, ByVal xLeft As Integer, ByVal yTop As Integer, ByVal hIcon As IntPtr, ByVal cxWidth As Integer, ByVal cyWidth As Integer, ByVal istepIfAniCur As Integer, ByVal hbrFlickerFreeDraw As Integer, ByVal diFlags As Integer) As Integer
Private Const DI_NORMAL = &H3
Private Sub Grid_File_OwnerDrawCell(ByVal Sender As Object, ByVal e As FlexCell.Grid.OwnerDrawCellEventArgs) Handles Grid_File.OwnerDrawCell
If e.Row < 1 OrElse e.Col <> 2 Then
Return
End If
Dim i, j As Integer
Dim blnDrawLine As Boolean
Dim node, tmpNode As Node
Dim intLevel As Integer
Dim intWidth As Integer
Dim intAdd As Integer
If True Then
intWidth = 20
intAdd = 26
Else
intWidth = 10
intAdd = 6
End If
node = m_Tree.FindNode(e.Row - 1 + 2)
If node IsNot Nothing Then
intLevel = node.Level - 1
'画树线
Dim pen As New System.Drawing.Pen(Color.Gray, 1)
pen.DashStyle = Drawing2D.DashStyle.Solid
For i = 0 To intLevel
If i < intLevel - 1 Then
blnDrawLine = True
tmpNode = node
For j = i To intLevel - 2
tmpNode = tmpNode.Parent
Next
If tmpNode.NextNode Is Nothing Then
blnDrawLine = False
End If
If blnDrawLine Then
'全部
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top - 1), CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1))
End If
ElseIf i = intLevel - 1 Then
'上半部分
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top - 1), CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2))
If node.NextNode IsNot Nothing Then
'下半部分
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1))
End If
ElseIf i = intLevel Then
'下半部分
If node.VisibleNodesCount > 1 Then
If True Then
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2) + 7, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1))
Else
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + intWidth * i + intAdd), CInt(e.Bounds.Bottom + 1))
End If
End If
End If
'水平的
If intLevel > 0 Then
e.Graphics.DrawLine(pen, CInt(e.Bounds.Left + intWidth * (intLevel - 1) + intAdd), CInt(e.Bounds.Top + e.Bounds.Height / 2), CInt(e.Bounds.Left + intWidth * (intLevel - 1) + intAdd + 10), CInt(e.Bounds.Top + e.Bounds.Height / 2))
End If
Next
pen.Dispose()
'+/-
If node.ChildrenCount > 0 Then
Dim rect As New Rectangle(e.Bounds.Left + 2 + intLevel * intWidth, CInt(e.Bounds.Top + (e.Bounds.Height - 9) / 2), 8, 8)
e.Graphics.FillRectangle(Brushes.White, rect)
e.Graphics.DrawRectangle(Pens.Black, rect)
If node.Expanded Then
e.Graphics.DrawLine(Pens.Black, rect.Left + 2, rect.Top + 4, rect.Right - 2, rect.Top + 4)
Else
e.Graphics.DrawLine(Pens.Black, rect.Left + 2, rect.Top + 4, rect.Right - 2, rect.Top + 4)
e.Graphics.DrawLine(Pens.Black, rect.Left + 4, rect.Top + 2, rect.Left + 4, rect.Bottom - 2)
End If
End If
'图标
' If CheckBox1.Checked Then
If node.IsDirectory Then
DrawIconEx(e.hDC, e.Bounds.Left + intWidth * intLevel + 18, e.Bounds.Top + (e.Bounds.Height - 16) / 2, m_FolderIcon.Handle, 16, 16, 0, 0, DI_NORMAL)
Else
DrawIconEx(e.hDC, e.Bounds.Left + intWidth * intLevel + 18, e.Bounds.Top + (e.Bounds.Height - 16) / 2, m_FileIcon.Handle, 16, 16, 0, 0, DI_NORMAL)
End If
' End If
'文字
With Grid_File.Cell(e.Row, e.Col)
If True Then
e.Graphics.DrawString(.Text, .Font, Brushes.Black, e.Bounds.Left + intWidth * intLevel + 35, e.Bounds.Top + (e.Bounds.Height - e.Graphics.MeasureString(.Text, .Font).Height) / 2 + 1)
Else
e.Graphics.DrawString(.Text, .Font, Brushes.Black, e.Bounds.Left + intWidth * intLevel + 12, e.Bounds.Top + (e.Bounds.Height - e.Graphics.MeasureString(.Text, .Font).Height) / 2 + 1)
End If
End With
e.Handled = True
End If
End Sub
Private Sub Grid_File_MouseDown(ByVal Sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Grid_File.MouseDown
If Grid_File.EditorVisible Then '处于编辑状态
Return
End If
If e.Button <> Windows.Forms.MouseButtons.Right Then
Return
End If
Dim cell As FlexCell.Cell = Grid_File.HitTest(e.X, e.Y)
If cell Is Nothing Then
Return
End If
If cell.Row < 1 OrElse cell.Col <> 2 Then
' If cell.Row < m_Row OrElse cell.Col <> m_Col Then
Return
End If
Grid_File.Range(cell.Row, cell.Col, cell.Row, cell.Col).SelectCells()
Dim node As Node = m_Tree.FindNode(cell.Row - 1 + 2)
If node Is Nothing Then
Return
End If
If node.ChildrenCount > 0 Then
If node.Expanded Then
mnuExpand.Enabled = False
mnuCollapse.Enabled = True
Else
mnuExpand.Enabled = True
mnuCollapse.Enabled = False
End If
Else
mnuExpand.Enabled = False
mnuCollapse.Enabled = False
End If
If node.Level = 1 Then
mnuRemove.Enabled = False '第一个节点不允许删除
mnuLevelDown.Enabled = False
Else
mnuRemove.Enabled = True
If node.PrevNode Is Nothing Then
mnuLevelDown.Enabled = False
Else
mnuLevelDown.Enabled = True
End If
End If
If node.Level <= 2 Then
mnuLevelUp.Enabled = False
Else
mnuLevelUp.Enabled = True
End If
If node.PrevNode Is Nothing Then
mnuMoveUp.Enabled = False
Else
If node.Level > 1 Then
mnuMoveUp.Enabled = True
Else
mnuMoveUp.Enabled = False
End If
End If
If node.NextNode Is Nothing Then
mnuMoveDown.Enabled = False
Else
If node.Level > 1 Then
mnuMoveDown.Enabled = True
Else
mnuMoveDown.Enabled = False
End If
End If
ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
End Sub
Private Sub Grid_File_Click(ByVal Sender As Object, ByVal e As System.EventArgs) Handles Grid_File.Click
If Grid_File.EditorVisible Then '处于编辑状态
Return
End If
Dim point As Point = Grid_File.PointToClient(Windows.Forms.Cursor.Position)
Dim cell As FlexCell.Cell = Grid_File.HitTest(point.X, point.Y)
Dim intWidth As Integer
If True Then
intWidth = 20
Else
intWidth = 10
End If
If cell IsNot Nothing Then
If cell.Row >= 1 AndAlso cell.Col = 2 Then
Dim node As Node
node = m_Tree.FindNode(cell.Row - 1 + 2)
If node IsNot Nothing Then
Dim rect As New Rectangle(cell.Bounds.Left + 2 + (node.Level - 1) * intWidth, cell.Bounds.Top + (cell.Bounds.Height - 9) / 2, 8, 8)
Dim i As Integer
If rect.Contains(point) Then
If node.Expanded Then
node.Collapse()
Grid_File.AutoRedraw = False
For i = 1 To node.ChildrenCount
Grid_File.Row(cell.Row + i).Visible = False
Next
Grid_File.AutoRedraw = True
Grid_File.Refresh()
Else
node.Expand()
Grid_File.AutoRedraw = False
For i = 1 To node.ChildrenCount
If node.FindNode(i + 1).Visible Then
Grid_File.Row(cell.Row + i).Visible = True
End If
Next
Grid_File.AutoRedraw = True
Grid_File.Refresh()
End If
End If
End If
End If
End If
End Sub
Private g_isCheckBox1CheckedChanged As Boolean = False
'Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs)
'
'End Sub
Public Sub ALLDirectory(IsAll As Boolean)
If g_isCheckBox1CheckedChanged Then
g_isCheckBox1CheckedChanged = False
Return
End If
Grid_File.AutoRedraw = False
For i As Integer = 1 To Grid_File.Rows - 1
Grid_File.Cell(i, 1).Text = IIf(IsAll, "1", "0")
Next
Grid_File.AutoRedraw = True
Grid_File.Refresh()
End Sub
#End Region
#End Region
#Region "文件解析"
Private g_RowFileDic As Dictionary(Of Integer String
Private Sub Grid_File_CellChange(Sender As Object, e As FlexCell.Grid.CellChangeEventArgs) Handles Grid_File.CellChange
If e.Row > 0 AndAlso e.Col = 1 Then
If Grid_File.Cell(e.Row, 4).Text.Equals("Directory") Then
If Grid_File.Cell(e.Row, 1).Text.Equals("1") Then
g_isCheckBox1CheckedChanged = False
ALLDirectory(True)
Else
ALLDirectory(False)
End If
Else
If Grid_File.Cell(e.Row, 1).Text.Equals("1") Then
If g_RowFileDic.ContainsKey(e.Row) Then
g_RowFileDic.Item(e.Row) = Grid_File.Cell(e.Row, 2).Text
Else
If IsAuto Then
If TimeDriverJudgement(e.Row) Then
g_RowFileDic.Add(e.Row, Grid_File.Cell(e.Row, 2).Text)
Else
Grid_File.Cell(e.Row, 1).Text = "0"
End If
Else
g_RowFileDic.Add(e.Row, Grid_File.Cell(e.Row, 2).Text)
End If
End If
Else
If g_RowFileDic.ContainsKey(e.Row) Then
g_RowFileDic.Remove(e.Row)
End If
g_isCheckBox1CheckedChanged = True
Grid_File.Cell(1, 1).Text = "0"
End If
End If
End If
End Sub
Public Function TimeDriverJudgement(Trow As Integer) As Boolean
Dim filetime As Date = Date.Parse(Grid_File.Cell(Trow, 3).Text)
Dim sp = AutoTime - filetime
If sp.TotalSeconds > 600 Then
Return True
End If
Return False
End Function
Private Sub btn_analysis_Click(sender As Object, e As EventArgs) Handles btn_analysis.Click
'Dim logpar As New LogParsing
If IsNothing(g_fileAnalysisThread) OrElse Not g_fileAnalysisThread.IsAlive Then
Console.WriteLine(g_RowFileDic.Count)
If g_RowFileDic.Count > 0 Then
StartfileAnalysisThread()
End If
Else
Debug.WriteLine("正在同步")
Trace.WriteLine("正在同步")
End If
End Sub
Private g_fileAnalysisThread As Thread
Public Sub StartfileAnalysisThread()
If IsNothing(g_fileAnalysisThread) Then
g_fileAnalysisThread = New Thread(AddressOf FileDataToSqlRuning)
End If
If g_fileAnalysisThread.IsAlive Then Return
Try
g_fileAnalysisThread = New Thread(AddressOf FileDataToSqlRuning)
g_fileAnalysisThread.Start()
Catch ex As Exception
End Try
End Sub
Public Sub FileDataToSqlRuning()
Dim logpar As New LogParsing
AddHandler logpar.Fileschedule, AddressOf SetUIProgressBar2
SetUIProgressBar1("", 0, g_RowFileDic.Count)
For Index As Integer = 0 To g_RowFileDic.Count - 1
SetUIProgressBar1(g_RowFileDic.Values(Index), Index)
Dim filepath As String = DirPath_txt.Text & "\" & g_RowFileDic.Values(Index)
Dim starttime As Date = Date.Now
Dim tsp As TimeSpan
logpar.Parsefile(TextBox1.Text filepath)
tsp = Now - starttime
Console.WriteLine($"文件{g_RowFileDic.Values(Index)}解析时间:" & tsp.TotalMilliseconds)
Next
SetUIProgressBar1("", g_RowFileDic.Count)
'If IsAuto Then
' Btn_refresh_Click(Nothing, Nothing)
'End If
End Sub
Delegate Sub delegate_MatchingInfo_Change(filename As String berval As Integer, bervalmax As Integer)
Public Sub SetUIProgressBar1(filename As String berval As Integer, Optional bervalmax As Integer = Nothing)
If InvokeRequired = True Then
Dim dev As New delegate_MatchingInfo_Change(AddressOf SetUIProgressBar1)
Me.Invoke(dev, New Object() {filename, berval, bervalmax})
Else
If bervalmax > 0 Then
PBar_1.Maximum = bervalmax
End If
PBar_1.Value = berval
If Not String.IsNullOrEmpty(filename) Then
Lab_4.Text = filename
End If
If PBar_1.Maximum = berval Then
g_RowFileDic.Clear()
Btn_refresh_Click(Nothing, Nothing)
End If
End If
End Sub
Delegate Sub delegate_MatchingInfo(berval As Integer, ismax As Boolean)
Public Sub SetUIProgressBar2(berval As Integer, ismax As Boolean)
If InvokeRequired = True Then
Dim dev As New delegate_MatchingInfo(AddressOf SetUIProgressBar2)
Me.Invoke(dev, New Object() {berval, ismax})
Else
If ismax Then
PBar_2.Value = berval
Else
PBar_2.Maximum = berval
PBar_2.Value = 0
End If
End If
End Sub
#End Region
#Region "页面切换"
Private Sub toopBtn_Fileloading_Selected(sender As Object, e As TabControlEventArgs) Handles toopBtn_Fileloading.Selected
If toopBtn_Fileloading.SelectedIndex = 0 Then
If g_RowFileDic.Count > 0 Then
Btn_refresh.PerformClick()
End If
ElseIf toopBtn_Fileloading.SelectedIndex = 1 Then
GetTablename()
End If
End Sub
#End Region
#Region "查询页面"
Public Sub GetTablename()
Dim logpar As New LogParsing
Dim li As List(Of String)
Dim headnode As New TreeNode("LogService.db")
li = logpar.Gettablename()
Tree_View2.Nodes.Clear()
Tree_View2.Nodes.Add(headnode)
Tree_View2.Tag = headnode
headnode.Expand()
If IsNothing(li) Or li.Count = 0 Then
Return
Else
For Each index As String In li
Dim Cnode As New TreeNode(index)
headnode.Nodes.Add(Cnode)
Next
End If
If headnode.Nodes.Count > 0 Then
Tree_View2.SelectedNode = headnode.Nodes(0)
Tree_View2_NodeMouseClick(Nothing, Nothing)
End If
End Sub
Private Sub Tree_View2_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles Tree_View2.NodeMouseClick
Dim node As TreeNode = Tree_View2.SelectedNode
Dim logpar As New LogParsing
If node Is Nothing Then Return
If node.Level <> 1 Then Return
Label6.Text = node.Text
If Not IsNothingg_TableLookup AndAlso g_TableLookup.IsAlive Then
g_TableLookup.Abort()
txt_find.ReadOnly = False
Button1.Enabled = True
g_OldRowColor.Clear()
End If
Dim udt As DataTable = logpar.QueryDatabase(node.Text)
Grid_tab.AutoRedraw = False
Grid_tab.SetDataBinding(udt)
SetGridStyle()
Grid_tab.AutoRedraw = True
Grid_tab.Refresh()
End Sub
Public Sub SetGridStyle()
'设置隐藏列
Grid_tab.Column(0).Visible = False
Grid_tab.Column(TableColName.TimeSpan).Visible = False
Grid_tab.Column(TableColName.mac).Visible = False
Grid_tab.Column(TableColName.logprojectid).Visible = False
Grid_tab.Column(TableColName.logroomid).Visible = False
Grid_tab.Column(TableColName.log_valid).Visible = False
'全表 字体居中
Grid_tab.Range(1, 1, Grid_tab.Rows - 1, Grid_tab.Cols - 1).Alignment = AlignmentEnum.CenterCenter
'设置排序
Grid_tab.AllowUserSort = True
'设置列宽
Grid_tab.Column(TableColName.ID).Width = 20
Grid_tab.Column(TableColName.createdatetime).Width = 130
Grid_tab.Column(TableColName.logfilename).Width = 220
Grid_tab.Column(TableColName.log_sn).Width = 25
Grid_tab.Column(TableColName.log_len).Width = 20
Grid_tab.Column(TableColName.log_datetime).Width = 130
Grid_tab.Column(TableColName.log_timespan).Width = 40
Grid_tab.Column(TableColName.log_type).Width = 20
Grid_tab.Column(TableColName.log_content).Width = 200
Grid_tab.Column(TableColName.type_param_1).Width = 80
Grid_tab.Column(TableColName.type_param_2).Width = 100
Grid_tab.Column(TableColName.type_param_3).Width = 80
Grid_tab.Column(TableColName.type_param_4).Width = 80
Grid_tab.Column(TableColName.type_param_5).Width = 80
Grid_tab.Column(TableColName.type_param_6).Width = 180
Grid_tab.Column(TableColName.type_param_7).Width = 180
Grid_tab.Column(TableColName.type_param_8).Width = 180
Grid_tab.Column(TableColName.type_param_9).Width = 180
Grid_tab.Column(TableColName.type_param_10).Width = 180
Grid_tab.Column(TableColName.remark).Width = 180
End Sub
Private Sub btn_delete_Click(sender As Object, e As EventArgs) Handles btn_delete.Click
Dim strInputMsg As String = InputBox("请输入密码", "密码确认")
If strInputMsg <> "Cc2022OK" Then Return
Dim node As TreeNode = Tree_View2.SelectedNode
Dim logpar As New LogParsing
If node Is Nothing Then Return
If node.Level <> 1 Then Return
logpar.DeleteTable(node.Text)
Dim headnode As TreeNode = Tree_View2.Tag
headnode.Nodes.Remove(node)
If Label6.Text.Equals(node.Text) Then
Label6.Text = "----------"
Grid_tab.AutoRedraw = False
If Not IsNothingg_TableLookup AndAlso g_TableLookup.IsAlive Then
g_TableLookup.Abort()
txt_find.ReadOnly = False
Button1.Enabled = True
g_OldRowColor.Clear()
End If
Dim udt As DataTable = logpar.QueryDatabase("Insqlite_UserTest")
Grid_tab.AutoRedraw = False
Grid_tab.SetDataBinding(udt)
SetGridStyle()
Grid_tab.AutoRedraw = True
Grid_tab.Refresh()
End If
End Sub
Private Sub delete_all_Click(sender As Object, e As EventArgs) Handles delete_all.Click
Dim strInputMsg As String = InputBox("请输入密码", "密码确认")
If strInputMsg <> "Cc2022OK" Then Return
Dim logpar As New LogParsing
Dim headnode As TreeNode = Tree_View2.Tag
For Each index As TreeNode In headnode.Nodes
logpar.DeleteTable(index.Text)
If Label6.Text.Equals(index.Text) Then
Label6.Text = "----------"
Grid_tab.AutoRedraw = False
If Not IsNothingg_TableLookup AndAlso g_TableLookup.IsAlive Then
g_TableLookup.Abort()
txt_find.ReadOnly = False
Button1.Enabled = True
g_OldRowColor.Clear()
End If
Dim udt As DataTable = logpar.QueryDatabase("Insqlite_UserTest")
Grid_tab.AutoRedraw = False
If udt.Rows.Count > 0 Then
Grid_tab.SetDataBinding(udt)
End If
SetGridStyle()
Grid_tab.AutoRedraw = True
Grid_tab.Refresh()
End If
Next
headnode.Nodes.Clear()
End Sub
Private Sub Table_save_Click(sender As Object, e As EventArgs) Handles Table_save.Click
Dim savePath As String
Using dlg As New FolderBrowserDialog
dlg.Description = "保存到"
dlg.SelectedPath = My.Settings.FileDir
If dlg.ShowDialog <> DialogResult.OK Then Return
savePath = dlg.SelectedPath
Grid_tab.ExportToExcel(dlg.SelectedPath & $"\{Label6.Text }.xls", "数据表" True, False)
End Using
End Sub
Private Sub systemfont_TextChanged(sender As Object, e As EventArgs) Handles systemfont.TextChanged
Dim str As String = systemfont.SelectedItem.ToString
Dim theFont As New System.Drawing.Font(str, 9.ToString)
Grid_tab.Selection.Font = theFont
End Sub
Private Sub Handles_TextChanged(sender As Object, e As EventArgs) Handles Textsize.TextChanged
Grid_tab.Selection.FontSize = CType(Textsize.Text, Integer)
End Sub
Private Sub btn_bold_Click(sender As Object, e As EventArgs) Handles btn_bold.Click
Grid_tab.Selection.FontBold = Not Grid_tab.ActiveCell.FontBold
End Sub
Private Sub btn_lean_Click(sender As Object, e As EventArgs) Handles btn_lean.Click
Grid_tab.Selection.FontItalic = Not Grid_tab.ActiveCell.FontItalic
End Sub
Private Sub ToolStripButton5_Click(sender As Object, e As EventArgs) Handles ToolStripButton5.Click
Grid_tab.Selection.FontUnderline = Not Grid_tab.ActiveCell.FontUnderline
End Sub
Private Sub btn_txtcolor_ButtonClick(sender As Object, e As EventArgs) Handles btn_txtcolor.ButtonClick
If Not IsNothing(Grid_tab.Selection) AndAlso Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.ForeColor = btn_txtcolor.ForeColor
End If
End Sub
Private Sub btn_txtcolor_DropDownOpening(sender As Object, e As EventArgs) Handles btn_txtcolor.DropDownOpening
If ColorDialog1.ShowDialog() = DialogResult.OK Then
btn_txtcolor.ForeColor = ColorDialog1.Color
If Not IsNothing(Grid_tab.Selection) OrElse Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.ForeColor = btn_txtcolor.ForeColor
End If
End If
End Sub
Private Sub btn_bcolor_DropDownOpening(sender As Object, e As EventArgs) Handles btn_bcolor.DropDownOpening
If ColorDialog1.ShowDialog() = DialogResult.OK Then
btn_bcolor.ForeColor = ColorDialog1.Color
If Not IsNothing(Grid_tab.Selection) OrElse Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.BackColor = btn_bcolor.ForeColor
End If
End If
End Sub
Private Sub btn_bcolor_ButtonClick(sender As Object, e As EventArgs) Handles btn_bcolor.ButtonClick
If Not IsNothing(Grid_tab.Selection) AndAlso Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.BackColor = btn_bcolor.ForeColor
End If
End Sub
Private Sub ToolStripMenuItem6_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem6.Click ToolStripMenuItem5.Click ToolStripMenuItem4.Click
Dim MenuItem As ToolStripMenuItem = sender
btn_center.Image = MenuItem.Image
btn_center.Tag = MenuItem.Tag
If Not IsNothing(Grid_tab.Selection) AndAlso Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.Alignment = btn_center.Tag
End If
End Sub
Private Sub btn_center_ButtonClick(sender As Object, e As EventArgs) Handles btn_center.ButtonClick
If Not IsNothing(Grid_tab.Selection) AndAlso Grid_tab.Selection.FirstRow <> 0 Then
Grid_tab.Selection.Alignment = btn_center.Tag
End If
End Sub
Private g_OldRowColor As Dictionary(Of Integer, Color())
'Private Sub Grid_tab_MouseHover(Sender As Object, e As EventArgs) Handles Grid_tab.MouseHover
' ' Grid_tab.MouseCol
' Dim mosrow As Integer = Grid_tab.MouseRow
' If mosrow < 1 Then Return
' Dim rowcolor As New List(Of Color)
' Console.WriteLine($"mosrow:{mosrow}")
' For index As Integer = 0 To Grid_tab.Cols - 1
' If g_OldRowColor.Count > 0 Then
' Grid_tab.Cell(g_OldRowColor.Keys(0), index).BackColor = g_OldRowColor.Values(0)(index)
' End If
' rowcolor.Add(Grid_tab.Cell(mosrow, index).BackColor)
' Next
' g_OldRowColor.Clear()
' g_OldRowColor.Add(mosrow, rowcolor.ToArray)
' Grid_tab.Range(mosrow, 1, mosrow, Grid_tab.Cols - 1).BackColor = Color.LightYellow
'End Sub
Private Sub Grid_tab_MouseLeave(sender As Object, e As EventArgs) Handles Grid_tab.MouseLeave
If g_OldRowColor.Count > 0 Then
For index As Integer = 0 To Grid_tab.Cols - 1
If g_OldRowColor.Count > 0 Then
Grid_tab.Cell(g_OldRowColor.Keys(0), index).BackColor = g_OldRowColor.Values(0)(index)
End If
' rowcolor.Add(Grid_tab.Cell(Grid_tab.MouseRow, index).BackColor)
Next
End If
End Sub
Private Sub Grid_tab_MouseMove(Sender As Object, e As MouseEventArgs) Handles Grid_tab.MouseMove
Dim mosrow As Integer = Grid_tab.MouseRow
If mosrow < 1 Then Return
If g_OldRowColor.Count > 0 Then
If mosrow = g_OldRowColor.Keys(0) Then Return
End If
Dim rowcolor As New List(Of Color)
' Console.WriteLine($"mosrow:{mosrow}")
For index As Integer = 0 To Grid_tab.Cols - 1
If g_OldRowColor.Count > 0 Then
Grid_tab.Cell(g_OldRowColor.Keys(0), index).BackColor = g_OldRowColor.Values(0)(index)
End If
rowcolor.Add(Grid_tab.Cell(mosrow, index).BackColor)
If index = 0 Then Continue For
Grid_RowConfig.Cell(index, 2).Text = Grid_tab.Cell(mosrow, index).Text
Next
g_OldRowColor.Clear()
g_OldRowColor.Add(mosrow, rowcolor.ToArray)
Grid_tab.Range(mosrow, 1, mosrow, Grid_tab.Cols - 1).BackColor = Color.Yellow
End Sub
Private Sub Grid_tab_KeyDown(Sender As Object, e As KeyEventArgs) Handles Grid_tab.KeyDown
If e.KeyData = Keys.Up Then
Dim mosrow As Integer = Grid_tab.ActiveCell.Row - 1
If mosrow < 1 Then Return
If g_OldRowColor.Count > 0 Then
If mosrow = g_OldRowColor.Keys(0) Then Return
End If
Dim rowcolor As New List(Of Color)
' Console.WriteLine($"mosrow:{mosrow}")
For index As Integer = 0 To Grid_tab.Cols - 1
If g_OldRowColor.Count > 0 Then
Grid_tab.Cell(g_OldRowColor.Keys(0), index).BackColor = g_OldRowColor.Values(0)(index)
End If
rowcolor.Add(Grid_tab.Cell(mosrow, index).BackColor)
If index = 0 Then Continue For
Grid_RowConfig.Cell(index, 2).Text = Grid_tab.Cell(mosrow, index).Text
Next
g_OldRowColor.Clear()
g_OldRowColor.Add(mosrow, rowcolor.ToArray)
Grid_tab.Range(mosrow, 1, mosrow, Grid_tab.Cols - 1).BackColor = Color.Yellow
ElseIf e.KeyData = Keys.Down Then
Dim mosrow As Integer = Grid_tab.ActiveCell.Row + 1
If mosrow < 1 Then Return
If g_OldRowColor.Count > 0 Then
If mosrow = g_OldRowColor.Keys(0) Then Return
End If
Dim rowcolor As New List(Of Color)
' Console.WriteLine($"mosrow:{mosrow}")
For index As Integer = 0 To Grid_tab.Cols - 1
If g_OldRowColor.Count > 0 Then
Grid_tab.Cell(g_OldRowColor.Keys(0), index).BackColor = g_OldRowColor.Values(0)(index)
End If
rowcolor.Add(Grid_tab.Cell(mosrow, index).BackColor)
If index = 0 Then Continue For
Grid_RowConfig.Cell(index, 2).Text = Grid_tab.Cell(mosrow, index).Text
Next
g_OldRowColor.Clear()
g_OldRowColor.Add(mosrow, rowcolor.ToArray)
Grid_tab.Range(mosrow, 1, mosrow, Grid_tab.Cols - 1).BackColor = Color.Yellow
End If
End Sub
Private Sub delete_flag_Click(sender As Object, e As EventArgs) Handles delete_flag.Click
Dim headnode As TreeNode = Tree_View2.Nodes(0)
If headnode.Nodes.Count > 0 Then
'Tree_View2.SelectedNode = headnode.Nodes(0)
'Tree_View2_NodeMouseClick(Nothing, Nothing)
Dim logpar As New LogParsing
If Not IsNothingg_TableLookup AndAlso g_TableLookup.IsAlive Then
g_TableLookup.Abort()
g_OldRowColor.Clear()
txt_find.ReadOnly = False
Button1.Enabled = True
End If
Dim udt As DataTable = logpar.QueryDatabase(Label6.Text)
Grid_tab.AutoRedraw = False
Grid_tab.SetDataBinding(udt)
SetGridStyle()
Grid_tab.AutoRedraw = True
Grid_tab.Refresh()
End If
End Sub
#End Region
#Region "全表查找"
Public g_TableLookup As Thread
Private IsLookupflag As Boolean = False '默认模糊查找
Public Sub FuzzyLookup()
txt_find.ReadOnly = True
Button1.Enabled = False
If IsNothing(g_TableLookup) Then
g_TableLookup = New Thread(AddressOf StartTableLookup)
g_TableLookup.Start()
Return
End If
If g_TableLookup.IsAlive Then
Return
End If
g_TableLookup = New Thread(AddressOf StartTableLookup)
g_TableLookup.Start()
End Sub
Public Sub StartTableLookup()
Dim ti As Date = Now
Dim sp As TimeSpan
If String.IsNullOrEmpty(txt_find.Text) Then
ThreadSetTableCell(Grid_tab, 1, 1, Color.Red)
Return
End If
For i As Integer = 1 To Grid_tab.Rows - 1
For j As Integer = 1 To Grid_tab.Cols - 1
If j = TableColName.TimeSpan OrElse j = TableColName.mac AndAlso
j = TableColName.logprojectid AndAlso j = TableColName.log_valid OrElse
j = TableColName.logroomid Then Continue For
If IsLookupflag Then
If Grid_tab.Cell(i, j).Text.Equals(txt_find.Text) Then
' Grid_tab.Cell(i, j).BackColor = Color.LightSalmon
ThreadSetTableCell(Grid_tab, i, j, Color.LightSalmon)
End If
Else
If Grid_tab.Cell(i, j).Text.Contains(txt_find.Text) Then
' Grid_tab.Cell(i, j).BackColor = Color.LightPink
ThreadSetTableCell(Grid_tab, i, j, Color.LightPink)
End If
End If
Next
Next
ThreadSetTableCell(Grid_tab, 1, 1, Color.Red)
sp = Now - ti
Console.WriteLine($"查找耗时:{sp.TotalMilliseconds }")
End Sub
Delegate Sub IsThreadSetTableCell(Gridtab As FlexCell.Grid, Inrow As Integer Incol As Integer, thecolor As Color)
Public Sub ThreadSetTableCell(Gridtab As FlexCell.Grid, Inrow As Integer Incol As Integer, thecolor As Color)
If InvokeRequired = True Then
Dim dev As New IsThreadSetTableCell(AddressOf ThreadSetTableCell)
Me.Invoke(dev, New Object() {Gridtab, Inrow, Incol thecolor})
Else
If thecolor = Color.Red Then
txt_find.ReadOnly = False
Button1.Enabled = True
Return
End If
Gridtab.Cell(Inrow, Incol).BackColor = thecolor
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
g_OldRowColor.Clear()
FuzzyLookup()
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
IsLookupflag = CheckBox1.Checked
End Sub
Private IsAuto As Boolean
Private Sub ONOFF_btn_Click(sender As Object, e As EventArgs) Handles ONOFF_btn.Click
'ONOFF_btn.Enabled = Not ONOFF_btn.Enabled
IsAuto = Not IsAuto
If IsAuto Then
ONOFF_btn.Text = "停止循环扫描"
ONOFF_btn.ForeColor = Color.Red
Else
ONOFF_btn.Text = "开始循环扫描"
ONOFF_btn.ForeColor = Color.Black
If Not IsNothing(g_fileAnalysisThread) Then
g_fileAnalysisThread.Abort()
End If
End If
DirPath_txt.Enabled = Not IsAuto
SelectFile_btn.Enabled = Not IsAuto
Btn_refresh.Enabled = Not IsAuto
Count_txt.Enabled = Not IsAuto
btn_analysis.Enabled = Not IsAuto
End Sub
Public AutoTime As Date
Public Sub AotuDirToMySQL()
While (IsAuto And Not g_fileAnalysisThread.IsAlive)
AutoTime = Now
If IsNewAnalyzeFile(DirPath_txt.Text, AutoTime) Then
Return
End If
Dim sp = Now - AutoTime
Console.WriteLine(sp.TotalSeconds)
Btn_refresh_Click(Nothing, Nothing)
g_RowFileDic.Clear()
Grid_File.Cell(1, 1).Text = 1
btn_analysis_Click(Nothing, Nothing)
sp = Now - AutoTime
Console.WriteLine(sp.TotalSeconds)
Exit While
End While
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Using dlg As New FolderBrowserDialog
dlg.Description = "请选择文件解析后存放文件夹路径!"
If String.IsNullOrEmpty(DirPath_txt.Text) Or IO.Directory.Exists(DirPath_txt.Text) Then
dlg.SelectedPath = My.Settings.FileDir
Else
dlg.SelectedPath = DirPath_txt.Text
End If
If dlg.ShowDialog <> DialogResult.OK Then Return
TextBox1.Text = dlg.SelectedPath
End Using
End Sub
Private Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.Click
If Label3.BackColor = SystemColors.ActiveCaption Then
Label3.BackColor = SystemColors.GradientActiveCaption
Else
Label3.BackColor = SystemColors.ActiveCaption
End If
End Sub
#End Region
End Class