初始化提交

仓库转移到Gitea,初始化提交,可能丢失以前的git版本日志
This commit is contained in:
2025-11-27 16:41:05 +08:00
commit 027d0f8024
663 changed files with 171319 additions and 0 deletions

View File

@@ -0,0 +1,282 @@
Imports System.Windows.Forms
Namespace UTSModule.Station
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class DlgLoadStation
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
Me.OK_Button = New System.Windows.Forms.Button()
Me.Cancel_Button = New System.Windows.Forms.Button()
Me.PicStationPreview = New System.Windows.Forms.PictureBox()
Me.CboStation = New System.Windows.Forms.ComboBox()
Me.LblStation = New System.Windows.Forms.Label()
Me.CboProject = New System.Windows.Forms.ComboBox()
Me.LblProject = New System.Windows.Forms.Label()
Me.Label1 = New System.Windows.Forms.Label()
Me.GrpStationDesc = New System.Windows.Forms.GroupBox()
Me.CboPacket = New System.Windows.Forms.ComboBox()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label3 = New System.Windows.Forms.Label()
Me.RtxStationDesc = New System.Windows.Forms.RichTextBox()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.RtxProjectDesc = New System.Windows.Forms.RichTextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.TableLayoutPanel1.SuspendLayout()
CType(Me.PicStationPreview, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GrpStationDesc.SuspendLayout()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TableLayoutPanel1.ColumnCount = 2
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0)
Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0)
Me.TableLayoutPanel1.Location = New System.Drawing.Point(533, 431)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 1
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Size = New System.Drawing.Size(240, 39)
Me.TableLayoutPanel1.TabIndex = 0
'
'OK_Button
'
Me.OK_Button.Dock = System.Windows.Forms.DockStyle.Fill
Me.OK_Button.Font = New System.Drawing.Font("宋体", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.OK_Button.Location = New System.Drawing.Point(3, 3)
Me.OK_Button.Name = "OK_Button"
Me.OK_Button.Size = New System.Drawing.Size(114, 33)
Me.OK_Button.TabIndex = 0
Me.OK_Button.Text = "确定"
'
'Cancel_Button
'
Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Cancel_Button.Dock = System.Windows.Forms.DockStyle.Fill
Me.Cancel_Button.Font = New System.Drawing.Font("宋体", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.Cancel_Button.Location = New System.Drawing.Point(123, 3)
Me.Cancel_Button.Name = "Cancel_Button"
Me.Cancel_Button.Size = New System.Drawing.Size(114, 33)
Me.Cancel_Button.TabIndex = 1
Me.Cancel_Button.Text = "取消"
'
'PicStationPreview
'
Me.PicStationPreview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.PicStationPreview.Location = New System.Drawing.Point(24, 181)
Me.PicStationPreview.Name = "PicStationPreview"
Me.PicStationPreview.Size = New System.Drawing.Size(200, 200)
Me.PicStationPreview.TabIndex = 5
Me.PicStationPreview.TabStop = False
'
'CboStation
'
Me.CboStation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.CboStation.Font = New System.Drawing.Font("宋体", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.CboStation.FormattingEnabled = True
Me.CboStation.IntegralHeight = False
Me.CboStation.Location = New System.Drawing.Point(24, 49)
Me.CboStation.MaxDropDownItems = 16
Me.CboStation.Name = "CboStation"
Me.CboStation.Size = New System.Drawing.Size(200, 24)
Me.CboStation.TabIndex = 9
'
'LblStation
'
Me.LblStation.AutoSize = True
Me.LblStation.Location = New System.Drawing.Point(6, 27)
Me.LblStation.Name = "LblStation"
Me.LblStation.Size = New System.Drawing.Size(41, 12)
Me.LblStation.TabIndex = 8
Me.LblStation.Text = "站位:"
'
'CboProject
'
Me.CboProject.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.CboProject.Font = New System.Drawing.Font("宋体", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.CboProject.FormattingEnabled = True
Me.CboProject.IntegralHeight = False
Me.CboProject.Location = New System.Drawing.Point(24, 49)
Me.CboProject.MaxDropDownItems = 16
Me.CboProject.Name = "CboProject"
Me.CboProject.Size = New System.Drawing.Size(200, 24)
Me.CboProject.TabIndex = 7
'
'LblProject
'
Me.LblProject.AutoSize = True
Me.LblProject.Location = New System.Drawing.Point(6, 27)
Me.LblProject.Name = "LblProject"
Me.LblProject.Size = New System.Drawing.Size(41, 12)
Me.LblProject.TabIndex = 6
Me.LblProject.Text = "项目:"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(6, 166)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(41, 12)
Me.Label1.TabIndex = 10
Me.Label1.Text = "预览:"
'
'GrpStationDesc
'
Me.GrpStationDesc.Controls.Add(Me.CboPacket)
Me.GrpStationDesc.Controls.Add(Me.Label4)
Me.GrpStationDesc.Controls.Add(Me.Label3)
Me.GrpStationDesc.Controls.Add(Me.RtxStationDesc)
Me.GrpStationDesc.Controls.Add(Me.CboStation)
Me.GrpStationDesc.Controls.Add(Me.LblStation)
Me.GrpStationDesc.Location = New System.Drawing.Point(291, 15)
Me.GrpStationDesc.Name = "GrpStationDesc"
Me.GrpStationDesc.Size = New System.Drawing.Size(483, 400)
Me.GrpStationDesc.TabIndex = 11
Me.GrpStationDesc.TabStop = False
Me.GrpStationDesc.Text = "站位描述"
'
'CboPacket
'
Me.CboPacket.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.CboPacket.Font = New System.Drawing.Font("宋体", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.CboPacket.FormattingEnabled = True
Me.CboPacket.IntegralHeight = False
Me.CboPacket.Location = New System.Drawing.Point(258, 49)
Me.CboPacket.MaxDropDownItems = 16
Me.CboPacket.Name = "CboPacket"
Me.CboPacket.Size = New System.Drawing.Size(200, 24)
Me.CboPacket.TabIndex = 13
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Location = New System.Drawing.Point(244, 27)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(41, 12)
Me.Label4.TabIndex = 12
Me.Label4.Text = "站包:"
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(6, 82)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(65, 12)
Me.Label3.TabIndex = 11
Me.Label3.Text = "站位总览:"
'
'RtxStationDesc
'
Me.RtxStationDesc.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxStationDesc.Font = New System.Drawing.Font("宋体", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.RtxStationDesc.ForeColor = System.Drawing.Color.Gray
Me.RtxStationDesc.Location = New System.Drawing.Point(24, 97)
Me.RtxStationDesc.Name = "RtxStationDesc"
Me.RtxStationDesc.ReadOnly = True
Me.RtxStationDesc.Size = New System.Drawing.Size(434, 284)
Me.RtxStationDesc.TabIndex = 10
Me.RtxStationDesc.Text = ""
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.RtxProjectDesc)
Me.GroupBox1.Controls.Add(Me.Label2)
Me.GroupBox1.Controls.Add(Me.CboProject)
Me.GroupBox1.Controls.Add(Me.Label1)
Me.GroupBox1.Controls.Add(Me.LblProject)
Me.GroupBox1.Controls.Add(Me.PicStationPreview)
Me.GroupBox1.Location = New System.Drawing.Point(23, 15)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(240, 400)
Me.GroupBox1.TabIndex = 12
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "项目描述"
'
'RtxProjectDesc
'
Me.RtxProjectDesc.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxProjectDesc.Font = New System.Drawing.Font("宋体", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.RtxProjectDesc.Location = New System.Drawing.Point(24, 97)
Me.RtxProjectDesc.Name = "RtxProjectDesc"
Me.RtxProjectDesc.ReadOnly = True
Me.RtxProjectDesc.Size = New System.Drawing.Size(200, 57)
Me.RtxProjectDesc.TabIndex = 12
Me.RtxProjectDesc.Text = ""
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(6, 82)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(41, 12)
Me.Label2.TabIndex = 8
Me.Label2.Text = "简介:"
'
'DlgLoadStation
'
Me.AcceptButton = Me.OK_Button
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel_Button
Me.ClientSize = New System.Drawing.Size(793, 471)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.GrpStationDesc)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = false
Me.MinimizeBox = false
Me.Name = "DlgLoadStation"
Me.ShowInTaskbar = false
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "DlgLoadStation"
Me.TableLayoutPanel1.ResumeLayout(false)
CType(Me.PicStationPreview,System.ComponentModel.ISupportInitialize).EndInit
Me.GrpStationDesc.ResumeLayout(false)
Me.GrpStationDesc.PerformLayout
Me.GroupBox1.ResumeLayout(false)
Me.GroupBox1.PerformLayout
Me.ResumeLayout(false)
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents OK_Button As System.Windows.Forms.Button
Friend WithEvents Cancel_Button As System.Windows.Forms.Button
Friend WithEvents PicStationPreview As Windows.Forms.PictureBox
Friend WithEvents CboStation As Windows.Forms.ComboBox
Friend WithEvents LblStation As Windows.Forms.Label
Friend WithEvents CboProject As Windows.Forms.ComboBox
Friend WithEvents LblProject As Windows.Forms.Label
Friend WithEvents Label1 As Windows.Forms.Label
Friend WithEvents GrpStationDesc As Windows.Forms.GroupBox
Friend WithEvents GroupBox1 As Windows.Forms.GroupBox
Friend WithEvents Label2 As Windows.Forms.Label
Friend WithEvents Label3 As Windows.Forms.Label
Friend WithEvents RtxStationDesc As Windows.Forms.RichTextBox
Friend WithEvents RtxProjectDesc As Windows.Forms.RichTextBox
Friend WithEvents CboPacket As ComboBox
Friend WithEvents Label4 As Label
End Class
End Namespace

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,178 @@
Imports System.Drawing
Imports System.Windows.Forms
Imports UTS_Core.UTSModule.Project
Namespace UTSModule.Station
Public Class DlgLoadStation
Public Property ProcessStation() As ProcessStation
Public Property UserInfo() As Login.UserInfo
Public _projectInfo As ProjectInfo
Private _projectName As String
Private _stationName As String
Private _stationType As ProcessStation.StationTypeEnum
Private _snIndex As New Dictionary(Of Integer, Integer)
Public Function InitProjectStationWithoutShow(projectName As String, stationName As String) As Boolean
Dim projectList As String() = ProjectInfo.LoadProjectList(ProjectInfo.InitializeModeEnum.LocalDatabaseLoad)
If projectList.Contains(projectName) = False Then Return False
_projectInfo = New ProjectInfo(UserInfo.UserId, UserInfo.UserName, projectName, ProjectInfo.InitializeModeEnum.LocalDatabaseLoad)
For Each projectStationInfo As ProcessStation In _projectInfo.Station
If projectStationInfo.Name = stationName Then
ProcessStation = projectStationInfo
ProcessStation.UserId = UserInfo.UserId
Exit For
End If
Next
Return ProcessStation IsNot Nothing
End Function
Public Overloads Function ShowDialog(projectName As String, stationName As String, Optional stationType As ProcessStation.StationTypeEnum = ProcessStation.StationTypeEnum.Test) As DialogResult
_projectName = projectName
_stationName = stationName
_stationType = stationType
Return Me.ShowDialog
End Function
Private Sub OK_Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles OK_Button.Click
DialogResult = DialogResult.OK
Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Cancel_Button.Click
DialogResult = DialogResult.Cancel
Close()
End Sub
Private Sub InitPreviewImage()
PicStationPreview.SizeMode = PictureBoxSizeMode.Zoom
End Sub
Private Sub InitializeForm()
Text = $"请选择需要加载的项目"
End Sub
Private Sub DlgLoadStation_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitializeForm()
InitPreviewImage()
UpdateProjectList()
End Sub
Private Sub UpdateProjectList()
CboProject.Items.Clear()
CboProject.Items.AddRange(ProjectInfo.LoadProjectList(ProjectInfo.InitializeModeEnum.LocalDatabaseLoad))
If String.IsNullOrEmpty(_projectName) = False Then
For i As Integer = 0 To CboProject.Items.Count - 1
If CboProject.Items(i).ToString() = _projectName Then
CboProject.SelectedIndex = i
Exit For
End If
Next
Else
If CboProject.Items.Count > 0 Then CboProject.SelectedIndex = 0
End If
End Sub
Private Sub UpdateProjectStation(stations As List(Of ProcessStation))
_snIndex.Clear()
CboStation.Items.Clear()
Dim index As Integer = -1
For Each station As ProcessStation In stations
index += 1
If station.StationType <> _stationType Then Continue For
_snIndex.Add(CboStation.Items.Count, index)
CboStation.Items.Add(station.Name)
Next
CboPacket.Items.Clear()
'添加所有站位描述
RtxStationDesc.SuspendLayout()
RtxStationDesc.Clear()
For Each station As ProcessStation In stations
If station.StationType <> _stationType Then
RtxStationDesc.SelectionColor = Color.Gray
Else
RtxStationDesc.SelectionColor = Color.Black
End If
RtxStationDesc.AppendText($"{station.Name}:{station.Description}{vbNewLine}")
Next
RtxStationDesc.ResumeLayout(False)
RtxStationDesc.PerformLayout()
'默认选择
If String.IsNullOrEmpty(_stationName) = False Then
For i As Integer = 0 To CboStation.Items.Count - 1
If CboStation.Items(i).ToString() = _stationName Then
CboStation.SelectedIndex = i
Exit For
End If
Next
End If
If CboStation.SelectedIndex = -1 AndAlso _snIndex.Count > 0 Then CboStation.SelectedIndex = _snIndex.Keys.ElementAt(0)
End Sub
Private Sub CboProject_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboProject.SelectedIndexChanged
_projectInfo = New ProjectInfo(UserInfo.UserId, UserInfo.UserName, CboProject.Text, ProjectInfo.InitializeModeEnum.LocalDatabaseLoad)
RtxProjectDesc.Text = _projectInfo.Description
If _projectInfo.MasterImage IsNot Nothing Then
PicStationPreview.Image = _projectInfo.MasterImage
End If
lastSelectIndex = -1
UpdateProjectStation(_projectInfo.Station)
End Sub
Private lastSelectIndex As Integer = -1
Private _packetList As List(Of StationPacketVo)
Private Sub CboStation_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboStation.SelectedIndexChanged
Dim selectIndex As Integer = _snIndex(CboStation.SelectedIndex)
ProcessStation = _projectInfo.Station.Item(selectIndex)
ProcessStation.UserId = UserInfo.UserId
If lastSelectIndex <> -1 Then
RtxStationDesc.Select(RtxStationDesc.GetFirstCharIndexFromLine(lastSelectIndex), RtxStationDesc.Lines(lastSelectIndex).Length)
RtxStationDesc.SelectionColor = Color.Black
End If
lastSelectIndex = selectIndex
RtxStationDesc.Select(RtxStationDesc.GetFirstCharIndexFromLine(selectIndex), RtxStationDesc.Lines(selectIndex).Length)
RtxStationDesc.SelectionColor = Color.Blue
'获取pid和sid
Dim pid As Integer = _projectInfo.Index
Dim sid As Integer = ProcessStation.StationID
'获取对应站位所有包,倒序添加
_packetList = _projectInfo.LoadLocalDbStationPackets(pid, sid)
CboPacket.Items.Clear()
For Each packet As StationPacketVo In _packetList
CboPacket.Items.Add(packet.PacketName)
Next
If CboPacket.Items.Count > 0 Then CboPacket.SelectedIndex = 0
End Sub
Private Sub CboPacket_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboPacket.SelectedIndexChanged
ProcessStation.Packet.FileName = _packetList(CboPacket.SelectedIndex).PacketName
ProcessStation.Packet.PacketMD5 = _packetList(CboPacket.SelectedIndex).PacketMd5
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,330 @@

Namespace UTSModule.Station
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class DlgStationPlanStyle
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
Me.OK_Button = New System.Windows.Forms.Button()
Me.Cancel_Button = New System.Windows.Forms.Button()
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
Me.GroupBox3 = New System.Windows.Forms.GroupBox()
Me.CheckedListBox1 = New System.Windows.Forms.CheckedListBox()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.CboType = New System.Windows.Forms.ComboBox()
Me.GroupBox2 = New System.Windows.Forms.GroupBox()
Me.GroupBox7 = New System.Windows.Forms.GroupBox()
Me.BtnBackground = New System.Windows.Forms.Button()
Me.LblBackground = New System.Windows.Forms.Label()
Me.GroupBox6 = New System.Windows.Forms.GroupBox()
Me.BtnIcon = New System.Windows.Forms.Button()
Me.LblIcon = New System.Windows.Forms.Label()
Me.GroupBox5 = New System.Windows.Forms.GroupBox()
Me.BtnFont = New System.Windows.Forms.Button()
Me.LblFont = New System.Windows.Forms.Label()
Me.GroupBox4 = New System.Windows.Forms.GroupBox()
Me.LblPriview = New System.Windows.Forms.Label()
Me.TableLayoutPanel1.SuspendLayout
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).BeginInit
Me.SplitContainer1.Panel1.SuspendLayout
Me.SplitContainer1.Panel2.SuspendLayout
Me.SplitContainer1.SuspendLayout
Me.GroupBox3.SuspendLayout
Me.GroupBox1.SuspendLayout
Me.GroupBox2.SuspendLayout
Me.GroupBox7.SuspendLayout
Me.GroupBox6.SuspendLayout
Me.GroupBox5.SuspendLayout
Me.GroupBox4.SuspendLayout
Me.SuspendLayout
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
Me.TableLayoutPanel1.ColumnCount = 2
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50!))
Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0)
Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0)
Me.TableLayoutPanel1.Location = New System.Drawing.Point(427, 377)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 1
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50!))
Me.TableLayoutPanel1.Size = New System.Drawing.Size(158, 28)
Me.TableLayoutPanel1.TabIndex = 0
'
'OK_Button
'
Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None
Me.OK_Button.Location = New System.Drawing.Point(6, 3)
Me.OK_Button.Name = "OK_Button"
Me.OK_Button.Size = New System.Drawing.Size(67, 21)
Me.OK_Button.TabIndex = 0
Me.OK_Button.Text = "确定"
'
'Cancel_Button
'
Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None
Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Cancel_Button.Location = New System.Drawing.Point(85, 3)
Me.Cancel_Button.Name = "Cancel_Button"
Me.Cancel_Button.Size = New System.Drawing.Size(67, 21)
Me.Cancel_Button.TabIndex = 1
Me.Cancel_Button.Text = "取消"
'
'SplitContainer1
'
Me.SplitContainer1.Dock = System.Windows.Forms.DockStyle.Top
Me.SplitContainer1.Location = New System.Drawing.Point(0, 0)
Me.SplitContainer1.Name = "SplitContainer1"
'
'SplitContainer1.Panel1
'
Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox3)
Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox1)
'
'SplitContainer1.Panel2
'
Me.SplitContainer1.Panel2.Controls.Add(Me.GroupBox2)
Me.SplitContainer1.Size = New System.Drawing.Size(585, 370)
Me.SplitContainer1.SplitterDistance = 250
Me.SplitContainer1.TabIndex = 1
'
'GroupBox3
'
Me.GroupBox3.Controls.Add(Me.CheckedListBox1)
Me.GroupBox3.Dock = System.Windows.Forms.DockStyle.Bottom
Me.GroupBox3.Location = New System.Drawing.Point(0, 55)
Me.GroupBox3.Name = "GroupBox3"
Me.GroupBox3.Size = New System.Drawing.Size(250, 315)
Me.GroupBox3.TabIndex = 0
Me.GroupBox3.TabStop = false
Me.GroupBox3.Text = "显示内容"
'
'CheckedListBox1
'
Me.CheckedListBox1.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.CheckedListBox1.Dock = System.Windows.Forms.DockStyle.Fill
Me.CheckedListBox1.FormattingEnabled = true
Me.CheckedListBox1.Location = New System.Drawing.Point(3, 17)
Me.CheckedListBox1.Name = "CheckedListBox1"
Me.CheckedListBox1.Size = New System.Drawing.Size(244, 295)
Me.CheckedListBox1.TabIndex = 0
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.CboType)
Me.GroupBox1.Dock = System.Windows.Forms.DockStyle.Top
Me.GroupBox1.Location = New System.Drawing.Point(0, 0)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(250, 47)
Me.GroupBox1.TabIndex = 0
Me.GroupBox1.TabStop = false
Me.GroupBox1.Text = "当前类型"
'
'CboType
'
Me.CboType.Dock = System.Windows.Forms.DockStyle.Fill
Me.CboType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.CboType.FormattingEnabled = true
Me.CboType.Location = New System.Drawing.Point(3, 17)
Me.CboType.Name = "CboType"
Me.CboType.Size = New System.Drawing.Size(244, 20)
Me.CboType.TabIndex = 0
'
'GroupBox2
'
Me.GroupBox2.Controls.Add(Me.GroupBox7)
Me.GroupBox2.Controls.Add(Me.GroupBox6)
Me.GroupBox2.Controls.Add(Me.GroupBox5)
Me.GroupBox2.Controls.Add(Me.GroupBox4)
Me.GroupBox2.Dock = System.Windows.Forms.DockStyle.Fill
Me.GroupBox2.Location = New System.Drawing.Point(0, 0)
Me.GroupBox2.Name = "GroupBox2"
Me.GroupBox2.Size = New System.Drawing.Size(331, 370)
Me.GroupBox2.TabIndex = 0
Me.GroupBox2.TabStop = false
Me.GroupBox2.Text = "节点样式"
'
'GroupBox7
'
Me.GroupBox7.Controls.Add(Me.BtnBackground)
Me.GroupBox7.Controls.Add(Me.LblBackground)
Me.GroupBox7.Location = New System.Drawing.Point(2, 201)
Me.GroupBox7.Name = "GroupBox7"
Me.GroupBox7.Size = New System.Drawing.Size(329, 67)
Me.GroupBox7.TabIndex = 3
Me.GroupBox7.TabStop = false
Me.GroupBox7.Text = "背景"
'
'BtnBackground
'
Me.BtnBackground.Location = New System.Drawing.Point(272, 27)
Me.BtnBackground.Name = "BtnBackground"
Me.BtnBackground.Size = New System.Drawing.Size(54, 23)
Me.BtnBackground.TabIndex = 3
Me.BtnBackground.Text = "修改"
Me.BtnBackground.UseVisualStyleBackColor = true
'
'LblBackground
'
Me.LblBackground.Location = New System.Drawing.Point(20, 27)
Me.LblBackground.Name = "LblBackground"
Me.LblBackground.Size = New System.Drawing.Size(246, 23)
Me.LblBackground.TabIndex = 2
Me.LblBackground.Text = "预览ABCDabcd1234"
Me.LblBackground.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'GroupBox6
'
Me.GroupBox6.Controls.Add(Me.BtnIcon)
Me.GroupBox6.Controls.Add(Me.LblIcon)
Me.GroupBox6.Location = New System.Drawing.Point(3, 133)
Me.GroupBox6.Name = "GroupBox6"
Me.GroupBox6.Size = New System.Drawing.Size(329, 67)
Me.GroupBox6.TabIndex = 2
Me.GroupBox6.TabStop = false
Me.GroupBox6.Text = "图标"
'
'BtnIcon
'
Me.BtnIcon.Location = New System.Drawing.Point(271, 27)
Me.BtnIcon.Name = "BtnIcon"
Me.BtnIcon.Size = New System.Drawing.Size(54, 23)
Me.BtnIcon.TabIndex = 3
Me.BtnIcon.Text = "修改"
Me.BtnIcon.UseVisualStyleBackColor = true
'
'LblIcon
'
Me.LblIcon.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.LblIcon.Location = New System.Drawing.Point(19, 27)
Me.LblIcon.Name = "LblIcon"
Me.LblIcon.Size = New System.Drawing.Size(246, 23)
Me.LblIcon.TabIndex = 2
Me.LblIcon.Text = "预览ABCDabcd1234"
Me.LblIcon.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'GroupBox5
'
Me.GroupBox5.Controls.Add(Me.BtnFont)
Me.GroupBox5.Controls.Add(Me.LblFont)
Me.GroupBox5.Location = New System.Drawing.Point(3, 55)
Me.GroupBox5.Name = "GroupBox5"
Me.GroupBox5.Size = New System.Drawing.Size(329, 67)
Me.GroupBox5.TabIndex = 1
Me.GroupBox5.TabStop = false
Me.GroupBox5.Text = "字体"
'
'BtnFont
'
Me.BtnFont.Location = New System.Drawing.Point(271, 29)
Me.BtnFont.Name = "BtnFont"
Me.BtnFont.Size = New System.Drawing.Size(54, 23)
Me.BtnFont.TabIndex = 1
Me.BtnFont.Text = "修改"
Me.BtnFont.UseVisualStyleBackColor = true
'
'LblFont
'
Me.LblFont.Location = New System.Drawing.Point(19, 29)
Me.LblFont.Name = "LblFont"
Me.LblFont.Size = New System.Drawing.Size(246, 23)
Me.LblFont.TabIndex = 0
Me.LblFont.Text = "预览ABCDabcd1234"
Me.LblFont.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'GroupBox4
'
Me.GroupBox4.Controls.Add(Me.LblPriview)
Me.GroupBox4.Dock = System.Windows.Forms.DockStyle.Bottom
Me.GroupBox4.Location = New System.Drawing.Point(3, 277)
Me.GroupBox4.Name = "GroupBox4"
Me.GroupBox4.Size = New System.Drawing.Size(325, 90)
Me.GroupBox4.TabIndex = 0
Me.GroupBox4.TabStop = false
Me.GroupBox4.Text = "预览"
'
'LblPriview
'
Me.LblPriview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.LblPriview.Location = New System.Drawing.Point(19, 34)
Me.LblPriview.Name = "LblPriview"
Me.LblPriview.Size = New System.Drawing.Size(306, 37)
Me.LblPriview.TabIndex = 3
Me.LblPriview.Text = "预览ABCDabcd1234"
Me.LblPriview.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'DlgStationPlanStyle
'
Me.AcceptButton = Me.OK_Button
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 12!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel_Button
Me.ClientSize = New System.Drawing.Size(585, 406)
Me.Controls.Add(Me.SplitContainer1)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = false
Me.MinimizeBox = false
Me.Name = "DlgStationPlanStyle"
Me.ShowInTaskbar = false
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "DlgStationPlanStyle"
Me.TableLayoutPanel1.ResumeLayout(false)
Me.SplitContainer1.Panel1.ResumeLayout(false)
Me.SplitContainer1.Panel2.ResumeLayout(false)
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer1.ResumeLayout(false)
Me.GroupBox3.ResumeLayout(false)
Me.GroupBox1.ResumeLayout(false)
Me.GroupBox2.ResumeLayout(false)
Me.GroupBox7.ResumeLayout(false)
Me.GroupBox6.ResumeLayout(false)
Me.GroupBox5.ResumeLayout(false)
Me.GroupBox4.ResumeLayout(false)
Me.ResumeLayout(false)
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents OK_Button As System.Windows.Forms.Button
Friend WithEvents Cancel_Button As System.Windows.Forms.Button
Friend WithEvents SplitContainer1 As Windows.Forms.SplitContainer
Friend WithEvents CboType As Windows.Forms.ComboBox
Friend WithEvents GroupBox1 As Windows.Forms.GroupBox
Friend WithEvents GroupBox3 As Windows.Forms.GroupBox
Friend WithEvents GroupBox2 As Windows.Forms.GroupBox
Friend WithEvents CheckedListBox1 As Windows.Forms.CheckedListBox
Friend WithEvents GroupBox4 As Windows.Forms.GroupBox
Friend WithEvents GroupBox7 As Windows.Forms.GroupBox
Friend WithEvents GroupBox6 As Windows.Forms.GroupBox
Friend WithEvents GroupBox5 As Windows.Forms.GroupBox
Friend WithEvents BtnBackground As Windows.Forms.Button
Friend WithEvents LblBackground As Windows.Forms.Label
Friend WithEvents BtnIcon As Windows.Forms.Button
Friend WithEvents LblIcon As Windows.Forms.Label
Friend WithEvents BtnFont As Windows.Forms.Button
Friend WithEvents LblFont As Windows.Forms.Label
Friend WithEvents LblPriview As Windows.Forms.Label
End Class
End Namespace

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,148 @@
Imports System.Drawing
Imports System.Windows.Forms
Namespace UTSModule.Station
Public Class DlgStationPlanStyle
Private Sub UpdateStyleByForm()
Dim nodeStyle As RowNodeStyle = RowNode.NodeStyles(RowType)
nodeStyle.NodeFont = LblPriview.Font
nodeStyle.NodeForeColor = LblPriview.ForeColor
nodeStyle.NodeImage = LblPriview.Image
nodeStyle.NodeBackColor = LblPriview.BackColor
nodeStyle.ShowRowType = CheckedListBox1.GetItemChecked(0)
nodeStyle.ShowLabel = CheckedListBox1.GetItemChecked(1)
nodeStyle.ShowDescription = CheckedListBox1.GetItemChecked(2)
nodeStyle.ShowAction = CheckedListBox1.GetItemChecked(3)
nodeStyle.ShowRecord = CheckedListBox1.GetItemChecked(4)
nodeStyle.ShowRetry = CheckedListBox1.GetItemChecked(5)
nodeStyle.ShowRetryInterval = CheckedListBox1.GetItemChecked(6)
nodeStyle.ShowErrorCode = CheckedListBox1.GetItemChecked(7)
nodeStyle.ShowErrorMessage = CheckedListBox1.GetItemChecked(8)
nodeStyle.ShowCommand = CheckedListBox1.GetItemChecked(9)
nodeStyle.ShowParameter = CheckedListBox1.GetItemChecked(10)
End Sub
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
UpdateStyleByForm()
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
Property RowType() As RowNode.RowTypeEnum
Private Sub BtnFont_Click(sender As Object, e As EventArgs) Handles BtnFont.Click
Using dlgFont As New FontDialog()
dlgFont.ShowColor = True
dlgFont.Color = LblPriview.ForeColor
dlgFont.Font = LblPriview.Font
If dlgFont.ShowDialog() = DialogResult.OK Then
LblFont.ForeColor = dlgFont.Color
LblFont.Font = dlgFont.Font
LblPriview.ForeColor = dlgFont.Color
LblPriview.Font = dlgFont.Font
End If
End Using
End Sub
Private Sub BtnIcon_Click(sender As Object, e As EventArgs) Handles BtnIcon.Click
Using dlgFile As New OpenFileDialog
dlgFile.Title = $"选择图像"
dlgFile.Multiselect = False
dlgFile.Filter = $"(*.jpg,*.png,*.jpeg,*.bmp,*.gif)|*.jgp;*.png;*.jpeg;*.bmp;*.gif|All files(*.*)|*.*"
If dlgFile.ShowDialog() = DialogResult.OK Then
Try
LblIcon.Image = New Bitmap(dlgFile.FileName)
LblPriview.Image = New Bitmap(dlgFile.FileName)
Catch ex As Exception
MsgBox($"加载图像错误,{ex.Message}")
End Try
End If
End Using
End Sub
Private Sub BtnBackground_Click(sender As Object, e As EventArgs) Handles BtnBackground.Click
Using dlgColor As New ColorDialog
dlgColor.Color = LblBackground.BackColor
If dlgColor.ShowDialog() = DialogResult.OK Then
LblBackground.BackColor = dlgColor.Color
LblPriview.BackColor = dlgColor.Color
End If
End Using
End Sub
Private Sub UpdateFormByType(type As RowNode.RowTypeEnum)
Dim nodeStyle As RowNodeStyle = RowNode.NodeStyles(type)
LblFont.Font = nodeStyle.NodeFont
LblFont.ForeColor = nodeStyle.NodeForeColor
LblIcon.Image = nodeStyle.NodeImage
LblBackground.BackColor = nodeStyle.NodeBackColor
LblPriview.Font = nodeStyle.NodeFont
LblPriview.ForeColor = nodeStyle.NodeForeColor
LblPriview.Image = nodeStyle.NodeImage
LblPriview.BackColor = nodeStyle.NodeBackColor
CheckedListBox1.Items.Clear()
CheckedListBox1.Items.Add("ShowRowType", nodeStyle.ShowRowType)
CheckedListBox1.Items.Add("ShowLabel", nodeStyle.ShowLabel)
CheckedListBox1.Items.Add("ShowDescription", nodeStyle.ShowDescription)
CheckedListBox1.Items.Add("ShowAction", nodeStyle.ShowAction)
CheckedListBox1.Items.Add("ShowRecord", nodeStyle.ShowRecord)
CheckedListBox1.Items.Add("ShowRetry", nodeStyle.ShowRetry)
CheckedListBox1.Items.Add("ShowRetryInterval", nodeStyle.ShowRetryInterval)
CheckedListBox1.Items.Add("ShowErrorCode", nodeStyle.ShowErrorCode)
CheckedListBox1.Items.Add("ShowErrorMessage", nodeStyle.ShowErrorMessage)
CheckedListBox1.Items.Add("ShowCommand", nodeStyle.ShowCommand)
CheckedListBox1.Items.Add("ShowParameter", nodeStyle.ShowParameter)
End Sub
Private Sub InitForm()
RowType = RowNode.RowTypeEnum.Flow
CboType.Items.Clear()
CboType.Items.Add(RowNode.RowTypeEnum.FixedModule.ToString())
CboType.Items.Add(RowNode.RowTypeEnum.Module.ToString())
CboType.Items.Add(RowNode.RowTypeEnum.Control.ToString())
CboType.Items.Add(RowNode.RowTypeEnum.Flow.ToString())
CboType.SelectedIndex = 0
UpdateFormByType(RowType)
End Sub
Private Sub DlgStationPlanStyle_Load(sender As Object, e As EventArgs) Handles Me.Load
InitForm()
End Sub
Private Sub CboType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CboType.SelectedIndexChanged
RowType = CType([Enum].Parse(GetType(RowNode.RowTypeEnum), CboType.SelectedItem.ToString()), RowNode.RowTypeEnum)
UpdateFormByType(RowType)
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,428 @@
Imports System.Windows.Forms
Namespace UTSModule.Station
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FrmStationDesign
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FrmStationDesign))
Me.ToolStrip1 = New System.Windows.Forms.ToolStrip()
Me.TsBtnReleaseStation = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnAddResourceFile = New System.Windows.Forms.ToolStripButton()
Me.TsBtnAddResourceDir = New System.Windows.Forms.ToolStripButton()
Me.TsBtnSearchResource = New System.Windows.Forms.ToolStripButton()
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
Me.GroupBox4 = New System.Windows.Forms.GroupBox()
Me.TxtTestStation = New System.Windows.Forms.TextBox()
Me.TxtProjectName = New System.Windows.Forms.TextBox()
Me.NudStationVersion = New System.Windows.Forms.NumericUpDown()
Me.ChkAutoAugment = New System.Windows.Forms.CheckBox()
Me.Label7 = New System.Windows.Forms.Label()
Me.Label3 = New System.Windows.Forms.Label()
Me.Label4 = New System.Windows.Forms.Label()
Me.TxtEditPwd = New System.Windows.Forms.TextBox()
Me.DtpValidDate = New System.Windows.Forms.DateTimePicker()
Me.Label5 = New System.Windows.Forms.Label()
Me.GroupBox3 = New System.Windows.Forms.GroupBox()
Me.PicStation = New System.Windows.Forms.PictureBox()
Me.SplitContainer2 = New System.Windows.Forms.SplitContainer()
Me.GroupBox2 = New System.Windows.Forms.GroupBox()
Me.RtxCurrentImprint = New System.Windows.Forms.RichTextBox()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.RtxHistoryImprint = New System.Windows.Forms.RichTextBox()
Me.dlgOpenFile = New System.Windows.Forms.OpenFileDialog()
Me.dlgOpenFolder = New System.Windows.Forms.FolderBrowserDialog()
Me.Label1 = New System.Windows.Forms.Label()
Me.TxtReleasePwd = New System.Windows.Forms.TextBox()
Me.ToolStrip1.SuspendLayout()
CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer1.Panel1.SuspendLayout()
Me.SplitContainer1.Panel2.SuspendLayout()
Me.SplitContainer1.SuspendLayout()
Me.GroupBox4.SuspendLayout()
CType(Me.NudStationVersion, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GroupBox3.SuspendLayout()
CType(Me.PicStation, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainer2, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer2.Panel1.SuspendLayout()
Me.SplitContainer2.Panel2.SuspendLayout()
Me.SplitContainer2.SuspendLayout()
Me.GroupBox2.SuspendLayout()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
'
'ToolStrip1
'
Me.ToolStrip1.BackColor = System.Drawing.SystemColors.Control
Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TsBtnReleaseStation, Me.ToolStripSeparator1, Me.TsBtnAddResourceFile, Me.TsBtnAddResourceDir, Me.TsBtnSearchResource})
Me.ToolStrip1.Location = New System.Drawing.Point(0, 0)
Me.ToolStrip1.Name = "ToolStrip1"
Me.ToolStrip1.Size = New System.Drawing.Size(800, 25)
Me.ToolStrip1.TabIndex = 6
Me.ToolStrip1.Text = "ToolStrip1"
'
'TsBtnReleaseStation
'
Me.TsBtnReleaseStation.BackColor = System.Drawing.SystemColors.Control
Me.TsBtnReleaseStation.Image = CType(resources.GetObject("TsBtnReleaseStation.Image"), System.Drawing.Image)
Me.TsBtnReleaseStation.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None
Me.TsBtnReleaseStation.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnReleaseStation.Name = "TsBtnReleaseStation"
Me.TsBtnReleaseStation.Size = New System.Drawing.Size(76, 22)
Me.TsBtnReleaseStation.Text = "发布站包"
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25)
'
'TsBtnAddResourceFile
'
Me.TsBtnAddResourceFile.BackColor = System.Drawing.SystemColors.Control
Me.TsBtnAddResourceFile.Image = CType(resources.GetObject("TsBtnAddResourceFile.Image"), System.Drawing.Image)
Me.TsBtnAddResourceFile.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None
Me.TsBtnAddResourceFile.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnAddResourceFile.Name = "TsBtnAddResourceFile"
Me.TsBtnAddResourceFile.Size = New System.Drawing.Size(100, 22)
Me.TsBtnAddResourceFile.Text = "添加资源文件"
'
'TsBtnAddResourceDir
'
Me.TsBtnAddResourceDir.BackColor = System.Drawing.SystemColors.Control
Me.TsBtnAddResourceDir.Image = CType(resources.GetObject("TsBtnAddResourceDir.Image"), System.Drawing.Image)
Me.TsBtnAddResourceDir.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None
Me.TsBtnAddResourceDir.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnAddResourceDir.Name = "TsBtnAddResourceDir"
Me.TsBtnAddResourceDir.Size = New System.Drawing.Size(112, 22)
Me.TsBtnAddResourceDir.Text = "添加资源文件夹"
'
'TsBtnSearchResource
'
Me.TsBtnSearchResource.BackColor = System.Drawing.SystemColors.Control
Me.TsBtnSearchResource.Image = CType(resources.GetObject("TsBtnSearchResource.Image"), System.Drawing.Image)
Me.TsBtnSearchResource.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None
Me.TsBtnSearchResource.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnSearchResource.Name = "TsBtnSearchResource"
Me.TsBtnSearchResource.Size = New System.Drawing.Size(112, 22)
Me.TsBtnSearchResource.Text = "查看资源文件夹"
'
'SplitContainer1
'
Me.SplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainer1.Location = New System.Drawing.Point(0, 25)
Me.SplitContainer1.Name = "SplitContainer1"
'
'SplitContainer1.Panel1
'
Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox4)
Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox3)
'
'SplitContainer1.Panel2
'
Me.SplitContainer1.Panel2.Controls.Add(Me.SplitContainer2)
Me.SplitContainer1.Size = New System.Drawing.Size(800, 425)
Me.SplitContainer1.SplitterDistance = 475
Me.SplitContainer1.TabIndex = 7
'
'GroupBox4
'
Me.GroupBox4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.GroupBox4.Controls.Add(Me.Label1)
Me.GroupBox4.Controls.Add(Me.TxtReleasePwd)
Me.GroupBox4.Controls.Add(Me.TxtTestStation)
Me.GroupBox4.Controls.Add(Me.TxtProjectName)
Me.GroupBox4.Controls.Add(Me.NudStationVersion)
Me.GroupBox4.Controls.Add(Me.ChkAutoAugment)
Me.GroupBox4.Controls.Add(Me.Label7)
Me.GroupBox4.Controls.Add(Me.Label3)
Me.GroupBox4.Controls.Add(Me.Label4)
Me.GroupBox4.Controls.Add(Me.TxtEditPwd)
Me.GroupBox4.Controls.Add(Me.DtpValidDate)
Me.GroupBox4.Controls.Add(Me.Label5)
Me.GroupBox4.Location = New System.Drawing.Point(3, 0)
Me.GroupBox4.Name = "GroupBox4"
Me.GroupBox4.Size = New System.Drawing.Size(469, 124)
Me.GroupBox4.TabIndex = 25
Me.GroupBox4.TabStop = False
Me.GroupBox4.Text = "基本信息"
'
'TxtTestStation
'
Me.TxtTestStation.Location = New System.Drawing.Point(296, 28)
Me.TxtTestStation.Name = "TxtTestStation"
Me.TxtTestStation.ReadOnly = True
Me.TxtTestStation.Size = New System.Drawing.Size(137, 21)
Me.TxtTestStation.TabIndex = 1
'
'TxtProjectName
'
Me.TxtProjectName.Location = New System.Drawing.Point(71, 28)
Me.TxtProjectName.Name = "TxtProjectName"
Me.TxtProjectName.ReadOnly = True
Me.TxtProjectName.Size = New System.Drawing.Size(136, 21)
Me.TxtProjectName.TabIndex = 1
'
'NudStationVersion
'
Me.NudStationVersion.Enabled = False
Me.NudStationVersion.Location = New System.Drawing.Point(296, 82)
Me.NudStationVersion.Maximum = New Decimal(New Integer() {1024, 0, 0, 0})
Me.NudStationVersion.Name = "NudStationVersion"
Me.NudStationVersion.Size = New System.Drawing.Size(137, 21)
Me.NudStationVersion.TabIndex = 25
'
'ChkAutoAugment
'
Me.ChkAutoAugment.AutoSize = True
Me.ChkAutoAugment.Checked = True
Me.ChkAutoAugment.CheckState = System.Windows.Forms.CheckState.Checked
Me.ChkAutoAugment.Location = New System.Drawing.Point(218, 85)
Me.ChkAutoAugment.Name = "ChkAutoAugment"
Me.ChkAutoAugment.Size = New System.Drawing.Size(72, 16)
Me.ChkAutoAugment.TabIndex = 24
Me.ChkAutoAugment.Text = "版本递增"
Me.ChkAutoAugment.UseVisualStyleBackColor = True
'
'Label7
'
Me.Label7.AutoSize = True
Me.Label7.Location = New System.Drawing.Point(231, 33)
Me.Label7.Name = "Label7"
Me.Label7.Size = New System.Drawing.Size(59, 12)
Me.Label7.TabIndex = 23
Me.Label7.Text = "测试站名:"
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(6, 31)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(59, 12)
Me.Label3.TabIndex = 10
Me.Label3.Text = "测试项目:"
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Location = New System.Drawing.Point(6, 58)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(59, 12)
Me.Label4.TabIndex = 16
Me.Label4.Text = "编辑密码:"
'
'TxtEditPwd
'
Me.TxtEditPwd.Location = New System.Drawing.Point(71, 55)
Me.TxtEditPwd.Name = "TxtEditPwd"
Me.TxtEditPwd.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
Me.TxtEditPwd.Size = New System.Drawing.Size(136, 21)
Me.TxtEditPwd.TabIndex = 17
'
'DtpValidDate
'
Me.DtpValidDate.CustomFormat = "yyyy-MM-dd"
Me.DtpValidDate.Format = System.Windows.Forms.DateTimePickerFormat.Custom
Me.DtpValidDate.Location = New System.Drawing.Point(296, 55)
Me.DtpValidDate.MinDate = New Date(2021, 1, 1, 0, 0, 0, 0)
Me.DtpValidDate.Name = "DtpValidDate"
Me.DtpValidDate.Size = New System.Drawing.Size(137, 21)
Me.DtpValidDate.TabIndex = 19
'
'Label5
'
Me.Label5.AutoSize = True
Me.Label5.Location = New System.Drawing.Point(231, 60)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(59, 12)
Me.Label5.TabIndex = 18
Me.Label5.Text = "有效日期:"
'
'GroupBox3
'
Me.GroupBox3.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.GroupBox3.Controls.Add(Me.PicStation)
Me.GroupBox3.Location = New System.Drawing.Point(3, 129)
Me.GroupBox3.Name = "GroupBox3"
Me.GroupBox3.Size = New System.Drawing.Size(469, 297)
Me.GroupBox3.TabIndex = 24
Me.GroupBox3.TabStop = False
Me.GroupBox3.Text = "图像"
'
'PicStation
'
Me.PicStation.Dock = System.Windows.Forms.DockStyle.Fill
Me.PicStation.Location = New System.Drawing.Point(3, 17)
Me.PicStation.Name = "PicStation"
Me.PicStation.Size = New System.Drawing.Size(463, 277)
Me.PicStation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.PicStation.TabIndex = 0
Me.PicStation.TabStop = False
'
'SplitContainer2
'
Me.SplitContainer2.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1
Me.SplitContainer2.Location = New System.Drawing.Point(0, 0)
Me.SplitContainer2.Name = "SplitContainer2"
Me.SplitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal
'
'SplitContainer2.Panel1
'
Me.SplitContainer2.Panel1.Controls.Add(Me.GroupBox2)
'
'SplitContainer2.Panel2
'
Me.SplitContainer2.Panel2.Controls.Add(Me.GroupBox1)
Me.SplitContainer2.Size = New System.Drawing.Size(321, 425)
Me.SplitContainer2.SplitterDistance = 124
Me.SplitContainer2.TabIndex = 0
'
'GroupBox2
'
Me.GroupBox2.Controls.Add(Me.RtxCurrentImprint)
Me.GroupBox2.Dock = System.Windows.Forms.DockStyle.Fill
Me.GroupBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.GroupBox2.Location = New System.Drawing.Point(0, 0)
Me.GroupBox2.Name = "GroupBox2"
Me.GroupBox2.Size = New System.Drawing.Size(321, 124)
Me.GroupBox2.TabIndex = 1
Me.GroupBox2.TabStop = False
Me.GroupBox2.Text = "当前说明"
'
'RtxCurrentImprint
'
Me.RtxCurrentImprint.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxCurrentImprint.Dock = System.Windows.Forms.DockStyle.Fill
Me.RtxCurrentImprint.Location = New System.Drawing.Point(3, 17)
Me.RtxCurrentImprint.Name = "RtxCurrentImprint"
Me.RtxCurrentImprint.Size = New System.Drawing.Size(315, 104)
Me.RtxCurrentImprint.TabIndex = 0
Me.RtxCurrentImprint.Text = ""
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.RtxHistoryImprint)
Me.GroupBox1.Dock = System.Windows.Forms.DockStyle.Fill
Me.GroupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.GroupBox1.Location = New System.Drawing.Point(0, 0)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(321, 297)
Me.GroupBox1.TabIndex = 0
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "历史说明"
'
'RtxHistoryImprint
'
Me.RtxHistoryImprint.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxHistoryImprint.Dock = System.Windows.Forms.DockStyle.Fill
Me.RtxHistoryImprint.Location = New System.Drawing.Point(3, 17)
Me.RtxHistoryImprint.Name = "RtxHistoryImprint"
Me.RtxHistoryImprint.Size = New System.Drawing.Size(315, 277)
Me.RtxHistoryImprint.TabIndex = 0
Me.RtxHistoryImprint.Text = ""
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(6, 86)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(59, 12)
Me.Label1.TabIndex = 26
Me.Label1.Text = "发布密码:"
'
'TxtReleasePwd
'
Me.TxtReleasePwd.Location = New System.Drawing.Point(71, 83)
Me.TxtReleasePwd.Name = "TxtReleasePwd"
Me.TxtReleasePwd.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
Me.TxtReleasePwd.Size = New System.Drawing.Size(136, 21)
Me.TxtReleasePwd.TabIndex = 27
'
'FrmStationDesign
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.SplitContainer1)
Me.Controls.Add(Me.ToolStrip1)
Me.Enabled = False
Me.Name = "FrmStationDesign"
Me.Text = "FrmStationDesign"
Me.ToolStrip1.ResumeLayout(false)
Me.ToolStrip1.PerformLayout
Me.SplitContainer1.Panel1.ResumeLayout(false)
Me.SplitContainer1.Panel2.ResumeLayout(false)
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer1.ResumeLayout(false)
Me.GroupBox4.ResumeLayout(false)
Me.GroupBox4.PerformLayout
CType(Me.NudStationVersion,System.ComponentModel.ISupportInitialize).EndInit
Me.GroupBox3.ResumeLayout(false)
CType(Me.PicStation,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer2.Panel1.ResumeLayout(false)
Me.SplitContainer2.Panel2.ResumeLayout(false)
CType(Me.SplitContainer2,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer2.ResumeLayout(false)
Me.GroupBox2.ResumeLayout(false)
Me.GroupBox1.ResumeLayout(false)
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents ToolStrip1 As ToolStrip
Friend WithEvents TsBtnReleaseStation As ToolStripButton
Friend WithEvents SplitContainer1 As SplitContainer
Friend WithEvents GroupBox4 As GroupBox
Friend WithEvents TxtTestStation As TextBox
Friend WithEvents TxtProjectName As TextBox
Friend WithEvents NudStationVersion As NumericUpDown
Friend WithEvents ChkAutoAugment As CheckBox
Friend WithEvents Label7 As Label
Friend WithEvents Label3 As Label
Friend WithEvents Label4 As Label
Friend WithEvents TxtEditPwd As TextBox
Friend WithEvents DtpValidDate As DateTimePicker
Friend WithEvents Label5 As Label
Friend WithEvents GroupBox3 As GroupBox
Friend WithEvents PicStation As PictureBox
Friend WithEvents SplitContainer2 As SplitContainer
Friend WithEvents GroupBox2 As GroupBox
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents RtxCurrentImprint As RichTextBox
Friend WithEvents RtxHistoryImprint As RichTextBox
Friend WithEvents ToolStripSeparator1 As ToolStripSeparator
Friend WithEvents TsBtnAddResourceFile As ToolStripButton
Friend WithEvents dlgOpenFile As OpenFileDialog
Friend WithEvents TsBtnSearchResource As ToolStripButton
Friend WithEvents TsBtnAddResourceDir As ToolStripButton
Friend WithEvents dlgOpenFolder As FolderBrowserDialog
Friend WithEvents Label1 As Label
Friend WithEvents TxtReleasePwd As TextBox
End Class
End Namespace

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ToolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="TsBtnReleaseStation.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEOSURBVDhPtdKxS0JBAMfxc7CgybGhP6MpiGh1FQchiFp0
CpdoK4RykkajPyCoJp1CkGzIP0GnoCWoRVKHCJT0+zvvQh5PH4J+4QN373nnPd4zy24TJ7jFDbLYQmQx
nGGAb9TxjB5+oHv6zcxK+EUe67rgiuMUunelC2Ht4Q8ZOwvvACPs2FmgOzQmw7k10UYZKfw/0hd09Kh2
8YAXDPGENZg+DjUISSfTgmDb6OJcEx2rqEGgKvTconGwS7xpcI13bGjiqkALP/HhxjVMdwyd3n48HRQ0
oRz8vz46/jT6sHz3eJ0MjdmHXqdKQJsov4HSYt1TF9CrT9rZnKY38OnjauHIziIK22Ch0s6qMmYMstY8
SYKCRL0AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnAddResourceFile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACqSURBVDhPvZJLCsIwGAZzLBU8hi48g+Bj5x0sgjdw67U8
gu4EdT6aH9I8240DQwNNJqGNi1jgKnKDW2xywW/FI1Z54a4fDlijAh+sRjRJk2MssPfPE2ZpBfQ9bqiT
XDGhFFjiG/XeVCShFIixEyXkAvYrQyYF7t6QUQHtqoUPr8Z2kv8EDC2UIZMC2tV2NooBXWXdthYHfPbD
IR2qPMYzZpmjHbvkDD3O/QAe6U3bzyBpTQAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnAddResourceDir.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADCSURBVDhPrZPBCcJAEEUXtA715MEm1BpET1bkwRL0KNiE
6EGwBgvRm76/7sqyTCYBffAgGTI/k2QS/sUc93gsXGMnRvjEM+bmU6pNsJUFvrAXzz708YZ3LKfKatoZ
RlaogJoxHtAK0LSacIiNAR6aVj2a3g3Q+5EW6lGvG6BHkBZugO66xGtSx/UkbsAGVStVrUS1xoBMfusW
nQK2SYtvgLVIbWjR1BM/o5ZBS3HBclk8de0DBxiZYv0zee5QPb8SwhtuoEpL4I8v/QAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="TsBtnSearchResource.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD2SURBVDhPzdLNSgJRGIfxIXJT+27AoEV5RUWIbaK6gkJw
EUQQaF6NuHGvkHoV1qLoA2xXPc/Me0JFhAiiP/xg3nPmfMyck/3LbOECfTzhMZ7PYd/KHOIZE7RQC7fR
Zt8+lqaOD9xgw4aFbMI+33GHc3HWT5zlVZEKXFl7NkRO4LsHeUXKeMF1XhVx8DuGGMXz7CRXeMW2RQe+
VLKIuKpta2EM/0nKOu7QtehhABtTfjTBDt5waRFxu27bgZpiFyl+7vcnmCr8Mcd5VcRJXFWzg08x9xNT
GkjH6JEtxrYmlh5jSrpI92jjKPj8gJUXKeVXV/mvk2Vf1ZlCFgRcwokAAAAASUVORK5CYII=
</value>
</data>
<metadata name="dlgOpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>129, 17</value>
</metadata>
<metadata name="dlgOpenFolder.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>252, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,297 @@
Imports System.IO
Imports System.Windows.Forms
Imports UTS_Core.DebugLog
Namespace UTSModule.Station
Public Class FrmStationDesign
Implements IProcessStation
Implements IProductionLine
Private _utsApp As UtsAppForm
Private _isAutoAugment As Boolean = True
Public Property StationPacket() As StationPacket
Public Event StationRelease(station As ProcessStation) '项目发布事件
Public Sub ShowForm(parentControl As Control)
FormBorderStyle = FormBorderStyle.None
TopLevel = False
Dock = DockStyle.Fill
Parent = parentControl
Enabled = StationPacket IsNot Nothing
Show()
End Sub
Public Sub ShowForm(parentControl As Control, packet As StationPacket)
FormBorderStyle = FormBorderStyle.None
TopLevel = False
Dock = DockStyle.Fill
Parent = parentControl
UpdateStationPacket(packet)
Enabled = StationPacket IsNot Nothing
Show()
End Sub
''' <summary>
''' 产线变化
''' </summary>
Public Sub ProductionLineChanged() Implements IProductionLine.ProductionLineChanged
'Todo:产线变化代码
ApplicationLog.WriteInfoLog($"发布页面生产线变更中。")
ApplicationLog.WriteInfoLog($"发布页面生产线变更完成。")
End Sub
Public Sub Station_Changed() Implements IProcessStation.StationChanged
ApplicationLog.WriteInfoLog($"发布页面站位变更中PN{_utsApp.ProcessStation.ParentProject.Name} - SN:{_utsApp.ProcessStation.Name} - TP:{_utsApp.ProcessStation.Packet.Name}!")
UpdateStationPacket(_utsApp.ProcessStation.Packet)
ApplicationLog.WriteInfoLog($"发布页面站位变更完成。")
End Sub
''' <summary>修改窗体标题</summary>
Private Sub ShowFormTitle()
Text = $"{My.Application.Info.ProductName} StationDesign"
End Sub
Private Sub ShowFormTitle(packetName As String)
Text = $"{My.Application.Info.ProductName} StationDesign -- {packetName}"
End Sub
Private Sub UpdateStationPacket(packet As StationPacket)
StationPacket = packet
Enabled = StationPacket IsNot Nothing
If StationPacket IsNot Nothing Then
ShowFormTitle(StationPacket.Name)
LoadProjectInitForm()
End If
End Sub
Private Sub LoadProjectInitForm()
TxtProjectName.Text = StationPacket.ParentProcessStation.ParentProject.Name
TxtTestStation.Text = StationPacket.ParentProcessStation.Name
TxtEditPwd.Text = StationPacket.EditPwd
TxtReleasePwd.Text = StationPacket.ReleasePwd
NudStationVersion.Text = CType(StationPacket.StationVersion, String)
PicStation.Image = StationPacket.StationImage
RtxHistoryImprint.Text = StationPacket.PacketImprintsToString(StationPacket.HistoryImprints)
RtxCurrentImprint.Text = StationPacket.CurrentImprint.ToString()
If StationPacket.ValidDate >= DtpValidDate.MaxDate Then
DtpValidDate.Value = Now.AddMonths(6) '默认有效期六个月
ElseIf StationPacket.ValidDate <= DtpValidDate.MinDate Then
DtpValidDate.Value = Now.AddMonths(6) '默认有效期六个月
Else
DtpValidDate.Value = StationPacket.ValidDate
End If
End Sub
Private Sub FrmStationDesign_Load(sender As Object, e As EventArgs) Handles Me.Load
ApplicationLog.WriteInfoLog($"发布页面加载中。")
'初始化UTS窗体信息,失败则关闭窗体
If InitializeUtsApp() = False Then Return
'初始化窗体页面
InitializeForm()
ApplicationLog.WriteInfoLog($"发布页面加载完成。")
End Sub
Private Function InitializeUtsApp() As Boolean
_utsApp = UtsAppForm.CreateSingleton()
_utsApp.AddStatisticsObserver(Me)
Try
If _utsApp.IsInitialized = False Then
_utsApp.Initialize() 'Todo:可根据需要限定可选站位
End If
Catch ex As Exception
ApplicationLog.WriteErrorLog($"初始化窗体失败,原因:{ex.Message}!")
MsgBox($"初始化窗体失败,原因:{ex.Message}")
Close()
Return False
End Try
Return True
End Function
Private Sub InitializeForm()
ShowFormTitle()
End Sub
Private Sub PicStation_DoubleClick(sender As Object, e As EventArgs) Handles PicStation.DoubleClick
dlgOpenFile.Multiselect = False
dlgOpenFile.Filter = $"设备图像 (*.bmp;*.gif;*.jpg;*.png)|*.bmp;*.gif;*.jpg;*.png"
If dlgOpenFile.ShowDialog <> DialogResult.OK Then Return
ApplicationLog.WriteInfoLog($"发布页面切换产品图像中。")
Try
Dim imagePath As String = dlgOpenFile.FileName
PicStation.Image = ImageProcessor.ImageProcessor.GetBitmapImage(imagePath)
'更新图像预览图
If String.IsNullOrEmpty(StationPacket.ImageFileName) Then '若图像路径不存在,则更新图像路径
Dim imgSavePath As String = $"{UtsPath.GetStationPacketResourceDirPath(StationPacket.Name)}\{StationPacket.ParentProcessStation.StationID}.jpg"
PicStation.Image.Save(imgSavePath)
StationPacket.ImageFileName = $"{StationPacket.ParentProcessStation.StationID}.jpg" '更新站图像路径
Else
Dim imgSavePath As String = $"{UtsPath.GetStationPacketResourceDirPath(StationPacket.Name)}\{StationPacket.ImageFileName}"
PicStation.Image.Save(imgSavePath)
End If
ApplicationLog.WriteInfoLog($"发布页面切换产品图像完成。")
Catch ex As Exception
ApplicationLog.WriteErrorLog($"设置项目图像失败,原因:{ex.Message}")
MsgBox($"设置项目图像失败,{ex.Message}")
End Try
End Sub
Private Sub UpdateStationPacket()
StationPacket.AppVersion = New Version(Application.ProductVersion)
StationPacket.ModifiedTime = Now
StationPacket.EditPwd = TxtEditPwd.Text
StationPacket.ReleasePwd = TxtReleasePwd.Text
StationPacket.ValidDate = DtpValidDate.Value
StationPacket.CurrentImprint = New StationPacketImprint(RtxCurrentImprint.Text)
If _isAutoAugment Then
StationPacket.StationVersion += 1
Else
StationPacket.StationVersion = CInt(NudStationVersion.Value)
End If
End Sub
Private Sub AfterReleasePacketSuccess()
RtxCurrentImprint.Text = StationPacket.CurrentImprint.ToString()
RtxHistoryImprint.Text = StationPacket.PacketImprintsToString(StationPacket.HistoryImprints)
NudStationVersion.Value = StationPacket.StationVersion
ShowFormTitle(StationPacket.Name)
End Sub
Private Sub AfterReleasePacketFail()
RtxCurrentImprint.Text = StationPacket.CurrentImprint.ToString()
RtxHistoryImprint.Text = StationPacket.PacketImprintsToString(StationPacket.HistoryImprints)
StationPacket.StationVersion = CInt(NudStationVersion.Value)
ShowFormTitle(StationPacket.Name)
End Sub
Private Sub TsBtnReleaseStation_Click(sender As Object, e As EventArgs) Handles TsBtnReleaseStation.Click
Try
If String.IsNullOrEmpty(TxtEditPwd.Text) Then
MsgBox("请输入编辑密码...")
Return
End If
If String.IsNullOrEmpty(TxtReleasePwd.Text) Then
MsgBox("请输入发布密码...")
Return
End If
If String.IsNullOrEmpty(RtxCurrentImprint.Text) Then
MsgBox("请输入版本说明...")
Return
End If
ApplicationLog.WriteInfoLog($"项目站包发布准备中。")
UpdateStationPacket()
StationPacket.ReleasePacket()
AfterReleasePacketSuccess()
RaiseEvent StationRelease(StationPacket.ParentProcessStation)
ApplicationLog.WriteInfoLog($"项目站包 {StationPacket.FileName} 发布成功!")
MsgBox($"项目站包 {StationPacket.FileName} 发布成功!")
Catch ex As Exception
ApplicationLog.WriteErrorLog($"项目站包发布失败,原因:{ex.Message}")
MsgBox($"项目站包发布失败,原因:{ex.Message}")
AfterReleasePacketFail()
End Try
End Sub
Private Sub ChkAutoAugment_CheckedChanged(sender As Object, e As EventArgs) Handles ChkAutoAugment.CheckedChanged
_isAutoAugment = ChkAutoAugment.Checked
NudStationVersion.Enabled = Not _isAutoAugment
End Sub
Private Sub TsBtnAddResource_Click(sender As Object, e As EventArgs) Handles TsBtnAddResourceFile.Click
dlgOpenFile.Multiselect = True
dlgOpenFile.Filter = $"资源文件 (*.*)|*.*"
If dlgOpenFile.ShowDialog <> DialogResult.OK Then Return
ApplicationLog.WriteInfoLog($"项目站包资源文件添加中。")
Try
For Each fileName As String In dlgOpenFile.FileNames
ApplicationLog.WriteInfoLog($"正在添加{fileName}")
FileIO.FileSystem.CopyFile(fileName, $"{UtsPath.StationPacketResourceDirPath}\{Path.GetFileName(fileName)}")
Next
ApplicationLog.WriteInfoLog($"项目站包资源文件添加完成。")
MsgBox($"项目站包资源文件添加完成。")
Catch ex As Exception
ApplicationLog.WriteErrorLog($"项目站包资源文件添加失败,原因:{ex.Message}")
MsgBox($"项目站包资源文件添加失败,原因:{ex.Message}")
End Try
End Sub
Private Sub TsBtnAddResourceDir_Click(sender As Object, e As EventArgs) Handles TsBtnAddResourceDir.Click
If dlgOpenFolder.ShowDialog() <> DialogResult.OK Then Return
ApplicationLog.WriteInfoLog($"项目站包资源文件夹添加中,目标文件夹:{dlgOpenFolder.SelectedPath}。")
Try
CopyDirectory(New DirectoryInfo(dlgOpenFolder.SelectedPath), New DirectoryInfo(UtsPath.StationPacketResourceDirPath))
ApplicationLog.WriteInfoLog($"项目站包资源文件夹添加完成。")
MsgBox($"项目站包资源文件夹添加完成")
Catch ex As Exception
ApplicationLog.WriteErrorLog($"项目站包资源文件添加失败,原因:{ex.Message}")
MsgBox($"项目站包资源文件添加失败,原因:{ex.Message}")
End Try
End Sub
Public Sub CopyDirectory(directorySrc As DirectoryInfo, directoryDes As DirectoryInfo)
Dim strDirectoryDesPath As String = $"{directoryDes.FullName}\{directorySrc.Name}"
If Directory.Exists(strDirectoryDesPath) = False Then
Directory.CreateDirectory(strDirectoryDesPath)
End If
For Each f As FileInfo In directorySrc.GetFiles()
File.Copy(f.FullName, $"{strDirectoryDesPath}\{ f.Name}", True)
Next
' 递归调用自身
For Each dirSrc As DirectoryInfo In directorySrc.GetDirectories()
CopyDirectory(dirSrc, New DirectoryInfo(strDirectoryDesPath))
Next
End Sub
Private Sub TsBtnSearchResource_Click(sender As Object, e As EventArgs) Handles TsBtnSearchResource.Click
'定位到/Resource文件夹内
Process.Start("Explorer.exe", $"{UtsPath.GetStationPacketResourceDirPath(StationPacket.Name)}")
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,885 @@
Imports System.Windows.Forms
Namespace UTSModule.Station
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class FrmStationPlan
Inherits System.Windows.Forms.Form
'Form 重写 Dispose以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FrmStationPlan))
Me.ToolStrip1 = New System.Windows.Forms.ToolStrip()
Me.TsBtnOpen = New System.Windows.Forms.ToolStripButton()
Me.TsBtnSave = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnLoad = New System.Windows.Forms.ToolStripButton()
Me.TsBtnSaveAs = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnBackward = New System.Windows.Forms.ToolStripButton()
Me.TsBtnForward = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnUndo = New System.Windows.Forms.ToolStripButton()
Me.TsBtnRedo = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator13 = New System.Windows.Forms.ToolStripSeparator()
Me.tsBtnInsertRow = New System.Windows.Forms.ToolStripButton()
Me.tsBtnRemoveRow = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnMoveUp = New System.Windows.Forms.ToolStripButton()
Me.TsBtnMoveDown = New System.Windows.Forms.ToolStripButton()
Me.TsBtnMoveLeft = New System.Windows.Forms.ToolStripButton()
Me.TsBtnMoveRight = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnDebugMode = New System.Windows.Forms.ToolStripButton()
Me.TsBtnDebugStart = New System.Windows.Forms.ToolStripButton()
Me.TsBtnFailMode = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator()
Me.tslBtn_ActionOnly = New System.Windows.Forms.ToolStripButton()
Me.TsBtn_Record = New System.Windows.Forms.ToolStripButton()
Me.TsBtn_ExpandNode = New System.Windows.Forms.ToolStripButton()
Me.StuMain = New System.Windows.Forms.StatusStrip()
Me.TssLblTestStatus = New System.Windows.Forms.ToolStripStatusLabel()
Me.TssLblTestTime = New System.Windows.Forms.ToolStripStatusLabel()
Me.TssBarTestProgress = New System.Windows.Forms.ToolStripProgressBar()
Me.SplStationPlan = New System.Windows.Forms.SplitContainer()
Me.SplPlanDesign = New System.Windows.Forms.SplitContainer()
Me.GrpStationPlan = New System.Windows.Forms.GroupBox()
Me.GrdStationPlan = New FlexCell.Grid()
Me.CmsPlanGrid = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.MsiGridRowBlockInsert = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiGridRowBlockDelete = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator()
Me.tsBtn_CheckAction = New System.Windows.Forms.ToolStripMenuItem()
Me.tsBtn_UncheckAction = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator15 = New System.Windows.Forms.ToolStripSeparator()
Me.MsiUndo = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiRedo = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator()
Me.MsiSaveNodeFile = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiLoadNodeFile = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator()
Me.TsmiDebugStart = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugEnd = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugContinue = New System.Windows.Forms.ToolStripMenuItem()
Me.执行1ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.执行2ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugStep = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator()
Me.TsmiDebugSetup = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugMain = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugPass = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugFail = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugCleanup = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator()
Me.TsmiDebugNode = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugNodeBegin = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiJumpCall = New System.Windows.Forms.ToolStripMenuItem()
Me.GrpSingleRowInfo = New System.Windows.Forms.GroupBox()
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
Me.GrdRowNode = New FlexCell.Grid()
Me.RtxColTip = New System.Windows.Forms.RichTextBox()
Me.GrpOutputInfo = New System.Windows.Forms.GroupBox()
Me.TabControl1 = New System.Windows.Forms.TabControl()
Me.TpOutputInfo = New System.Windows.Forms.TabPage()
Me.RtxOutputInfo = New System.Windows.Forms.RichTextBox()
Me.ToolStrip1.SuspendLayout()
Me.StuMain.SuspendLayout()
CType(Me.SplStationPlan, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplStationPlan.Panel1.SuspendLayout()
Me.SplStationPlan.Panel2.SuspendLayout()
Me.SplStationPlan.SuspendLayout()
CType(Me.SplPlanDesign, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplPlanDesign.Panel1.SuspendLayout()
Me.SplPlanDesign.Panel2.SuspendLayout()
Me.SplPlanDesign.SuspendLayout()
Me.GrpStationPlan.SuspendLayout()
Me.CmsPlanGrid.SuspendLayout()
Me.GrpSingleRowInfo.SuspendLayout()
CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer1.Panel1.SuspendLayout()
Me.SplitContainer1.Panel2.SuspendLayout()
Me.SplitContainer1.SuspendLayout()
Me.GrpOutputInfo.SuspendLayout()
Me.TabControl1.SuspendLayout()
Me.TpOutputInfo.SuspendLayout()
Me.SuspendLayout()
'
'ToolStrip1
'
Me.ToolStrip1.ImageScalingSize = New System.Drawing.Size(24, 24)
Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TsBtnOpen, Me.TsBtnSave, Me.ToolStripSeparator4, Me.TsBtnLoad, Me.TsBtnSaveAs, Me.ToolStripSeparator3, Me.TsBtnBackward, Me.TsBtnForward, Me.ToolStripSeparator1, Me.TsBtnUndo, Me.TsBtnRedo, Me.ToolStripSeparator13, Me.tsBtnInsertRow, Me.tsBtnRemoveRow, Me.ToolStripSeparator14, Me.TsBtnMoveUp, Me.TsBtnMoveDown, Me.TsBtnMoveLeft, Me.TsBtnMoveRight, Me.ToolStripSeparator2, Me.TsBtnDebugMode, Me.TsBtnDebugStart, Me.TsBtnFailMode, Me.ToolStripSeparator10, Me.tslBtn_ActionOnly, Me.TsBtn_Record, Me.TsBtn_ExpandNode})
Me.ToolStrip1.Location = New System.Drawing.Point(0, 0)
Me.ToolStrip1.Name = "ToolStrip1"
Me.ToolStrip1.Padding = New System.Windows.Forms.Padding(0, 0, 3, 0)
Me.ToolStrip1.Size = New System.Drawing.Size(1466, 58)
Me.ToolStrip1.TabIndex = 0
Me.ToolStrip1.Text = "ToolStrip1"
'
'TsBtnOpen
'
Me.TsBtnOpen.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnOpen.Image = CType(resources.GetObject("TsBtnOpen.Image"), System.Drawing.Image)
Me.TsBtnOpen.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnOpen.Name = "TsBtnOpen"
Me.TsBtnOpen.Size = New System.Drawing.Size(47, 53)
Me.TsBtnOpen.Text = "打开"
Me.TsBtnOpen.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnSave
'
Me.TsBtnSave.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnSave.Image = CType(resources.GetObject("TsBtnSave.Image"), System.Drawing.Image)
Me.TsBtnSave.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnSave.Name = "TsBtnSave"
Me.TsBtnSave.Size = New System.Drawing.Size(47, 53)
Me.TsBtnSave.Text = "保存"
Me.TsBtnSave.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator4
'
Me.ToolStripSeparator4.Name = "ToolStripSeparator4"
Me.ToolStripSeparator4.Size = New System.Drawing.Size(6, 58)
'
'TsBtnLoad
'
Me.TsBtnLoad.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnLoad.Image = CType(resources.GetObject("TsBtnLoad.Image"), System.Drawing.Image)
Me.TsBtnLoad.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnLoad.Name = "TsBtnLoad"
Me.TsBtnLoad.Size = New System.Drawing.Size(47, 53)
Me.TsBtnLoad.Text = "重载"
Me.TsBtnLoad.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnSaveAs
'
Me.TsBtnSaveAs.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnSaveAs.Image = CType(resources.GetObject("TsBtnSaveAs.Image"), System.Drawing.Image)
Me.TsBtnSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnSaveAs.Name = "TsBtnSaveAs"
Me.TsBtnSaveAs.Size = New System.Drawing.Size(47, 53)
Me.TsBtnSaveAs.Text = "导出"
Me.TsBtnSaveAs.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator3
'
Me.ToolStripSeparator3.Name = "ToolStripSeparator3"
Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 58)
'
'TsBtnBackward
'
Me.TsBtnBackward.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnBackward.Image = CType(resources.GetObject("TsBtnBackward.Image"), System.Drawing.Image)
Me.TsBtnBackward.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnBackward.Name = "TsBtnBackward"
Me.TsBtnBackward.Size = New System.Drawing.Size(64, 53)
Me.TsBtnBackward.Text = "上一步"
Me.TsBtnBackward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnForward
'
Me.TsBtnForward.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnForward.Image = CType(resources.GetObject("TsBtnForward.Image"), System.Drawing.Image)
Me.TsBtnForward.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnForward.Name = "TsBtnForward"
Me.TsBtnForward.Size = New System.Drawing.Size(64, 53)
Me.TsBtnForward.Text = "下一步"
Me.TsBtnForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
Me.TsBtnForward.ToolTipText = "下一步"
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 58)
'
'TsBtnUndo
'
Me.TsBtnUndo.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnUndo.Image = CType(resources.GetObject("TsBtnUndo.Image"), System.Drawing.Image)
Me.TsBtnUndo.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnUndo.Name = "TsBtnUndo"
Me.TsBtnUndo.Size = New System.Drawing.Size(47, 53)
Me.TsBtnUndo.Text = "撤销"
Me.TsBtnUndo.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnRedo
'
Me.TsBtnRedo.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnRedo.Image = CType(resources.GetObject("TsBtnRedo.Image"), System.Drawing.Image)
Me.TsBtnRedo.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnRedo.Name = "TsBtnRedo"
Me.TsBtnRedo.Size = New System.Drawing.Size(47, 53)
Me.TsBtnRedo.Text = "重做"
Me.TsBtnRedo.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
Me.TsBtnRedo.ToolTipText = "撤销"
'
'ToolStripSeparator13
'
Me.ToolStripSeparator13.Name = "ToolStripSeparator13"
Me.ToolStripSeparator13.Size = New System.Drawing.Size(6, 58)
'
'tsBtnInsertRow
'
Me.tsBtnInsertRow.Image = CType(resources.GetObject("tsBtnInsertRow.Image"), System.Drawing.Image)
Me.tsBtnInsertRow.ImageTransparentColor = System.Drawing.Color.Magenta
Me.tsBtnInsertRow.Name = "tsBtnInsertRow"
Me.tsBtnInsertRow.Size = New System.Drawing.Size(73, 53)
Me.tsBtnInsertRow.Text = "插入行"
Me.tsBtnInsertRow.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'tsBtnRemoveRow
'
Me.tsBtnRemoveRow.Image = CType(resources.GetObject("tsBtnRemoveRow.Image"), System.Drawing.Image)
Me.tsBtnRemoveRow.ImageTransparentColor = System.Drawing.Color.Magenta
Me.tsBtnRemoveRow.Name = "tsBtnRemoveRow"
Me.tsBtnRemoveRow.Size = New System.Drawing.Size(73, 53)
Me.tsBtnRemoveRow.Text = "移除行"
Me.tsBtnRemoveRow.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator14
'
Me.ToolStripSeparator14.Name = "ToolStripSeparator14"
Me.ToolStripSeparator14.Size = New System.Drawing.Size(6, 58)
'
'TsBtnMoveUp
'
Me.TsBtnMoveUp.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnMoveUp.Image = CType(resources.GetObject("TsBtnMoveUp.Image"), System.Drawing.Image)
Me.TsBtnMoveUp.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnMoveUp.Name = "TsBtnMoveUp"
Me.TsBtnMoveUp.Size = New System.Drawing.Size(47, 53)
Me.TsBtnMoveUp.Text = "上移"
Me.TsBtnMoveUp.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnMoveDown
'
Me.TsBtnMoveDown.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnMoveDown.Image = CType(resources.GetObject("TsBtnMoveDown.Image"), System.Drawing.Image)
Me.TsBtnMoveDown.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnMoveDown.Name = "TsBtnMoveDown"
Me.TsBtnMoveDown.Size = New System.Drawing.Size(47, 53)
Me.TsBtnMoveDown.Text = "下移"
Me.TsBtnMoveDown.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnMoveLeft
'
Me.TsBtnMoveLeft.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnMoveLeft.Image = CType(resources.GetObject("TsBtnMoveLeft.Image"), System.Drawing.Image)
Me.TsBtnMoveLeft.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnMoveLeft.Name = "TsBtnMoveLeft"
Me.TsBtnMoveLeft.Size = New System.Drawing.Size(47, 53)
Me.TsBtnMoveLeft.Text = "升级"
Me.TsBtnMoveLeft.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnMoveRight
'
Me.TsBtnMoveRight.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
Me.TsBtnMoveRight.Image = CType(resources.GetObject("TsBtnMoveRight.Image"), System.Drawing.Image)
Me.TsBtnMoveRight.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnMoveRight.Name = "TsBtnMoveRight"
Me.TsBtnMoveRight.Size = New System.Drawing.Size(47, 53)
Me.TsBtnMoveRight.Text = "降级"
Me.TsBtnMoveRight.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator2
'
Me.ToolStripSeparator2.Name = "ToolStripSeparator2"
Me.ToolStripSeparator2.Size = New System.Drawing.Size(6, 58)
'
'TsBtnDebugMode
'
Me.TsBtnDebugMode.Image = CType(resources.GetObject("TsBtnDebugMode.Image"), System.Drawing.Image)
Me.TsBtnDebugMode.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnDebugMode.Name = "TsBtnDebugMode"
Me.TsBtnDebugMode.Size = New System.Drawing.Size(92, 53)
Me.TsBtnDebugMode.Text = "调试模式"
Me.TsBtnDebugMode.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnDebugStart
'
Me.TsBtnDebugStart.Image = CType(resources.GetObject("TsBtnDebugStart.Image"), System.Drawing.Image)
Me.TsBtnDebugStart.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnDebugStart.Name = "TsBtnDebugStart"
Me.TsBtnDebugStart.Size = New System.Drawing.Size(92, 53)
Me.TsBtnDebugStart.Text = "开始调试"
Me.TsBtnDebugStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnFailMode
'
Me.TsBtnFailMode.Image = CType(resources.GetObject("TsBtnFailMode.Image"), System.Drawing.Image)
Me.TsBtnFailMode.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnFailMode.Name = "TsBtnFailMode"
Me.TsBtnFailMode.Size = New System.Drawing.Size(92, 53)
Me.TsBtnFailMode.Text = "单步退出"
Me.TsBtnFailMode.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator10
'
Me.ToolStripSeparator10.Name = "ToolStripSeparator10"
Me.ToolStripSeparator10.Size = New System.Drawing.Size(6, 58)
'
'tslBtn_ActionOnly
'
Me.tslBtn_ActionOnly.Image = CType(resources.GetObject("tslBtn_ActionOnly.Image"), System.Drawing.Image)
Me.tslBtn_ActionOnly.ImageTransparentColor = System.Drawing.Color.Magenta
Me.tslBtn_ActionOnly.Name = "tslBtn_ActionOnly"
Me.tslBtn_ActionOnly.Size = New System.Drawing.Size(67, 53)
Me.tslBtn_ActionOnly.Text = "Action"
Me.tslBtn_ActionOnly.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtn_Record
'
Me.TsBtn_Record.Image = CType(resources.GetObject("TsBtn_Record.Image"), System.Drawing.Image)
Me.TsBtn_Record.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtn_Record.Name = "TsBtn_Record"
Me.TsBtn_Record.Size = New System.Drawing.Size(71, 53)
Me.TsBtn_Record.Text = "Record"
Me.TsBtn_Record.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtn_ExpandNode
'
Me.TsBtn_ExpandNode.Image = CType(resources.GetObject("TsBtn_ExpandNode.Image"), System.Drawing.Image)
Me.TsBtn_ExpandNode.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtn_ExpandNode.Name = "TsBtn_ExpandNode"
Me.TsBtn_ExpandNode.Size = New System.Drawing.Size(74, 53)
Me.TsBtn_ExpandNode.Text = "Expand"
Me.TsBtn_ExpandNode.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'StuMain
'
Me.StuMain.ImageScalingSize = New System.Drawing.Size(24, 24)
Me.StuMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TssLblTestStatus, Me.TssLblTestTime, Me.TssBarTestProgress})
Me.StuMain.Location = New System.Drawing.Point(0, 841)
Me.StuMain.Name = "StuMain"
Me.StuMain.Padding = New System.Windows.Forms.Padding(2, 0, 21, 0)
Me.StuMain.Size = New System.Drawing.Size(1466, 29)
Me.StuMain.TabIndex = 1
Me.StuMain.Text = "StatusStrip1"
'
'TssLblTestStatus
'
Me.TssLblTestStatus.AutoSize = False
Me.TssLblTestStatus.Name = "TssLblTestStatus"
Me.TssLblTestStatus.Size = New System.Drawing.Size(120, 22)
Me.TssLblTestStatus.Text = "测试状态"
'
'TssLblTestTime
'
Me.TssLblTestTime.AutoSize = False
Me.TssLblTestTime.ForeColor = System.Drawing.Color.Green
Me.TssLblTestTime.Name = "TssLblTestTime"
Me.TssLblTestTime.Overflow = System.Windows.Forms.ToolStripItemOverflow.Always
Me.TssLblTestTime.Size = New System.Drawing.Size(160, 22)
Me.TssLblTestTime.Text = "TimeExpend:00:00:00:000"
'
'TssBarTestProgress
'
Me.TssBarTestProgress.AutoSize = False
Me.TssBarTestProgress.Name = "TssBarTestProgress"
Me.TssBarTestProgress.Size = New System.Drawing.Size(300, 21)
'
'SplStationPlan
'
Me.SplStationPlan.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplStationPlan.Location = New System.Drawing.Point(0, 58)
Me.SplStationPlan.Margin = New System.Windows.Forms.Padding(4)
Me.SplStationPlan.Name = "SplStationPlan"
Me.SplStationPlan.Orientation = System.Windows.Forms.Orientation.Horizontal
'
'SplStationPlan.Panel1
'
Me.SplStationPlan.Panel1.Controls.Add(Me.SplPlanDesign)
'
'SplStationPlan.Panel2
'
Me.SplStationPlan.Panel2.Controls.Add(Me.GrpOutputInfo)
Me.SplStationPlan.Size = New System.Drawing.Size(1466, 783)
Me.SplStationPlan.SplitterDistance = 526
Me.SplStationPlan.SplitterWidth = 6
Me.SplStationPlan.TabIndex = 10
'
'SplPlanDesign
'
Me.SplPlanDesign.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplPlanDesign.FixedPanel = System.Windows.Forms.FixedPanel.Panel2
Me.SplPlanDesign.Location = New System.Drawing.Point(0, 0)
Me.SplPlanDesign.Margin = New System.Windows.Forms.Padding(4)
Me.SplPlanDesign.Name = "SplPlanDesign"
'
'SplPlanDesign.Panel1
'
Me.SplPlanDesign.Panel1.Controls.Add(Me.GrpStationPlan)
'
'SplPlanDesign.Panel2
'
Me.SplPlanDesign.Panel2.Controls.Add(Me.GrpSingleRowInfo)
Me.SplPlanDesign.Size = New System.Drawing.Size(1466, 526)
Me.SplPlanDesign.SplitterDistance = 1006
Me.SplPlanDesign.SplitterWidth = 6
Me.SplPlanDesign.TabIndex = 0
'
'GrpStationPlan
'
Me.GrpStationPlan.Controls.Add(Me.GrdStationPlan)
Me.GrpStationPlan.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrpStationPlan.Location = New System.Drawing.Point(0, 0)
Me.GrpStationPlan.Margin = New System.Windows.Forms.Padding(4)
Me.GrpStationPlan.Name = "GrpStationPlan"
Me.GrpStationPlan.Padding = New System.Windows.Forms.Padding(4)
Me.GrpStationPlan.Size = New System.Drawing.Size(1006, 526)
Me.GrpStationPlan.TabIndex = 45
Me.GrpStationPlan.TabStop = False
Me.GrpStationPlan.Text = "执行流程"
'
'GrdStationPlan
'
Me.GrdStationPlan.BorderStyle = FlexCell.BorderStyleEnum.None
Me.GrdStationPlan.ContextMenuStrip = Me.CmsPlanGrid
Me.GrdStationPlan.DefaultFont = New System.Drawing.Font("宋体", 9.0!)
Me.GrdStationPlan.DefaultRowHeight = CType(28, Short)
Me.GrdStationPlan.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrdStationPlan.GridColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer))
Me.GrdStationPlan.Location = New System.Drawing.Point(4, 25)
Me.GrdStationPlan.Margin = New System.Windows.Forms.Padding(4)
Me.GrdStationPlan.MouseWheelSpeed = CType(3, Short)
Me.GrdStationPlan.Name = "GrdStationPlan"
Me.GrdStationPlan.Size = New System.Drawing.Size(998, 497)
Me.GrdStationPlan.TabIndex = 0
'
'CmsPlanGrid
'
Me.CmsPlanGrid.ImageScalingSize = New System.Drawing.Size(24, 24)
Me.CmsPlanGrid.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MsiGridRowBlockInsert, Me.MsiGridRowBlockDelete, Me.ToolStripSeparator7, Me.tsBtn_CheckAction, Me.tsBtn_UncheckAction, Me.ToolStripSeparator15, Me.MsiUndo, Me.MsiRedo, Me.ToolStripSeparator6, Me.MsiSaveNodeFile, Me.MsiLoadNodeFile, Me.ToolStripSeparator11, Me.TsmiDebugStart, Me.TsmiDebugEnd, Me.TsmiDebugContinue, Me.执行1ToolStripMenuItem, Me.执行2ToolStripMenuItem, Me.TsmiDebugStep, Me.ToolStripSeparator8, Me.TsmiDebugSetup, Me.TsmiDebugMain, Me.TsmiDebugPass, Me.TsmiDebugFail, Me.TsmiDebugCleanup, Me.ToolStripSeparator9, Me.TsmiDebugNode, Me.TsmiDebugNodeBegin, Me.TsmiJumpCall})
Me.CmsPlanGrid.Name = "CmsMain"
Me.CmsPlanGrid.Size = New System.Drawing.Size(303, 744)
'
'MsiGridRowBlockInsert
'
Me.MsiGridRowBlockInsert.Image = CType(resources.GetObject("MsiGridRowBlockInsert.Image"), System.Drawing.Image)
Me.MsiGridRowBlockInsert.Name = "MsiGridRowBlockInsert"
Me.MsiGridRowBlockInsert.ShortcutKeyDisplayString = "Ctr+I"
Me.MsiGridRowBlockInsert.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys)
Me.MsiGridRowBlockInsert.Size = New System.Drawing.Size(302, 32)
Me.MsiGridRowBlockInsert.Text = "插入"
'
'MsiGridRowBlockDelete
'
Me.MsiGridRowBlockDelete.Image = CType(resources.GetObject("MsiGridRowBlockDelete.Image"), System.Drawing.Image)
Me.MsiGridRowBlockDelete.Name = "MsiGridRowBlockDelete"
Me.MsiGridRowBlockDelete.ShortcutKeyDisplayString = "Ctr+D"
Me.MsiGridRowBlockDelete.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys)
Me.MsiGridRowBlockDelete.Size = New System.Drawing.Size(302, 32)
Me.MsiGridRowBlockDelete.Text = "删除"
'
'ToolStripSeparator7
'
Me.ToolStripSeparator7.Name = "ToolStripSeparator7"
Me.ToolStripSeparator7.Size = New System.Drawing.Size(299, 6)
'
'tsBtn_CheckAction
'
Me.tsBtn_CheckAction.Image = CType(resources.GetObject("tsBtn_CheckAction.Image"), System.Drawing.Image)
Me.tsBtn_CheckAction.Name = "tsBtn_CheckAction"
Me.tsBtn_CheckAction.Size = New System.Drawing.Size(302, 32)
Me.tsBtn_CheckAction.Text = "勾选测试"
'
'tsBtn_UncheckAction
'
Me.tsBtn_UncheckAction.Image = CType(resources.GetObject("tsBtn_UncheckAction.Image"), System.Drawing.Image)
Me.tsBtn_UncheckAction.Name = "tsBtn_UncheckAction"
Me.tsBtn_UncheckAction.Size = New System.Drawing.Size(302, 32)
Me.tsBtn_UncheckAction.Text = "取消勾选测试"
'
'ToolStripSeparator15
'
Me.ToolStripSeparator15.Name = "ToolStripSeparator15"
Me.ToolStripSeparator15.Size = New System.Drawing.Size(299, 6)
'
'MsiUndo
'
Me.MsiUndo.Name = "MsiUndo"
Me.MsiUndo.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Z), System.Windows.Forms.Keys)
Me.MsiUndo.Size = New System.Drawing.Size(302, 32)
Me.MsiUndo.Text = "撤销"
'
'MsiRedo
'
Me.MsiRedo.Name = "MsiRedo"
Me.MsiRedo.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Y), System.Windows.Forms.Keys)
Me.MsiRedo.Size = New System.Drawing.Size(302, 32)
Me.MsiRedo.Text = "重做"
'
'ToolStripSeparator6
'
Me.ToolStripSeparator6.Name = "ToolStripSeparator6"
Me.ToolStripSeparator6.Size = New System.Drawing.Size(299, 6)
'
'MsiSaveNodeFile
'
Me.MsiSaveNodeFile.Name = "MsiSaveNodeFile"
Me.MsiSaveNodeFile.Size = New System.Drawing.Size(302, 32)
Me.MsiSaveNodeFile.Text = "另存为节点文件"
'
'MsiLoadNodeFile
'
Me.MsiLoadNodeFile.Name = "MsiLoadNodeFile"
Me.MsiLoadNodeFile.Size = New System.Drawing.Size(302, 32)
Me.MsiLoadNodeFile.Text = "加载节点文件"
'
'ToolStripSeparator11
'
Me.ToolStripSeparator11.Name = "ToolStripSeparator11"
Me.ToolStripSeparator11.Size = New System.Drawing.Size(299, 6)
'
'TsmiDebugStart
'
Me.TsmiDebugStart.Image = CType(resources.GetObject("TsmiDebugStart.Image"), System.Drawing.Image)
Me.TsmiDebugStart.Name = "TsmiDebugStart"
Me.TsmiDebugStart.ShortcutKeys = System.Windows.Forms.Keys.F5
Me.TsmiDebugStart.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugStart.Text = "开始执行"
'
'TsmiDebugEnd
'
Me.TsmiDebugEnd.Image = CType(resources.GetObject("TsmiDebugEnd.Image"), System.Drawing.Image)
Me.TsmiDebugEnd.Name = "TsmiDebugEnd"
Me.TsmiDebugEnd.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.F5), System.Windows.Forms.Keys)
Me.TsmiDebugEnd.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugEnd.Text = "退出执行"
'
'TsmiDebugContinue
'
Me.TsmiDebugContinue.Image = CType(resources.GetObject("TsmiDebugContinue.Image"), System.Drawing.Image)
Me.TsmiDebugContinue.Name = "TsmiDebugContinue"
Me.TsmiDebugContinue.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F5), System.Windows.Forms.Keys)
Me.TsmiDebugContinue.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugContinue.Text = "继续执行"
'
'执行1ToolStripMenuItem
'
Me.执行1ToolStripMenuItem.Name = "执行1ToolStripMenuItem"
Me.执行1ToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F9
Me.执行1ToolStripMenuItem.Size = New System.Drawing.Size(302, 32)
Me.执行1ToolStripMenuItem.Text = "单步重复"
'
'执行2ToolStripMenuItem
'
Me.执行2ToolStripMenuItem.Name = "执行2ToolStripMenuItem"
Me.执行2ToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F10
Me.执行2ToolStripMenuItem.Size = New System.Drawing.Size(302, 32)
Me.执行2ToolStripMenuItem.Text = "单步调试"
'
'TsmiDebugStep
'
Me.TsmiDebugStep.Image = CType(resources.GetObject("TsmiDebugStep.Image"), System.Drawing.Image)
Me.TsmiDebugStep.Name = "TsmiDebugStep"
Me.TsmiDebugStep.ShortcutKeys = System.Windows.Forms.Keys.F11
Me.TsmiDebugStep.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugStep.Text = "单步断点调试"
'
'ToolStripSeparator8
'
Me.ToolStripSeparator8.Name = "ToolStripSeparator8"
Me.ToolStripSeparator8.Size = New System.Drawing.Size(299, 6)
'
'TsmiDebugSetup
'
Me.TsmiDebugSetup.Name = "TsmiDebugSetup"
Me.TsmiDebugSetup.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F1), System.Windows.Forms.Keys)
Me.TsmiDebugSetup.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugSetup.Text = "Setup模块执行"
'
'TsmiDebugMain
'
Me.TsmiDebugMain.Name = "TsmiDebugMain"
Me.TsmiDebugMain.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F2), System.Windows.Forms.Keys)
Me.TsmiDebugMain.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugMain.Text = "Main模块执行"
'
'TsmiDebugPass
'
Me.TsmiDebugPass.Name = "TsmiDebugPass"
Me.TsmiDebugPass.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F3), System.Windows.Forms.Keys)
Me.TsmiDebugPass.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugPass.Text = "Pass模块执行"
'
'TsmiDebugFail
'
Me.TsmiDebugFail.Name = "TsmiDebugFail"
Me.TsmiDebugFail.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F4), System.Windows.Forms.Keys)
Me.TsmiDebugFail.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugFail.Text = "Fail模块执行"
'
'TsmiDebugCleanup
'
Me.TsmiDebugCleanup.Name = "TsmiDebugCleanup"
Me.TsmiDebugCleanup.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F5), System.Windows.Forms.Keys)
Me.TsmiDebugCleanup.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugCleanup.Text = "Cleanup模块执行"
'
'ToolStripSeparator9
'
Me.ToolStripSeparator9.Name = "ToolStripSeparator9"
Me.ToolStripSeparator9.Size = New System.Drawing.Size(299, 6)
'
'TsmiDebugNode
'
Me.TsmiDebugNode.Name = "TsmiDebugNode"
Me.TsmiDebugNode.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F10), System.Windows.Forms.Keys)
Me.TsmiDebugNode.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugNode.Text = "节点测试"
'
'TsmiDebugNodeBegin
'
Me.TsmiDebugNodeBegin.Name = "TsmiDebugNodeBegin"
Me.TsmiDebugNodeBegin.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F11), System.Windows.Forms.Keys)
Me.TsmiDebugNodeBegin.Size = New System.Drawing.Size(302, 32)
Me.TsmiDebugNodeBegin.Text = "节点开始测试"
'
'TsmiJumpCall
'
Me.TsmiJumpCall.Name = "TsmiJumpCall"
Me.TsmiJumpCall.ShortcutKeys = System.Windows.Forms.Keys.F12
Me.TsmiJumpCall.Size = New System.Drawing.Size(302, 32)
Me.TsmiJumpCall.Text = "函数跳转"
Me.TsmiJumpCall.Visible = False
'
'GrpSingleRowInfo
'
Me.GrpSingleRowInfo.Controls.Add(Me.SplitContainer1)
Me.GrpSingleRowInfo.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrpSingleRowInfo.Location = New System.Drawing.Point(0, 0)
Me.GrpSingleRowInfo.Margin = New System.Windows.Forms.Padding(4)
Me.GrpSingleRowInfo.Name = "GrpSingleRowInfo"
Me.GrpSingleRowInfo.Padding = New System.Windows.Forms.Padding(4)
Me.GrpSingleRowInfo.Size = New System.Drawing.Size(454, 526)
Me.GrpSingleRowInfo.TabIndex = 1
Me.GrpSingleRowInfo.TabStop = False
Me.GrpSingleRowInfo.Text = "属性"
'
'SplitContainer1
'
Me.SplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2
Me.SplitContainer1.Location = New System.Drawing.Point(4, 25)
Me.SplitContainer1.Margin = New System.Windows.Forms.Padding(4)
Me.SplitContainer1.Name = "SplitContainer1"
Me.SplitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal
'
'SplitContainer1.Panel1
'
Me.SplitContainer1.Panel1.Controls.Add(Me.GrdRowNode)
'
'SplitContainer1.Panel2
'
Me.SplitContainer1.Panel2.Controls.Add(Me.RtxColTip)
Me.SplitContainer1.Size = New System.Drawing.Size(446, 497)
Me.SplitContainer1.SplitterDistance = 407
Me.SplitContainer1.SplitterWidth = 6
Me.SplitContainer1.TabIndex = 1
'
'GrdRowNode
'
Me.GrdRowNode.BorderStyle = FlexCell.BorderStyleEnum.None
Me.GrdRowNode.DefaultFont = New System.Drawing.Font("宋体", 9.0!)
Me.GrdRowNode.DefaultRowHeight = CType(28, Short)
Me.GrdRowNode.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrdRowNode.GridColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer))
Me.GrdRowNode.Location = New System.Drawing.Point(0, 0)
Me.GrdRowNode.Margin = New System.Windows.Forms.Padding(4)
Me.GrdRowNode.MouseWheelSpeed = CType(3, Short)
Me.GrdRowNode.Name = "GrdRowNode"
Me.GrdRowNode.Size = New System.Drawing.Size(446, 407)
Me.GrdRowNode.TabIndex = 0
'
'RtxColTip
'
Me.RtxColTip.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxColTip.Dock = System.Windows.Forms.DockStyle.Fill
Me.RtxColTip.Enabled = False
Me.RtxColTip.Location = New System.Drawing.Point(0, 0)
Me.RtxColTip.Margin = New System.Windows.Forms.Padding(4)
Me.RtxColTip.Name = "RtxColTip"
Me.RtxColTip.Size = New System.Drawing.Size(446, 84)
Me.RtxColTip.TabIndex = 0
Me.RtxColTip.Text = ""
'
'GrpOutputInfo
'
Me.GrpOutputInfo.Controls.Add(Me.TabControl1)
Me.GrpOutputInfo.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrpOutputInfo.Location = New System.Drawing.Point(0, 0)
Me.GrpOutputInfo.Margin = New System.Windows.Forms.Padding(4)
Me.GrpOutputInfo.Name = "GrpOutputInfo"
Me.GrpOutputInfo.Padding = New System.Windows.Forms.Padding(4)
Me.GrpOutputInfo.Size = New System.Drawing.Size(1466, 251)
Me.GrpOutputInfo.TabIndex = 0
Me.GrpOutputInfo.TabStop = False
Me.GrpOutputInfo.Text = "输出内容"
'
'TabControl1
'
Me.TabControl1.Controls.Add(Me.TpOutputInfo)
Me.TabControl1.Dock = System.Windows.Forms.DockStyle.Fill
Me.TabControl1.Location = New System.Drawing.Point(4, 25)
Me.TabControl1.Margin = New System.Windows.Forms.Padding(4)
Me.TabControl1.Name = "TabControl1"
Me.TabControl1.SelectedIndex = 0
Me.TabControl1.Size = New System.Drawing.Size(1458, 222)
Me.TabControl1.TabIndex = 1
'
'TpOutputInfo
'
Me.TpOutputInfo.Controls.Add(Me.RtxOutputInfo)
Me.TpOutputInfo.Location = New System.Drawing.Point(4, 28)
Me.TpOutputInfo.Margin = New System.Windows.Forms.Padding(4)
Me.TpOutputInfo.Name = "TpOutputInfo"
Me.TpOutputInfo.Padding = New System.Windows.Forms.Padding(4)
Me.TpOutputInfo.Size = New System.Drawing.Size(1450, 190)
Me.TpOutputInfo.TabIndex = 0
Me.TpOutputInfo.Text = "输出信息"
Me.TpOutputInfo.UseVisualStyleBackColor = True
'
'RtxOutputInfo
'
Me.RtxOutputInfo.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.RtxOutputInfo.Dock = System.Windows.Forms.DockStyle.Fill
Me.RtxOutputInfo.Location = New System.Drawing.Point(4, 4)
Me.RtxOutputInfo.Margin = New System.Windows.Forms.Padding(4)
Me.RtxOutputInfo.Name = "RtxOutputInfo"
Me.RtxOutputInfo.Size = New System.Drawing.Size(1442, 182)
Me.RtxOutputInfo.TabIndex = 0
Me.RtxOutputInfo.Text = ""
'
'FrmStationPlan
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(9.0!, 18.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1466, 870)
Me.Controls.Add(Me.SplStationPlan)
Me.Controls.Add(Me.StuMain)
Me.Controls.Add(Me.ToolStrip1)
Me.KeyPreview = True
Me.Margin = New System.Windows.Forms.Padding(4)
Me.Name = "FrmStationPlan"
Me.Text = "Form1"
Me.ToolStrip1.ResumeLayout(False)
Me.ToolStrip1.PerformLayout()
Me.StuMain.ResumeLayout(False)
Me.StuMain.PerformLayout
Me.SplStationPlan.Panel1.ResumeLayout(false)
Me.SplStationPlan.Panel2.ResumeLayout(false)
CType(Me.SplStationPlan,System.ComponentModel.ISupportInitialize).EndInit
Me.SplStationPlan.ResumeLayout(false)
Me.SplPlanDesign.Panel1.ResumeLayout(false)
Me.SplPlanDesign.Panel2.ResumeLayout(false)
CType(Me.SplPlanDesign,System.ComponentModel.ISupportInitialize).EndInit
Me.SplPlanDesign.ResumeLayout(false)
Me.GrpStationPlan.ResumeLayout(false)
Me.CmsPlanGrid.ResumeLayout(false)
Me.GrpSingleRowInfo.ResumeLayout(false)
Me.SplitContainer1.Panel1.ResumeLayout(false)
Me.SplitContainer1.Panel2.ResumeLayout(false)
CType(Me.SplitContainer1,System.ComponentModel.ISupportInitialize).EndInit
Me.SplitContainer1.ResumeLayout(false)
Me.GrpOutputInfo.ResumeLayout(false)
Me.TabControl1.ResumeLayout(false)
Me.TpOutputInfo.ResumeLayout(false)
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents ToolStrip1 As ToolStrip
Friend WithEvents StuMain As StatusStrip
Friend WithEvents SplStationPlan As SplitContainer
Friend WithEvents SplPlanDesign As SplitContainer
Friend WithEvents GrpStationPlan As GroupBox
Friend WithEvents GrpSingleRowInfo As GroupBox
Friend WithEvents SplitContainer1 As SplitContainer
Friend WithEvents RtxColTip As RichTextBox
Friend WithEvents GrpOutputInfo As GroupBox
Friend WithEvents TsBtnBackward As ToolStripButton
Friend WithEvents TsBtnForward As ToolStripButton
Friend WithEvents TsBtnMoveUp As ToolStripButton
Friend WithEvents GrdRowNode As FlexCell.Grid
Friend WithEvents CmsPlanGrid As ContextMenuStrip
Friend WithEvents MsiSaveNodeFile As ToolStripMenuItem
Friend WithEvents TsBtnMoveDown As ToolStripButton
Friend WithEvents TsBtnMoveLeft As ToolStripButton
Friend WithEvents TsBtnMoveRight As ToolStripButton
Friend WithEvents ToolStripSeparator2 As ToolStripSeparator
Friend WithEvents ToolStripSeparator3 As ToolStripSeparator
Friend WithEvents TsBtnLoad As ToolStripButton
Friend WithEvents TsBtnSave As ToolStripButton
Friend WithEvents MsiLoadNodeFile As ToolStripMenuItem
Friend WithEvents ToolStripSeparator6 As ToolStripSeparator
Friend WithEvents MsiUndo As ToolStripMenuItem
Friend WithEvents MsiRedo As ToolStripMenuItem
Friend WithEvents TsBtnOpen As ToolStripButton
Friend WithEvents GrdStationPlan As FlexCell.Grid
Friend WithEvents TsBtnDebugStart As ToolStripButton
Friend WithEvents TsBtnDebugMode As ToolStripButton
Friend WithEvents ToolStripSeparator7 As ToolStripSeparator
Friend WithEvents TsmiDebugStep As ToolStripMenuItem
Friend WithEvents TsmiDebugContinue As ToolStripMenuItem
Friend WithEvents TsmiDebugStart As ToolStripMenuItem
Friend WithEvents ToolStripSeparator8 As ToolStripSeparator
Friend WithEvents TsmiDebugSetup As ToolStripMenuItem
Friend WithEvents TsmiDebugMain As ToolStripMenuItem
Friend WithEvents TsmiDebugPass As ToolStripMenuItem
Friend WithEvents TsmiDebugFail As ToolStripMenuItem
Friend WithEvents TsmiDebugCleanup As ToolStripMenuItem
Friend WithEvents TsmiDebugEnd As ToolStripMenuItem
Friend WithEvents ToolStripSeparator9 As ToolStripSeparator
Friend WithEvents TsmiDebugNode As ToolStripMenuItem
Friend WithEvents TsmiDebugNodeBegin As ToolStripMenuItem
Friend WithEvents TssLblTestStatus As ToolStripStatusLabel
Friend WithEvents TssLblTestTime As ToolStripStatusLabel
Friend WithEvents TssBarTestProgress As ToolStripProgressBar
Friend WithEvents TsBtnFailMode As ToolStripButton
Friend WithEvents TabControl1 As TabControl
Friend WithEvents TpOutputInfo As TabPage
Friend WithEvents RtxOutputInfo As RichTextBox
Friend WithEvents TsBtnSaveAs As ToolStripButton
Friend WithEvents ToolStripSeparator4 As ToolStripSeparator
Friend WithEvents tsBtnInsertRow As ToolStripButton
Friend WithEvents tsBtnRemoveRow As ToolStripButton
Friend WithEvents tslBtn_ActionOnly As ToolStripButton
Friend WithEvents ToolStripSeparator10 As ToolStripSeparator
Friend WithEvents TsBtn_Record As ToolStripButton
Friend WithEvents TsBtn_ExpandNode As ToolStripButton
Friend WithEvents MsiGridRowBlockInsert As ToolStripMenuItem
Friend WithEvents MsiGridRowBlockDelete As ToolStripMenuItem
Friend WithEvents ToolStripSeparator11 As ToolStripSeparator
Friend WithEvents ToolStripSeparator13 As ToolStripSeparator
Friend WithEvents ToolStripSeparator14 As ToolStripSeparator
Friend WithEvents tsBtn_CheckAction As ToolStripMenuItem
Friend WithEvents tsBtn_UncheckAction As ToolStripMenuItem
Friend WithEvents ToolStripSeparator15 As ToolStripSeparator
Friend WithEvents ToolStripSeparator1 As ToolStripSeparator
Friend WithEvents TsBtnUndo As ToolStripButton
Friend WithEvents TsBtnRedo As ToolStripButton
Friend WithEvents TsmiJumpCall As ToolStripMenuItem
Friend WithEvents 执行1ToolStripMenuItem As ToolStripMenuItem
Friend WithEvents 执行2ToolStripMenuItem As ToolStripMenuItem
End Class
End Namespace

View File

@@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ToolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>22, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="TsBtnOpen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGnSURBVGhD7ZjNSgRBDIQLFPWuN/XdRK/+vJzoG/iDiPoq
rnpVAjMgRa+1Sad7XegP+rLpSqVnMg0bYDAYRNkDcAXgEcAHgO/kZTkfAFwC2GXzWo4AvBVMW63XyTMF
e/I9i5+XHSLlTVjbcPJe64KLiWA9/zvpNYBD3pSAtcwNed3zpggLSprWmwWOyeudN0Tg19qadL/0hIKw
3zaAM/6xJmGQkN8BgOclglDCCtx+9uTn4ksCd8JK3H7WNn8J3Akrcfs9CYE7YSVuvy8hcCesxO2nBCqe
jdtPCVQ8G7efEqh4Nm4/JVDxbNx+SqDi2bj9lEDFs3H7KYGKZ+P2UwIVz8btpwQqno3bTwlUPBu3nxKo
eDZuPyVQ8Wzcfkrw7//UqwPwWMVGHy0OYcXfktdKYxV1AJtV8p5e65yLKcEixsZ7Nubjfa3XC4AdLqYE
C0tYy/Q8hBW/8vSPxcuwN2GzSutL/rAzluW8m9pmpSc/w4k2jo0/ALdDiyuyKb3u+Was854/5WIirOue
t4HaFhcTpfc9b8XvcxG1tL7nP6fv7WQaKA8GgwA/US97ZXWnuP4AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnSave.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHbSURBVGhD7ZlLSsVAEEWvTlyCvy05U3DiUNGRixNx4m/m
Z+QmdAPqTEEpeEhT3clJJd1PwRyo0e17q8okL2CkmZmZLlYkHUt6lPQu6atRvUja9c2nsiXpptCsVX1I
2vdDjGVV0m2hSev6lHTghxnDSSF8WVXlStg9n4aeS1pPdN90CjasDV11iTcXuOH0mgsY1ZegAUkfw15h
idHPBA1I+liqLUEDkj6FKkvQgKRPZfISNKDXx5a9gXd8+IKuB3vQG9s38nh9Sj378ITSEn3nf/BNPBbi
z4wtGsiW8B6EDHbZ7fL7c9Hqu4VSvA8JGxoTnidsaEx4nrChMeF5wobGhOcJGxoTnidsaEx4HjLU+hn1
1fWz6s8hZKj5IvNVerH5MwgZvF67PKRnkMHrtctDegYZSI9CeaRnkIH0KJRHegYZSI9CeaRnkIH0KJRH
egYZSI9CeaRnkIH0KJRHegYZSI9CeaRnkIH0KJRHegYZSI9CeaRnkIH0KJRHesarM6T/mTbCgUBfnn1o
STWbDXlwpjNJm4ne13AMXXnW88Jp94neyWkh9K/UoR+2xJqkp4L5t+ty8eFxENuSrgshv1VX7jYehG17
JOmu8NVmGWUPrPW222bwX35m5r/xDfNWMy9xCndOAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnLoad.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHASURBVGhD1ZlLTgMxEERLAsEelsDd+Gwhp0NwA/4SnIXf
NqglR4paE9WUXXbIk7xJT/WzZyZejIF6DgEsADwB+AawNI/oGb1visvKCYCPCWmv8V6cFuJujJz8asQi
LE8iXpvcfNS4zpOp4Tk1vXU+3jVOAdwl12O+qIav1DREvThLrs98QQ35sfbG7rM3JFT79gBc5h9bGlZS
5TsG8LYhUNWwAdm3vzb5qYDcsBHZd0UCcsNGZN8rCcgNG5F9vyQgN2xE9rEAq7uRfSzA6m5kHwuwuhvZ
xwKs7kb2sQCru5F9LMDqbmQfC7C6G9nHAqzuRvaxAKu7kX0swOpuZB8LsLob2ccCrO5G9rEAq7uRfSzA
6m5kHwuwuhvZxwKs7kb2sQCru5F9LMDqbmQfC7C6G9nHAqzuRvaxwL//uMsWkD+vxyfwHouIyd8n16zP
62wBcWaVrxk1Zh1w5FAmjnniuCdf13uE8yBPZoocnCJOZEYuQjrky+FNxN2IRxrvZf5jO0b0fCiOWXd+
RW60c+z8AvLr0GOL7Mqofb4b29znL/JkatjWPv9SDhYtjN7nY/JHeRKt9N7nf8r/7bwcLFbxB5dd2uNo
4MxjAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnSaveAs.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAADWSURBVEhL5ZYxCsJAEEXfETyBeATPYSEewSN4BI9gZ2tl
bWVhZydWHkEsrbTSTvkywWU0wVkMBP3wYT87M28JSxJ4qg/sMrxMZlRqCNyAFbD40Adg7weVqQB0/EaF
Zj8BOAID57YvlHIB6vHWrBflAHTSbuLetwFe6v0jgK5fxFIIoLVeBbopc8tby6lVoz0pDBjbumV5lNQX
Uk1zAVfgBJwtXyynVk02YANMgKnlteXUqskG1P6IagdELIUAOlnEUgiQo2YAIh99b/WWAnJ/W95Zsx66
A61XwcQ50MgGAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnBackward.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHOSURBVDhPvZHfS5NRAIb3p6QyxLr2DwgpLQoMDC/qIqjE
q13oVVeRoaDEjAXO5sKaNdmm33QR6SRl6lyazJzr16RlUBtM5ft0Oaff5iM7onOftIKgF56rc97n5XB0
un+NZ/IzOaSJsMAxEqTP8xbtvd8mV9bGNhygoeXF30nc4+GCcia7R5d9DK8/zLWmzj9LHKMLouiNgPQe
QlGFR7bXSNMKrkkZp0/m6aiMaWhdoO3r+jyBo/Wd3QzKZppYIikE2rT2r1J5218osbp84rDXv4txROGe
9JPmZ1Hsb9a0fZosCTyzCmfqh/MSs31MvHsrpbIqp1iJbfAxuob1VVyUOqSMILS8wQ1jnNP1L6moG6C8
9vmBJPfe7bR6tGywRmg0f+Chc6VgXfmlsvxjG//SJhZpHv3lJ3mBkkzz6VuChS8xAqHvTLz7Skvvwffe
7U9iMMe5/iDClfuLAos0h/5id15QeeHmCZpNi0KgZvdIyCpL0S3GgwruqXUeDwQoqzad/JHjudU6KwTH
lw/pds1Qes5YXHD1jo/UThbrUJAe9zyWwTmxnCubHdOUVLUXF1QbvFTUOQXltTb0l3ooq+mi9HwnJVUd
nDrbVlzw37IPxZzRV+2pq28AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnForward.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAACESURBVDhPtZDBDYAgDEV7YFZ3YgGHMZ5dgasbYEpFm08r
mOhP3sFKH1+J/kgIIWvwfRNcYPJKBZw3Qh7My35Rl7XIOmMK9M0InnMFT3QFowwJiKLLoGDKVnguoq4g
4m4Jz1PabokvkAZyo4DPHYHdgPOyQfsTRXA2qBJkuIEf/a0eH+QAf0C4uBZ9A6wAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHOSURBVDhPvZHfS5NRAIb3p6QyxLr2DwgpLQoMDC/qIqjE
q13oVVeRoaDEjAXO5sKaNdmm33QR6SRl6lyazJzr16RlUBtM5ft0Oaff5iM7onOftIKgF56rc97n5XB0
un+NZ/IzOaSJsMAxEqTP8xbtvd8mV9bGNhygoeXF30nc4+GCcia7R5d9DK8/zLWmzj9LHKMLouiNgPQe
QlGFR7bXSNMKrkkZp0/m6aiMaWhdoO3r+jyBo/Wd3QzKZppYIikE2rT2r1J5218osbp84rDXv4txROGe
9JPmZ1Hsb9a0fZosCTyzCmfqh/MSs31MvHsrpbIqp1iJbfAxuob1VVyUOqSMILS8wQ1jnNP1L6moG6C8
9vmBJPfe7bR6tGywRmg0f+Chc6VgXfmlsvxjG//SJhZpHv3lJ3mBkkzz6VuChS8xAqHvTLz7Skvvwffe
7U9iMMe5/iDClfuLAos0h/5id15QeeHmCZpNi0KgZvdIyCpL0S3GgwruqXUeDwQoqzad/JHjudU6KwTH
lw/pds1Qes5YXHD1jo/UThbrUJAe9zyWwTmxnCubHdOUVLUXF1QbvFTUOQXltTb0l3ooq+mi9HwnJVUd
nDrbVlzw37IPxZzRV+2pq28AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnRedo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAACESURBVDhPtZDBDYAgDEV7YFZ3YgGHMZ5dgasbYEpFm08r
mOhP3sFKH1+J/kgIIWvwfRNcYPJKBZw3Qh7My35Rl7XIOmMK9M0InnMFT3QFowwJiKLLoGDKVnguoq4g
4m4Jz1PabokvkAZyo4DPHYHdgPOyQfsTRXA2qBJkuIEf/a0eH+QAf0C4uBZ9A6wAAAAASUVORK5CYII=
</value>
</data>
<data name="tsBtnInsertRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAADYSURBVDhPrVItD8IwFNxf4i/gsPsHpApJpmZJ1eRSNUlS
M7mkZnbJDJJkBomYmJx4AnHkddCQBvaRccmp3t3Le70gWAtTNtBFDZ0PVGcDmRr4up/AB+gxUKZ6YcDL
SD3Q9kAUq/kB76lstOyA8CDnB2x2At/o61ZDZQZMvo9MFMRRWvo6H07AZl6vuQP1DTAXgi5pNIAfHXmy
NV4BXRFkThDpeADDCaKTskZVEKKMECaEbdxOBjjwvv6h7bFN1cCUtWvj0MSlRfp3E8XqJu6n/9fBP8rS
Jj4BXasamGdFJGcAAAAASUVORK5CYII=
</value>
</data>
<data name="tsBtnRemoveRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAADdSURBVDhPY2CgBth28ML/tTtP/V+84dD/mct2/Z8wb/P/
3tnr/6OrwwnW7Tr9HwS+fP/3//HbP/8vPfr139QzmXgD5q/Zj6L5+K2f/53C8ok3YMK8jWAbQRikccbC
1XA8ec7y/11TF/5v6pmFYiALEwtuC0AaD9/483/buZ//lx789n/S5k9gw0Ga0DG6XjAA2bjuxI//7cse
/C+defd/Ss8djDBB0YweC5WtU8BegXkLhpENQAHYYiEiuwm3BnSALRbw2ogOQAagO5ckA7B5gSQDKPYC
ckIiywsDCgCBjwD6FcXgCwAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnMoveUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGTSURBVHhe7ZhBSsUwFEWv4sChM9ENuA7X4SpcgatwIDhy
JLoYRyKCuABx7NTPgRY+If83SVNt2nvgQXntJ++e5E8iGWOMMcYY89ccS7ruiudVcSHpR9JvVzzTWwWn
kr62wvf1Lek8/HhpnEl6i4Tvi3d8s0jY+ddI6LDel3gShnY+rEWdhNSdD2sRJyF358Nq+iSU7nxYTZ6E
ofCfkd5HpNekhKHw95KeI/0nSbeRflMSUsIfdmHDd/QOWpaQGh52CYAmJeSEh30CoCkJueFhSAA0IaEk
PKQIgFlLKA0PqQJglhLGhIccATArCWPDQ64AmIWEGuGhRAD8q4QjSS+RRfu66wZMoVQAsAZrhb/vixmZ
tTqXkcVKwsMYATAkgVmrs0tAbngYKwD2SZhEQOwvUBIeagiAmITJ/gJwIulG0oOkq/BlBrUE9DALMzEb
M86e2gKawwIswAIswAIswAIswAIswAIswALWKOAxIoDeauDiIhRAbzVwa7N9vcZzEzc5NeHejstLarI7
PGOMMcYYY+JsAHNd5AEOCv+IAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnMoveDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGSSURBVHhe7ZhNSgQxEIWf4sKlO3Eu4Dk8h6fwBJ7CheDK
1aCHcSOIIO4F124dHnRBE2omP50eOp33QUGomXTnfUlvAgghhBBCCHFszgDcDMVxV1wAeAPwPxTH7HXD
/Si8FXvdsHUEsNcNL44A9rpBAiRAAiRAAiRAAiRAAiRAAiRAAloSwFsbXlw8A7gNf8ygtgCuhWvi2ma7
WeK93fgai/UI4CT8YwK1BPDdXMP4OVzjLHeMvLwMF10qoYYAL7wV11qdfQJKJEwVcCj8bAK8T6BUwhQB
sfCzfQLkEsC781KrJwCn4SSHUgEM/+DMtfoEsAkn1aaGhBIBiwhvTJWQK2BR4Y0pEnIELDK8USohVcCi
wxslElIENBHeyJUQE9BUeCNHwiEBTYY3UiXsE9B0eCNFwqvTp4DmwxsxCd9O78vpNRneiElIrSbDG1cA
PpxQqcW5fEbTlJ6Epnc+JPckrGLnQ1JPwqp2PiR2Ela58yE8CT9O+N8173zINYC/UXiO2euKcwB3Q3Es
hBBCCCHEEdkBVsTj8gS5a8wAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnMoveLeft.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEYSURBVHhe7ZoxigJBEEU/i4HhZuIF9h6ew1PsCTyHYGLo
ehgTxWzz9QCmStFTIE05Jjsq1e/Bhwm6Gd6H6YGmJAAAAACAZzOSNOtiz00xlbSTdOliz5/1oqyY/PFG
3rOoF2bknrxlXS/ORp+8ZV5vyMQj+WW9IRMTSYdA2rOS9FFvygLygTTyyCOfE+QDaeSRRz4nyAfSTch/
SToF0p5fSVtJPy/IprtUGexmaSzpHEi/W+x6bZA7xu/gZe8au2j9d5ovoPlPwLBD8C94qSf1IejYb3Af
yHtS/wYdSqCEAiVQQoESKKFACZRQoARKKFACJRSaHpBwHpWQekTG6Ssh/ZCUc6+EJsbknKYHJZ2mR2UB
AAAA4NVcAcDx5AIlrB0yAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnMoveRight.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAD5SURBVHhe7dqxCQJBFIThEQwMTbUC27AOq7ACqzAwNNRm
DEWwBGNT5bF3IMuGh7vs/B88uEBxZ0CF5UkAAADAv80lbYeJZytLSTdJn2HieZW/qGeHn/Dj3J1KOBcK
sCphVwhvV8KpEN6qhJmkYyH8OA9J6/xNvaEESkgogRISSqCEhBIoIaEESkgooZUS4iYnLjMukq6V5lkI
P85L0iY/9FTi3u73GqvVeUta5IefQlxe5h/W6uzzw0/BvgD7r0Cw/hGsrYm/wVoIXwhNeMITvk+EL4Qm
POEJ3yfCF0JbhA/WCxL2KzL2S1L2a3L2i5LBelUWAAAAtX0B0+Hj+Dk2eN8AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnDebugMode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAV9SURBVHhe7ZtHqy1FFIWXKCIoDk0js76ROYAJAwbEgQFF
xJGioEMD6MTwF3RuHKgoZp0YwIhTsw7ViWFiAJ9ZvksVFOvu6qrTp/u8mz7Y8Li1anftOl3Vu3b3k3bY
YRVcLuk7Sf912reSLnMnmxkC8iBb9o072cx4cL22ZfDAem1Ds5+kSyQd7Q0BvYH16jLHpDEwlpVysKSP
0yD/knSLC4zewHp1wDW5NjrGwphWwkGSPrWB/ivpdhcW9AbWq7tZ0j+m/VLSYS6cmij4nklwbY0eXRR8
tlknYSj4bLVJcF2Nlm4o+GyzTALr6/PgYu9L2m1/YxJuTf3OkPRo0K+G6+iLD8Anvst2rs0YvB9jnWxP
qAX/sqR9U8YWTcJnQR/sb79AQe3XxVcUPNdmDIzF+0wyCa3gM9Ek1Oydop/zbqCPLAefmWUSeLbmR11p
HnymNQnfS3oo7SU1GOzDSev9s3nwmdokEMOoPIEEw52x3qLgMz4J3LYvSrpQ0t4uHgAtfV6yW78WfIax
RXvCxS7sgQwvJxq9A4Bz0sAfl3SyN47glOSLicT3EP4DYMTQk62GkG3VNp+NRhQ8Y29lqU1uCnbnPyRd
4cIGe6Vf80FJb6fn9W/Jvkh/e2DkXcNy/T0I/jYXjmWZSSDwayV9Zf2HjMm5OvVtMXvwmVoicq4LC46S
9FEQYK+xoR3uTgu4dnTb50RscqJJeNVFibMbj7Ne+0nS+e488bppZw0+4xkeO7TDgP8MgmHZPCXpeknH
Sdo/Gf/mb08nTdQvutOeMB1jm5Uzg8GdZhpue3411z0r6UjTRtD/uaD/D8FyOCm4I/PZYRYes4u9YO1s
Wr7myf3vMF0PdwYbL3uCb4zkHKWGA9QoFi1dYxeYj+sCzZjgM3cH/q4yDRmja4asWnJftHTNBlemt/wy
/qjjtl+W580nB5wSxrDoZhuW3F3UMg42JadaOxsX63lZjgg2xhNNwwHKx9eydbigZqxpjrR+zCTDK3Xs
9lPxjPm+z9oPSUdpxubjrdk6moIGpLJlfx5rU3GD+X7DBR0042sKGnxt/anZl7T8D7WTJ5RtnB0WZcj/
Gk1Bg1+t/wHW3vI/1I6vsu0Xa+9hyP8aTUEDBlX2n3ICDrS2n629hyH/azQFDfwReKy1t/wPte+ytg25
BN6y/lNugjea7zdd0EEzPhfUjPT0veAxSDGj1HGwmQoSqtJ39BgkTfbUecjW4YKWeSJEJads5zQ4uhZX
wFLyk+UJppkkEZoiFaaSU2o41S0DPv2w46nwPlOlwhwQFp0EDiIl1wQaTnVjuTfwd6VpLgo0Q0bwl5qP
bvw9H6XqEn6xD03DurzLdC3wc0+wptl7/DjsL0MesfZJodjgM+oFEQ4vPwY6TnU9ewJr3m97LCqIsO94
QeR000yOl8QoSznnBSc4jM2Mgw25/fEpWcJ4zvOoY7f3DQ/DV/RS5EnTzV4Si4qir7gocdaIzSmyDVMU
jYKnJB39MhmWwwdBUL3GmvfbvmRlZfHoy4xFXozwkoP01QOsGY86L33VqL0Yib5UGcUywTtUce9PqSwT
wgkS49/8jQzPqz09zDYJ2/rlKAWNMa/HWZevTfh6HB/4wmf0cqQkmoTRr8en+kCCZ/qYDyTI8PboBxJT
fyJDIsOhxU+RJZzq0KD1/tlqkzD5JzIwx0dSVG9r8NhzfWQ+CbXgl/pIKtOahCh4blvPGLNtqs/kMrVJ
2BYfSmb4vO2T4GKlMcDoywzX1Wjpoi9V3KhJHOodp2JoEmrBg2tr9OiGJmHW4DPRJAwFDz7QGr26aBJW
EnyG9bVt/8NEZiP8lxmuvUf+y8yieGC9tmXwwHpty7BotRkLS9eblUVL7kuVrnfYoZ//AROOTSGrgwV9
AAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnDebugStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEXSURBVGhD7ZfBCcJAFETnqNiFJ5uxBHuxJ4/W4smDHSie
lIUshGGWRAPZ+fAfzCW75M+Gl0CAJEkSdy4A9nwxEh8ATwBnABtejEA5QM0NwJE3uDM+QE0orbh8TRit
uDjHXisu3IqtVlz0BOAhrpe8Bq22fJOecMnCbij6FuslVlpxuTEHAFexp8ZCKy6lKE/7LvaWdP9acaEW
tlpxkSnstOICc7HRiof/goVWPPQfumrFw5bQRSsetJTVteIBSwl9gLAKhX2JV9dFwUPn0kUXBQ+foqsu
Ci7QwkIXBRdR2Oii4EJj7HRRcKmCrS4KLhf+p74VC10UXJRjpYuCC9d0/7rMhYuX2OqiCKWLIpQuilC6
JEmSrMsX05VR/EVYTyAAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnFailMode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAFaSURBVGhD7Zk9TgMxEEYfNByBvyvRAaKAFkHFLbgQok1K
BBWXgAsEOpBAXxEJjbzyJjvrsYWfNFXGu99TxlllDZ1OZ4gd4AZ4AT6Bn0y9Ayf2IlEcActEyFy92QtF
sLtl+GoEbhPBxlQ1I6SZ/xvsEdi3TTXzYQQObEPt2NFoji4wEm14bXzVqf1wCqUE9JO7vscXcGEbtiVC
wFWilIDGRqHdJUoJiLOExDdwZRs3oaSAcJcoLSBcJSIEhJtElIBwkYgUEJMlNhVYP1Htujnq3t48hV2U
wz6Q5ix9E1nsohzNCzQ/Qt6cD2ziS9s4RKTA5PAiSsAlvIgQcAsvSgu4hhclBdzDi1ICzf+hsQ9Al/Ai
QsAtvCgl0PxrldloXmBlBJp6My2ejcADcGibauYuMUZjqpoDjj3gNRFwTFVxxCSOgUUiYK6qERA6Zr0G
nhKnNqmqZoQ6nf/ELxInwHd6df9CAAAAAElFTkSuQmCC
</value>
</data>
<data name="tslBtn_ActionOnly.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAFUSURBVDhPpZKhbsMwFEX7Cf2FsMGFDYcNzqyw8hdMRqWV
UWBlFFjJJDCSSWikkMJIJoEBBoEBBgV3em7TJN1CuitdmeSc9xS9zea/sY0Ftb7UqKsapjDQuYY+a+hM
Q50UZCrxzD1CoO89KK5zcP29rYO/evjBQ3yLdYEpzTR1nHiUAaLyHQf7ZOsClAKvdhKsxOQK5qygqZmE
PkmoVAJXD11q6MpgVUCw7+TUVsA3HLbgQUKwbtTfghEWu2QB+wuDrxL4MobMBWTFfwse8J5Nkhnsigj2
HEFkHKJkS8Ecds1d0nCIPYExbBbBpBHEVwSeMvBiJiB4hOgnBUlFMAsrx29bJO/b8PK9QHJIwPOnDeSB
B3gswTaPkXxEwGCB3gJDDbQKJuNgx2QmGEFMAlxdWJ/eICC4vwme7uAG0NlicPA0iT7sDNBpoKWqZReC
F7s46VfzAzFvgHyRmx3AAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtn_Record.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAJXSURBVDhPtZJfSJNRGMY/6MJuiv5QV10VRDdRRFBdZBS2
wmaLRWKLVouYk5RNlrWt1Jw6dOl0adoWzW2oTWclikrREFqOzEpjW/RHos3Itax9m5tzWTzxHZnyqRBd
9MDDuXjP83vf83Io6n/I2a2B454anU1KLKwt0tPBIXQ018y5qfoUQoEWRAO34fdW4ZKYg5pyOW5qVdCX
FywGMqE4bUci3I54qBXWRjliExaUXcnFmwEFruZyoRDtRMB5BhO9GyEVHmVDGAATToRtaNCcxrCrCvTn
Oox7VfjoOocuIw/ZglS0FG7AyxoKOSePsAHtlupZAH0X2kIhiuVZUOVl4nIOH3IxDzIRFxJBGmqlmwgg
Kz2VDWg1aTFNt2E6aEBsrALB13nwWNYSu81rMNy4As/1KSTMOG3PdjbAatBgKtiEKV8pYm8vIPrqOOju
ldCZe1Fh6MS1G21QaK2QqY3IVuohzK9kA0z1akz69Yh6xZgc4iLyZAe+PlhHwkklZn4hFI7DNx5CpqQE
GWdV8xCjrgj0u1JEBjmI9G9FuG89/GaKdGZkuu8kNtgccI8GSPjRgAeH+KJZSH2lEt9HLiLs2AK6ZzWC
9hSM3qHI2D9nfuNHJA7flxDcHwJwjXxCukAGDl+EA4ePIXXvPlC1ZQUIPpOA7lmFbx3LMda8DJ4GClK1
kYydnOCWzYE6ax+6+j3kZLx722ZQ14vzyQdJbjlpsVLP6vzY9Z6E7Q+HYet9MQ9gpCs6D6mQBxH/IDL2
7yIFZtvMm5PdlvIcYCmdkJSQC3/zwtw/6w/y9PJ0ELb+pAAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtn_ExpandNode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEoSURBVDhPxZAhj4NAEIX7l/gLuJPtP2hQJxvU2QZV2aCQ
TTDIJpizTdYgSTCViBGVFSMqXvN2WbphW3fJTfICDPO+ebur1V9Ue1EkXxnKsyKv1D7bDlZl43rZQbDZ
C9KfSTvBC9A5gDfxPRR7BUGnCVYpku8hBoRiDTcHozk7qt3qlWwDgOlkNrGWsOEq7scD0AfQ/g62/0pw
cQ1fpp8M4fdk1jtQn817gIxqh6MEvYAz3ExzDJgihWL5O+ARuF3ugNyAuokAruFrCWMCbx7GNwAfyR6h
E7txVi8wXRC/MSg/Ad4lSNfuCG67wlz1MyBUeAe8QEanue0V5amNAXbL6LSE8Qic4WaaIwAbjLrZ5sj3
JYpj7QarGsWhRrYrkK5zOxOCZ8C/1hOIQgeeYXTusQAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="StuMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 21</value>
</metadata>
<metadata name="CmsPlanGrid.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>235, 17</value>
</metadata>
<data name="MsiGridRowBlockInsert.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAANhJREFUOE+tUi0PwjAU3F/iL+Cw+wekCkmmZknV5FI1SVIzuaRmdskMkmQGiZiY
nHgCceR10JAG9pFxyane3ct7vSBYC1M20EUNnQ9UZwOZGvi6n8AH6DFQpnphwMtIPdD2QBSr+QHvqWy0
7IDwIOcHbHYC3+jrVkNlBky+j0wUxFFa+jofTsBmXq+5A/UNMBeCLmk0gB8debI1XgFdEWROEOl4AMMJ
opOyRlUQoowQJoRt3E4GOPC+/qHtsU3VwJS1a+PQxKVF+ncTxeom7qf/18E/ytImPgFdqxqYZ0UkZwAA
AABJRU5ErkJggg==
</value>
</data>
<data name="MsiGridRowBlockDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAN1JREFUOE9jYKAG2Hbwwv+1O0/9X7zh0P+Zy3b9nzBv8//e2ev/o6vDCdbtOv0f
BL58//f/8ds//y89+vXf1DOZeAPmr9mPovn4rZ//ncLyiTdgwryNYBtBGKRxxsLVcDx5zvL/XVMX/m/q
mYViIAsTC24LQBoP3/jzf9u5n/+XHvz2f9LmT2DDQZrQMbpeMADZuO7Ej//tyx78L515939Kzx2MMEHR
jB4Lla1TwF6BeQuGkQ1AAdhiISK7CbcGdIAtFvDaiA5ABqA7lyQDsHmBJAMo9gJyQiLLCwMKAIGPAPoV
xeALAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsBtn_CheckAction.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAGNJREFUOE+lzMEJADEIRFFr2lq2nO0kvdmADXjb4EEIY1RCBv7NJ9H13u8/bsXM
HBKRkKr2GJHDFiOynkE9RuSwxX64gyXG4wzaWpzBEuMDhCX24wym2I/XdgsYUQZtAR93uwnUrvqqK2la
WwAAAABJRU5ErkJggg==
</value>
</data>
<data name="tsBtn_UncheckAction.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAFNJREFUOE+ly8ENACAIBEGLtBxrpQEa4Kfxp6fAGTfZ55TyXW39+RWLiLuqbtMY
oZlx+AYp7MEURzDEGXQxA2cHZmGKEa0wxIgQuhjRDc4O/PxvA9b+IgeMUL95AAAAAElFTkSuQmCC
</value>
</data>
<data name="TsmiDebugStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAALxJREFUOE+tk4ENxCAIRdmJndiJBW6YC8PcBlw+WkVizTU5kp9Yy38gtkT/DhZz
VshDBGFPzGvuEpdJrGmYs8RcbQMSNZduXioXc4jVX+/PhOAhqnczIKvZmi4AjsM6AfW8LuR6QboBe0a0
QBTQ1j8qzIpIHpADYA71BgBhNr8DUrUsJJ4BvA7ocQex2AAw3LxXAWOIsUhdVPMWkK9x18VRnK/wKYS1
zeUu4iXaq8YYWvmET4EW2//RdDJ+AdNswjzahYpaAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsmiDebugEnd.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAHpJREFUOE+9kTsOwCAMQzNxbhbOnSqoocZ8Ujr0SRmo7JcKRBaklHQ3nB+wUCml
GxTYmTsVDnFZcj4XYPmVQFQ7iX+bCnBj22RhkIQCLwxzh0MBD5e3AqaGoRzeAYNb8RX+EzgoCgSq63lk
G0EMCtofneCCT2WjuwviAtoUGxZ57ZXzAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsmiDebugContinue.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABIAAAARCAYAAADQWvz5AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAALhJREFUOE+l1LsNwyAQgGGPkFEyAz07pHDPCqlYI0MwBVUa+tSIgoZHeclFQiIn
BzD8EpXhkyweW0oJUko+hHDdVkJICAHWWp9zvtHvwyHEGIN938E5B9NYgQpmjIEY453O61ZDODjnBXvQ
uc0oVDCt9Rfz3l/omsOOoDKUUrijzyGsBZ3CelDBYowvuvanHiSlHDuwLWj4t7B/0CkEo9DU1mM1NH0Y
sfquTV8PDKHlC4shtPyEfHoD0XQ+lbNEzJUAAAAASUVORK5CYII=
</value>
</data>
<data name="TsmiDebugStep.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABIAAAARCAYAAADQWvz5AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAATxJREFUOE+tlLFugzAQhvMIfYQ+Qh+hYkfKytaBncxMnVgjdqSOjB3Y6czURygr
YvDC2aOrz8KR4wS1kbD0S9bd+buz7+CgtT4f9lhaaysiH7H94QWo73urtf5USj3F/n8vQEmS2K7rgH1v
wYwxbyLyFQrbJcCDUNM0DmaMeY4haBxHF4PYi8jxAgtBqKoqYGpZlhf8BBODjcM+jj02fC42BnnYNE0O
RiPqunY2DqdparMsc/uyLG3btgDPd0Eoz3M7z7PLykFsQEL5OBH52QT5yshcFIU7EPux4YOxCfIV0R2q
Yh/CAPiKibkLCh+c+1OVh/AuQKJkpxtQ3DXaG1YzDINTCHIjEILWDtzMESNAF5kfHpZE68wpY8zr1Rz9
NdnrNXmPk4i8h1W79ci3RqXEeF05Ae319e/yP/oF9/8g1rKWugAAAAAASUVORK5CYII=
</value>
</data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>50</value>
</metadata>
</root>

View File

@@ -0,0 +1,901 @@
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports UTS_Core.DebugLog
Imports UTS_Core.UTSModule.Test
Imports UTS_Core.UTSModule.Test.Command
Imports UTS_Core.UTSModule.Test.StatusMonitor
Namespace UTSModule.Station
Public Class FrmStationPlan
Implements IUtsTest
Implements IProcessStation
Implements IProductionLine
Private _utsApp As UtsAppForm
#Region "初始化"
Public Property StationPlan() As StationTestPlan
Private _planGrid As StationPlanGrid
Private _nodeGrid As RowNodeGrid
''' <summary>
''' 显示窗体
''' </summary>
''' <param name="parentControl"></param>
Public Sub ShowForm(parentControl As Control)
FormBorderStyle = FormBorderStyle.None
TopLevel = False
Dock = DockStyle.Fill
Parent = parentControl
Enabled = StationPlan IsNot Nothing
Show()
End Sub
''' <summary>
''' 产线变化
''' </summary>
Public Sub ProductionLineChanged() Implements IProductionLine.ProductionLineChanged
'Todo:产线变化代码
ApplicationLog.WriteInfoLog($"编辑页面生产线变更中。")
ApplicationLog.WriteInfoLog($"编辑页面生产线变更完成。")
End Sub
''' <summary>
''' 测试站修改时处理函数
''' </summary>
Public Sub Station_Changed() Implements IProcessStation.StationChanged
ApplicationLog.WriteInfoLog($"编辑页面站位变更中PN{_utsApp.ProcessStation.ParentProject.Name} - SN:{_utsApp.ProcessStation.Name} - TP:{_utsApp.ProcessStation.Packet.Name}!")
StationPlan = CType(_utsApp.ProcessStation.Packet.StationPlan, StationTestPlan)
Enabled = StationPlan IsNot Nothing
If StationPlan IsNot Nothing Then
_planGrid.HeadNode = StationPlan.HeadNode
_planGrid.UpdateGrid()
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.None
_tester.ProcessStation = _utsApp.ProcessStation
End If
ApplicationLog.WriteInfoLog($"编辑页面站位变更完成。")
End Sub
''' <summary>
''' 初始化行节点的风格
''' </summary>
Private Sub InitRowNodeStyles()
If IO.File.Exists(UtsPath.NodeStylePath()) Then
RowNode.LoadNodeStyles(UtsPath.NodeStylePath())
Else
RowNode.InitNodeStyles()
End If
End Sub
Private Sub InitStationPlanGrid()
_planGrid = New StationPlanGrid With {
.Grid = GrdStationPlan}
End Sub
Private Sub InitRowNodeGrid()
_nodeGrid = New RowNodeGrid With {
.Grid = GrdRowNode,
.RtxColTip = RtxColTip}
AddHandler _planGrid.PlanNodeSelectChanged, AddressOf PlanGridSelectChanged
AddHandler _planGrid.PlanGridCommandChanged, AddressOf PlanGridCommandChanged
'todo:检测撤销队列的变化
AddHandler _planGrid.PlanNodeSelectChanged, AddressOf _nodeGrid.Grid_PlanNodeSelectChanged
AddHandler _planGrid.RowNodeTextChanged, AddressOf _nodeGrid.Grid_RowNodeTextChanged
AddHandler _nodeGrid.RowNodeTextChanged, AddressOf _planGrid.Grid_RowNodeTextChanged
End Sub
Private Sub FrmStationPlan_Load(sender As Object, e As EventArgs) Handles Me.Load
ApplicationLog.WriteInfoLog($"编辑页面加载中。")
'初始化UTS窗体信息,失败则关闭窗体
If InitializeUtsApp() = False Then Return
'初始化窗体页面
InitializeForm()
ApplicationLog.WriteInfoLog($"编辑页面加载完成。")
End Sub
Public Sub PlanGridSelectChanged(sender As Object, ByVal e As PlanNodeSelectChangedEventArgs)
TsBtnBackward.Enabled = _planGrid.CanBackward
TsBtnForward.Enabled = _planGrid.CanForward
'表格移动
If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
Dim canMove As Boolean = True
Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
Dim startLever As Integer = GrdStationPlan.Tree.FindNode(startMoveRow).Level
For i As Integer = startMoveRow To startMoveRow + moveRows - 1
If startLever <> GrdStationPlan.Tree.FindNode(startMoveRow).Level Then
canMove = False
Exit For
End If
Next
TsBtnMoveDown.Enabled = canMove
TsBtnMoveLeft.Enabled = canMove
TsBtnMoveRight.Enabled = canMove
TsBtnMoveUp.Enabled = canMove
End Sub
Public Sub PlanGridCommandChanged(sender As Object, e As EventArgs)
TsBtnUndo.Enabled = _planGrid.CanUndo
TsBtnRedo.Enabled = _planGrid.CanRedo
MsiUndo.Enabled = _planGrid.CanUndo
MsiRedo.Enabled = _planGrid.CanRedo
End Sub
Private Function InitializeUtsApp() As Boolean
_utsApp = UtsAppForm.CreateSingleton()
_utsApp.AddStatisticsObserver(Me)
Try
If _utsApp.IsInitialized = False Then
_utsApp.Initialize() 'Todo:可根据需要限定可选站位
End If
Catch ex As Exception
ApplicationLog.WriteErrorLog($"初始化窗体失败,原因:{ex.Message}!")
MsgBox($"初始化窗体失败,原因:{ex.Message}")
Close()
Return False
End Try
Return True
End Function
Private Sub InitializeForm()
InitRowNodeStyles()
InitStationPlanGrid()
InitRowNodeGrid()
InitTester()
End Sub
Private Sub ClearText()
If RtxOutputInfo.InvokeRequired Then '判断是否需要开委托
RtxOutputInfo.Invoke(New Action(AddressOf ClearText))
Return
End If
RtxOutputInfo.Clear()
End Sub
Private Sub AppendText(cor As Color, txt As String)
If RtxOutputInfo.InvokeRequired Then '判断是否需要开委托
RtxOutputInfo.Invoke(New Action(Of Color, String)(AddressOf AppendText), New Object() {cor, txt})
Return
End If
RtxOutputInfo.SelectionColor = cor
RtxOutputInfo.AppendText($"{Now:[HH:mm:ss:fff}]-{txt}{vbCrLf}")
RtxOutputInfo.ScrollToCaret()
End Sub
''' <summary>
''' 快捷键操作
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TvwStationPlan_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.Modifiers = Keys.Control Then
Select Case e.KeyCode
Case Keys.O '加载
LoadTreeViewFormXml()
Case Keys.S '保存
ExportTreeViewToXml()
End Select
ElseIf e.Modifiers = Keys.Alt Then
Select Case e.KeyCode
Case Keys.O '加载指定节点文件
LoadNodeFile(_planGrid.ActiveNode)
Case Keys.S '保存指定节点
SaveNodeFile(_planGrid.ActiveNode)
End Select
ElseIf e.Modifiers = Keys.None Then
End If
End Sub
#End Region
#Region "增删节点"
''' <summary>
''' 读取XML,加载树状视图
''' </summary>
Private Sub LoadTreeViewFormXml()
Dim revStationPlanPath As String = $"{UtsPath.GetStationPacketTestPlanDirPath(StationPlan.ParentPacket.Name)}\Main.xml"
Try
StationPlan.LoadFile(revStationPlanPath)
_planGrid.UpdateGrid()
' _planGrid.GridUpdateEventTrigger(GrdStationPlan) '笨方法,开始就触发一次刷新
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.None
If StationEditStatusMonitor.StationEditStatus <> StationEditStatusMonitor.StationEditStatusEnum.Saved Then
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Saved
End If
Catch ex As Exception
ApplicationLog.WriteErrorLog($"加载测试站流程发生错误,原因:{ex.Message}")
MsgBox($"加载测试站流程发生错误,原因:{ex.Message}")
StationPlan.CreateStationPlan()
End Try
End Sub
''' <summary>
''' 读取XML,加载树状视图
''' </summary>
Private Sub LoadTreeViewFormXml(revStationPlanPath As String)
Try
StationPlan.LoadFile(revStationPlanPath)
_planGrid.UpdateGrid()
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.None
If StationEditStatusMonitor.StationEditStatus <> StationEditStatusMonitor.StationEditStatusEnum.Saved Then
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Saved
End If
Catch ex As Exception
ApplicationLog.WriteErrorLog($"加载测试站流程发生错误,原因:{ex.Message}")
MsgBox($"加载测试站流程发生错误,原因:{ex.Message}")
StationPlan.CreateStationPlan()
End Try
End Sub
''' <summary>
''' 将树状视图导出为Xml
''' </summary>
Private Sub ExportTreeViewToXml()
'保存至项目文件
Dim revStationPlanPath As String = $"{UtsPath.GetStationPacketTestPlanDirPath(StationPlan.ParentPacket.Name)}\Main.xml"
StationPlan.SaveFile(revStationPlanPath)
'备份至临时文件
Dim tempPath As String = $"{UtsPath.StationDesignDirPath()}\Main.xml"
StationPlan.SaveFile(tempPath)
If StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Changed Then
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Saved
End If
End Sub
Private Sub TsBtnMoveUp_Click(sender As Object, e As EventArgs) Handles TsBtnMoveUp.Click
If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
_planGrid.NodeMoveUp(startMoveRow, moveRows)
End Sub
Private Sub TsBtnMoveDown_Click(sender As Object, e As EventArgs) Handles TsBtnMoveDown.Click
If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
_planGrid.NodeMoveDown(startMoveRow, moveRows)
End Sub
Private Sub TsBtnMoveLeft_Click(sender As Object, e As EventArgs) Handles TsBtnMoveLeft.Click
If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
_planGrid.NodeMoveLeft(startMoveRow, moveRows)
End Sub
Private Sub TsBtnMoveRight_Click(sender As Object, e As EventArgs) Handles TsBtnMoveRight.Click
If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
_planGrid.NodeMoveRight(startMoveRow, moveRows)
End Sub
Private Sub TsBtnOpen_Click(sender As Object, e As EventArgs) Handles TsBtnOpen.Click
Using xml As New OpenFileDialog
xml.Filter = $"流程文件(*.xml)|*.xml"
If xml.ShowDialog() = DialogResult.OK Then
ApplicationLog.WriteInfoLog($"编辑页面执行流程正在加载{xml.FileName}")
LoadTreeViewFormXml(xml.FileName)
ApplicationLog.WriteInfoLog($"编辑页面执行流程加载完成。")
End If
End Using
_planGrid.ClearNavigation()
_planGrid.ClearCommand()
PlanGridSelectChanged(Nothing, Nothing)
PlanGridCommandChanged(Nothing, Nothing)
End Sub
Private Sub TsBtnLoad_Click(sender As Object, e As EventArgs) Handles TsBtnLoad.Click
If MsgBox("重载会将流程返回为上一次保存的流程状态,是否继续", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
ApplicationLog.WriteInfoLog($"编辑页面执行流程重载中。")
LoadTreeViewFormXml()
_planGrid.ClearNavigation()
_planGrid.ClearCommand()
PlanGridSelectChanged(Nothing, Nothing)
PlanGridCommandChanged(Nothing, Nothing)
ApplicationLog.WriteInfoLog($"编辑页面执行流程重载完成。")
End If
End Sub
Private Sub TsBtnSave_Click(sender As Object, e As EventArgs) Handles TsBtnSave.Click
'记录名称重名检测
If _planGrid.CheckRecordDuplicateName() = False Then Return
ApplicationLog.WriteInfoLog($"编辑页面执行流程保存中。")
ExportTreeViewToXml()
ApplicationLog.WriteInfoLog($"编辑页面执行流程保存完成。")
End Sub
#End Region
#Region "保存与读取节点文件"
Private Sub SaveNodeFile(node As RowNode)
If node Is Nothing Then Return
Using dialog As New SaveFileDialog
dialog.Title = $"请输入需要保存节点的文件名"
dialog.AddExtension = True
dialog.Filter = $"节点文件(*.xml)|*.xml"
If dialog.ShowDialog() <> DialogResult.OK Then Return
node.ExportToXml(dialog.FileName)
End Using
End Sub
Private Sub LoadNodeFile(node As RowNode)
If node Is Nothing Then Return
Using dialog As New OpenFileDialog
dialog.Title = $"请选择需要加载的节点文件"
dialog.Filter = $"节点文件(*.xml)|*.xml"
dialog.Multiselect = False
If dialog.ShowDialog() <> DialogResult.OK Then Return
Dim childRowNode As New RowNode
childRowNode.LoadFormXml(dialog.FileName)
_planGrid.NodesAdd(childRowNode)
If node.Expanded = False Then node.Expand() '展开当前节点
End Using
End Sub
Private Sub MsiSaveNodeFile_Click(sender As Object, e As EventArgs) Handles MsiSaveNodeFile.Click
SaveNodeFile(_planGrid.ActiveNode)
End Sub
Private Sub MsiLoadNodeFile_Click(sender As Object, e As EventArgs) Handles MsiLoadNodeFile.Click
LoadNodeFile(_planGrid.ActiveNode)
End Sub
#End Region
#Region "调试反馈"
Private Sub TestStart(sender As Object, e As EventArgs) Implements IUtsTest.TestStart
If _tester.DebugMode = False Then Return
ClearText()
AppendText(Color.Blue, $"TestStart!{vbCrLf}")
End Sub
Private Sub TestPass(sender As Object, e As EventArgs) Implements IUtsTest.TestPass
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"TestPass!{vbCrLf}")
End Sub
Private Sub TestFail(sender As Object, e As TestFailEventArgs) Implements IUtsTest.TestFail
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"TestFail!{vbCrLf}")
End Sub
Private Sub TestPause(sender As Object, e As TestPauseEventArgs) Implements IUtsTest.TestPause
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"TestPause!{vbCrLf}")
End Sub
Private Sub TestEnd(sender As Object, e As TestEndEventArgs) Implements IUtsTest.TestEnd
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"TestEnd!{vbCrLf}")
End Sub
Private Sub TestNodeChanged(sender As Object, e As TestNodeChangedEventArgs) Implements IUtsTest.TestNodeChanged
If _tester.DebugMode = False Then Return
If GrdStationPlan.InvokeRequired Then '判断是否需要开委托
GrdStationPlan.Invoke(New Action(Of Object, TestNodeChangedEventArgs)(AddressOf TestNodeChanged), New Object() {sender, e})
Return
End If
AppendText(Color.Black, $"Row:{e.Node.RowListIndex};Desc:{e.Node.Description}")
_planGrid.TestNodeChanged(e.Node)
End Sub
Private Sub TestNodeResultChanged(sender As Object, e As TestNodeResultChangedEventArgs) Implements IUtsTest.TestNodeResultChanged
If _tester.DebugMode = False Then Return
If GrdStationPlan.InvokeRequired Then '判断是否需要开委托
GrdStationPlan.Invoke(New Action(Of Object, TestNodeResultChangedEventArgs)(AddressOf TestNodeResultChanged), New Object() {sender, e})
Return
End If
Dim cor As Color
If e.TestReturn.ExecuteResult Then
cor = Color.Green
Else
cor = Color.Red
End If
'Dim txt As String = $"Result:{e.TestReturn.ExecuteResult};Retrun:{e.TestReturn.RecordValue};Lower:{e.TestReturn.LowerLimit};Upper:{e.TestReturn.UpperLimit};Tip:{e.TestReturn.ExecuteResultTipString}{vbCrLf}"
'Momo 2023-12-15 提示信息增加两个标准显示
Dim txt As String = $"Result:{e.TestReturn.ExecuteResult}; Retrun:{e.TestReturn.RecordValue}; Lower_1:{e.TestReturn.LowerLimit};Upper_1:{e.TestReturn.UpperLimit}; Lower_2:{e.TestReturn.LowerLimit_2};Upper_2:{e.TestReturn.UpperLimit_2}; Tip:{e.TestReturn.ExecuteResultTipString}{vbCrLf}"
AppendText(cor, txt)
_planGrid.NodeCompleted(e.Node, e.TestReturn)
End Sub
Private Sub TestNodeCompleted(sender As Object, e As TestNodeCompletedEventArgs) Implements IUtsTest.TestNodeCompleted
If _tester.DebugMode = False Then Return
If GrdStationPlan.InvokeRequired Then '判断是否需要开委托
GrdStationPlan.Invoke(New Action(Of Object, TestNodeCompletedEventArgs)(AddressOf TestNodeCompleted), New Object() {sender, e})
Return
End If
Dim cor As Color
If e.TestReturn.ExecuteResult Then
cor = Color.Green
Else
cor = Color.Red
End If
'Dim txt As String = $"Result:{e.TestReturn.ExecuteResult};Retrun:{e.TestReturn.RecordValue};Lower:{e.TestReturn.LowerLimit};Upper:{e.TestReturn.UpperLimit};Tip:{e.TestReturn.ExecuteResultTipString}{vbCrLf}"
'Momo 2023-12-15 提示信息增加两个标准显示
Dim txt As String = $"Result:{e.TestReturn.ExecuteResult}; Retrun:{e.TestReturn.RecordValue}; Lower_1:{e.TestReturn.LowerLimit};Upper_1:{e.TestReturn.UpperLimit}; Lower_2:{e.TestReturn.LowerLimit_2};Upper_2:{e.TestReturn.UpperLimit_2}; Tip:{e.TestReturn.ExecuteResultTipString}{vbCrLf}"
AppendText(cor, txt)
_planGrid.NodeCompleted(e.Node, e.TestReturn)
End Sub
Private Sub TestStatusChanged(sender As Object, e As TestStatusChangedEventArgs) Implements IUtsTest.TestStatusChanged
If _tester.DebugMode = False Then Return
If StuMain.InvokeRequired Then '判断是否需要开委托
StuMain.Invoke(New Action(Of Object, TestStatusChangedEventArgs)(AddressOf TestStatusChanged), New Object() {sender, e})
Return
End If
Select Case e.Status
Case TestStatusMonitor.TestStatusEnum.WaitForTest
TssLblTestStatus.ForeColor = Color.Gray
TssLblTestStatus.Text = $"未测试"
Case TestStatusMonitor.TestStatusEnum.Testing
TssLblTestStatus.ForeColor = Color.Blue
TssLblTestStatus.Text = $"测试中"
Case TestStatusMonitor.TestStatusEnum.TestPass
TssLblTestStatus.ForeColor = Color.Green
TssLblTestStatus.Text = $"测试成功"
Case TestStatusMonitor.TestStatusEnum.TestFail
TssLblTestStatus.ForeColor = Color.Red
TssLblTestStatus.Text = $"测试失败"
Case TestStatusMonitor.TestStatusEnum.DeviceError
TssLblTestStatus.ForeColor = Color.DarkRed
TssLblTestStatus.Text = $"设备错误"
Case Else
Console.WriteLine($"UpdateTestStatus Unknown:{e.Status}")
End Select
End Sub
Private Sub TestTimeChanged(sender As Object, e As TestTimeEventArgs) Implements IUtsTest.TestTimeChanged
If _tester.DebugMode = False Then Return
If StuMain.InvokeRequired Then '判断是否需要开委托
StuMain.Invoke(New Action(Of Object, TestTimeEventArgs)(AddressOf TestTimeChanged), New Object() {sender, e})
Return
End If
TssLblTestTime.Text = $"TimeExpend:{e.TimeElapsed.Hours:D2}:{e.TimeElapsed.Minutes:D2}:{e.TimeElapsed.Seconds:D2}:{e.TimeElapsed.Milliseconds:D3}"
End Sub
Private Sub TestProgressChanged(sender As Object, e As TestProgressChangedEventArgs) Implements IUtsTest.TestProgressChanged
If _tester.DebugMode = False Then Return
If StuMain.InvokeRequired Then '判断是否需要开委托
StuMain.Invoke(New Action(Of Object, TestProgressChangedEventArgs)(AddressOf TestProgressChanged), New Object() {sender, e})
Return
End If
If e.Percent < TssBarTestProgress.Minimum Then e.Percent = TssBarTestProgress.Minimum
If e.Percent > TssBarTestProgress.Maximum Then e.Percent = TssBarTestProgress.Maximum
TssBarTestProgress.Value = CType(e.Percent, Integer)
End Sub
Private Sub RetryProgressChanged(sender As Object, e As TestProgressChangedEventArgs) Implements IUtsTest.RetryProgressChanged
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"重试剩余:{e.Percent:F2}%")
End Sub
Public Sub TestCountChanged(sender As Object, e As TestCountChangedEventArgs) Implements IUtsTest.TestCountChanged
If _tester.DebugMode = False Then Return
AppendText(Color.Blue, $"当前测试总数:{e.Count},成功数:{e.PassCount},失败数:{e.FailCount}")
End Sub
#End Region
#Region "调试模式"
Private _tester As UtsTester
Private Sub InitTester()
_tester = UtsTester.CreateTester()
AddHandler _tester.TestStart, AddressOf TestStart
AddHandler _tester.TestPass, AddressOf TestPass
AddHandler _tester.TestFail, AddressOf TestFail
AddHandler _tester.TestPause, AddressOf TestPause
AddHandler _tester.TestEnd, AddressOf TestEnd
AddHandler _tester.TestStatusChanged, AddressOf TestStatusChanged
AddHandler _tester.TestNodeChanged, AddressOf TestNodeChanged
AddHandler _tester.TestNodeCompleted, AddressOf TestNodeCompleted
AddHandler _tester.TestNodeResultChanged, AddressOf TestNodeResultChanged
AddHandler _tester.TestProgressChanged, AddressOf TestProgressChanged
AddHandler _tester.RetryProgressChanged, AddressOf RetryProgressChanged
AddHandler _tester.TestTimeChanged, AddressOf TestTimeChanged
AddHandler StationEditStatusMonitor.StationEditStatusChanged, AddressOf _tester.StationEditStatusChanged
End Sub
''' <summary>
''' 调试模式
''' </summary>
Private Sub TsBtnDebugMode_Click(sender As Object, e As EventArgs) Handles TsBtnDebugMode.Click
Static editMode As Boolean = False
editMode = Not editMode
_planGrid.DebugMode = editMode
TsBtnDebugMode.Text = $"{IIf(editMode, $"编辑模式", $"调试模式")}"
End Sub
Private _debugTest As Thread
Private Sub TsBtnDebug_Click(sender As Object, e As EventArgs) Handles TsBtnDebugStart.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.StartDebugTest) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub TsBtnFailMode_Click(sender As Object, e As EventArgs) Handles TsBtnFailMode.Click
Static flg As Boolean = False
flg = Not flg
If flg Then
_tester.TestFailMode = UtsTester.TestFailModeEnum.AllFail
TsBtnFailMode.Text = $"全部退出"
Else
_tester.TestFailMode = UtsTester.TestFailModeEnum.StepFail
TsBtnFailMode.Text = $"单步退出"
End If
End Sub
Private Sub TsmiDebugStart_Click(sender As Object, e As EventArgs) Handles TsmiDebugStart.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.StartDebugTest) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub 执行1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 执行1ToolStripMenuItem.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
'_planGrid.ClearDebug()
StartDebugThread(AddressOf _tester.TestNode, _planGrid.ActiveNode)
End Sub
Private Async Sub 执行2ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 执行2ToolStripMenuItem.Click
'If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
' MsgBox($"请先退出当前调试后重试")
' Return
'End If
'_planGrid.ClearDebug()
'StartDebugThread(AddressOf _tester.TestNode, _planGrid.ActiveNode)
' _planGrid.ClearDebug()
Dim row As Integer = _planGrid.ActiveNode.RowListIndex
Dim result As TestCommandReturn = Await Task.Run(Function()
Return _tester.TestNode(_planGrid.ActiveNode)
End Function, _testerCancel)
If result IsNot Nothing AndAlso result.ExecuteResult Then _planGrid.SetRowFocus(row + 1)
End Sub
Private Sub TsmiStepDebug_Click(sender As Object, e As EventArgs) Handles TsmiDebugStep.Click
_tester.StepTest()
End Sub
Private Sub TsmiContinueDebug_Click(sender As Object, e As EventArgs) Handles TsmiDebugContinue.Click
_tester.ContinueTest()
End Sub
Private Sub TsmiDebugEnd_Click(sender As Object, e As EventArgs) Handles TsmiDebugEnd.Click
_tester.ExitTest()
End Sub
Private Sub TsmiDebugSetup_Click(sender As Object, e As EventArgs) Handles TsmiDebugSetup.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.TestSetupModule) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub TsmiDebugMain_Click(sender As Object, e As EventArgs) Handles TsmiDebugMain.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.TestMainModule) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub TsmiDebugPass_Click(sender As Object, e As EventArgs) Handles TsmiDebugPass.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.TestPassModule) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub TsmiDebugFail_Click(sender As Object, e As EventArgs) Handles TsmiDebugFail.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.TestFailModule) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub TsmiDebugCleanup_Click(sender As Object, e As EventArgs) Handles TsmiDebugCleanup.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
_debugTest = New Thread(AddressOf _tester.TestCleanupModule) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private _testerCancel As New CancellationToken
Private Sub TsmiDebugNode_Click(sender As Object, e As EventArgs) Handles TsmiDebugNode.Click
'If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
' MsgBox($"请先退出当前调试后重试")
' Return
'End If
_planGrid.ClearDebug()
'Dim row As Integer = _planGrid.ActiveNode.RowListIndex
'Dim result As TestCommandReturn = Await Task.Run(Function()
' Return _tester.TestNode(_planGrid.ActiveNode)
' End Function, _testerCancel)
'If result IsNot Nothing AndAlso result.ExecuteResult Then _planGrid.SetFocus(row + 1, StationPlanGrid.ColNames.Description)
StartDebugThread(AddressOf _tester.TestNode, _planGrid.ActiveNode)
End Sub
Private Sub TsmiDebugNodeBegin_Click(sender As Object, e As EventArgs) Handles TsmiDebugNodeBegin.Click
If _debugTest IsNot Nothing AndAlso _debugTest.IsAlive Then
MsgBox($"请先退出当前调试后重试")
Return
End If
_planGrid.ClearDebug()
StartDebugThread(AddressOf _tester.TestBeginWithNode, _planGrid.ActiveNode)
End Sub
Private Sub StartDebugThread(start As ParameterizedThreadStart)
_debugTest = New Thread(start) With {
.IsBackground = True
}
_debugTest.Start()
End Sub
Private Sub StartDebugThread(start As ParameterizedThreadStart, parameter As Object)
_debugTest = New Thread(start) With {
.IsBackground = True
}
_debugTest.Start(parameter)
End Sub
Private Sub TsBtnSaveAs_Click(sender As Object, e As EventArgs) Handles TsBtnSaveAs.Click
Using dlg As New SaveFileDialog
dlg.Filter = "Excel 文件(*.xls)|*.xls|CSV 文件(*.csv)|*.csv|PDF 文件(*.pdf)|*.pdf|Flexcell 文件(*.flx)|*.flx"
dlg.AddExtension = True
If dlg.ShowDialog <> DialogResult.OK Then Return
Cursor = Cursors.WaitCursor
ApplicationLog.WriteInfoLog($"编辑页面执行流程导出中。")
Try
Select Case dlg.FilterIndex
Case 1
GrdStationPlan.ExportToExcel(dlg.FileName, True, True)
Case 2
GrdStationPlan.ExportToCSV(dlg.FileName, True, True)
Case 3
GrdStationPlan.ExportToPDF(dlg.FileName)
Case 4
GrdStationPlan.SaveFile(dlg.FileName)
End Select
ApplicationLog.WriteInfoLog($"编辑页面执行流程导出完成。")
Catch ex As Exception
ApplicationLog.WriteErrorLog($"编辑页面执行流程导出失败,原因:{ex.Message}")
MsgBox($"编辑页面执行流程导出失败,原因:{ex.Message}")
End Try
Cursor = Cursors.Arrow
End Using
End Sub
Private Sub tslBtn_ActionOnly_Click(sender As Object, e As EventArgs) Handles tslBtn_ActionOnly.Click
Static OnlyShowAction As Boolean = False
OnlyShowAction = Not OnlyShowAction
_planGrid.SetNodeActionShowMode(OnlyShowAction)
End Sub
Private Sub TsBtn_Record_Click(sender As Object, e As EventArgs) Handles TsBtn_Record.Click
Static OnlyShowRecord As Boolean = False
OnlyShowRecord = Not OnlyShowRecord
_planGrid.SetNodeRecordShowMode(OnlyShowRecord)
End Sub
Private Sub TsBtn_ExpandNode_Click(sender As Object, e As EventArgs) Handles TsBtn_ExpandNode.Click
Static NodeExpand As Boolean = True
NodeExpand = Not NodeExpand
_planGrid.SetNodeExpand(NodeExpand)
End Sub
Private Sub tsBtnInsertRow_Click(sender As Object, e As EventArgs) Handles tsBtnInsertRow.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
Dim tempRowCount As Integer = tmpLastRow - tmpFrisRow + 1
_planGrid.NodeAdd(tmpFrisRow, tempRowCount)
End Sub
Private Sub tsBtnRemoveRow_Click(sender As Object, e As EventArgs) Handles tsBtnRemoveRow.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
Dim tempRowCount As Integer = tmpLastRow - tmpFrisRow + 1
_planGrid.NodeDel(tmpFrisRow, tempRowCount)
End Sub
Private Sub MsiGridRowBlockInsert_Click(sender As Object, e As EventArgs) Handles MsiGridRowBlockInsert.Click
tsBtnInsertRow.PerformClick()
End Sub
Private Sub MsiGridRowBlockDelete_Click(sender As Object, e As EventArgs) Handles MsiGridRowBlockDelete.Click
tsBtnRemoveRow.PerformClick()
End Sub
Private Sub TsBtnCopyWholeRow_Click(sender As Object, e As EventArgs) Handles TsBtnBackward.Click
_planGrid.BackwardNavigation()
End Sub
Private Sub TsBtnPasteWholdRows_Click(sender As Object, e As EventArgs) Handles TsBtnForward.Click
_planGrid.ForwardNavigation()
End Sub
Private Sub tsBtn_CheckAction_Click(sender As Object, e As EventArgs) Handles tsBtn_CheckAction.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
_planGrid.Check_Uncheck_Action(GrdStationPlan, tmpFrisRow, tmpLastRow, True)
End Sub
Private Sub tsBtn_UncheckAction_Click(sender As Object, e As EventArgs) Handles tsBtn_UncheckAction.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
_planGrid.Check_Uncheck_Action(GrdStationPlan, tmpFrisRow, tmpLastRow, False)
End Sub
Private Sub MsiUndo_Click(sender As Object, e As EventArgs) Handles MsiUndo.Click, TsBtnUndo.Click
_planGrid.UndoCommand()
End Sub
Private Sub MsiRedo_Click(sender As Object, e As EventArgs) Handles MsiRedo.Click, TsBtnRedo.Click
_planGrid.RedoCommand()
End Sub
Private Sub TsmiJumpCall_Click(sender As Object, e As EventArgs) Handles TsmiJumpCall.Click
_planGrid.JumpCall()
End Sub
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,94 @@
Public Module CommandManager
Private Property UndoCommands As New Stack(Of ICommand)
Private Property RedoCommands As New Stack(Of ICommand)
Private _isRunning As Boolean = False
''' <summary>
''' 运行命令,并将命令添加至撤销堆栈
''' </summary>
''' <param name="command"></param>
Public Sub RunCommand(command As ICommand)
command.Redo()
AddUndoCommand(command)
End Sub
Public ReadOnly Property IsRuning() As Boolean
Get
Return _isRunning
End Get
End Property
Public Function CanUndo() As Boolean
Return UndoCommands.Count > 0
End Function
Public Function CanRedo() As Boolean
Return RedoCommands.Count > 0
End Function
''' <summary>
''' 将命令添加至撤销堆栈
''' </summary>
Public Sub AddUndoCommand(command As ICommand)
UndoCommands.Push(command)
If RedoCommands.Count > 0 Then
ClearRedoCommands()
End If
End Sub
''' <summary>
''' 清空撤销命令堆栈
''' </summary>
Public Sub ClearUndoCommands()
UndoCommands.Clear()
End Sub
''' <summary>
''' 清空重做命令堆栈
''' </summary>
Public Sub ClearRedoCommands()
RedoCommands.Clear()
End Sub
''' <summary>
''' 清空撤销与重做命令堆栈
''' </summary>
Public Sub ClearCommands()
ClearUndoCommands()
ClearRedoCommands()
End Sub
''' <summary>
''' 执行撤销命令
''' </summary>
Public Sub Undo()
If UndoCommands.Count <= 0 Then Return
_isRunning = True
Dim command As ICommand = UndoCommands.Pop()
command.Undo()
RedoCommands.Push(command)
_isRunning = False
End Sub
''' <summary>
''' 执行重做命令
''' </summary>
Public Sub Redo()
If RedoCommands.Count <= 0 Then Return
_isRunning = True
Dim command As ICommand = RedoCommands.Pop()
command.Redo()
UndoCommands.Push(command)
_isRunning = False
End Sub
End Module

View File

@@ -0,0 +1,22 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeAddCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer)
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeAddCommand(startMoveRow, moveRows)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeDeleteCommand(startMoveRow, moveRows)
End Sub
End Class

View File

@@ -0,0 +1,12 @@
Public Class GridNodeCopyPasteCommand : Implements ICommand
Public Sub New()
End Sub
Public Sub Redo() Implements ICommand.Redo
Throw New NotImplementedException()
End Sub
Public Sub Undo() Implements ICommand.Undo
Throw New NotImplementedException()
End Sub
End Class

View File

@@ -0,0 +1,10 @@
Public Class GridNodeCutPasteCommand : Implements ICommand
Public Sub Redo() Implements ICommand.Redo
Throw New NotImplementedException()
End Sub
Public Sub Undo() Implements ICommand.Undo
Throw New NotImplementedException()
End Sub
End Class

View File

@@ -0,0 +1,23 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeDeleteCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Private ReadOnly nodes As List(Of RowNode)
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer, nodes As List(Of RowNode))
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
Me.nodes = nodes
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeDeleteCommand(startMoveRow, moveRows)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeAddCommand(startMoveRow, moveRows, nodes)
End Sub
End Class

View File

@@ -0,0 +1,23 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeMoveDownCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Private ReadOnly moveEndRow As Integer
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer, moveEndRow As Integer)
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
Me.moveEndRow = moveEndRow
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeMoveDownCommand(startMoveRow, moveRows)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeMoveUpCommand(moveEndRow, moveRows)
End Sub
End Class

View File

@@ -0,0 +1,25 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeMoveLeftCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Private ReadOnly moveEndRow As Integer
Private ReadOnly moveRightNodeIndex As Integer
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer, moveEndRow As Integer, moveRightNodeIndex As Integer)
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
Me.moveEndRow = moveEndRow
Me.moveRightNodeIndex = moveRightNodeIndex
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeMoveLeftCommand(startMoveRow, moveRows)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeMoveRightCommand(moveEndRow, moveRows, moveRightNodeIndex)
End Sub
End Class

View File

@@ -0,0 +1,25 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeMoveRightCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Private ReadOnly moveEndRow As Integer
Private ReadOnly moveRightNodeIndex As Integer
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer, moveEndRow As Integer, moveRightNodeIndex As Integer)
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
Me.moveEndRow = moveEndRow
Me.moveRightNodeIndex = moveRightNodeIndex
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeMoveRightCommand(startMoveRow, moveRows, moveRightNodeIndex)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeMoveLeftCommand(moveEndRow, moveRows)
End Sub
End Class

View File

@@ -0,0 +1,25 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeMoveUpCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly startMoveRow As Integer
Private ReadOnly moveRows As Integer
Private ReadOnly moveEndRow As Integer
Sub New(grd As StationPlanGrid, startMoveRow As Integer, moveRows As Integer, moveEndRow As Integer)
Me.grd = grd
Me.startMoveRow = startMoveRow
Me.moveRows = moveRows
Me.moveEndRow = moveEndRow
End Sub
Public Sub Redo() Implements ICommand.Redo
grd.NodeMoveUpCommand(startMoveRow, moveRows)
End Sub
Public Sub Undo() Implements ICommand.Undo
grd.NodeMoveDownCommand(moveEndRow, moveRows)
End Sub
End Class

View File

@@ -0,0 +1,35 @@
Imports UTS_Core.UTSModule.Station
Public Class GridNodeTextChangedCommand : Implements ICommand
Private ReadOnly grd As StationPlanGrid
Private ReadOnly dic As Dictionary(Of Integer, TextChangedRowNode)
Sub New(grd As StationPlanGrid, dic As Dictionary(Of Integer, TextChangedRowNode))
Me.grd = grd
Me.dic = dic
End Sub
Public Sub Redo() Implements ICommand.Redo
For Each row As Integer In dic.Keys
grd.UpdateGrid2(dic(row).AfterRowNode)
Next
End Sub
Public Sub Undo() Implements ICommand.Undo
For Each row As Integer In dic.Keys
grd.UpdateGrid2(dic(row).BeforeRowNode)
Next
End Sub
End Class
Public Class TextChangedRowNode
Public Property BeforeRowNode As RowNode
Public Property AfterRowNode As RowNode
End Class

View File

@@ -0,0 +1,11 @@
Public Interface ICommand
''' <summary>
''' 重做命令
''' </summary>
Sub Redo()
''' <summary>
''' 撤销命令
''' </summary>
Sub Undo()
End Interface

View File

@@ -0,0 +1,36 @@
Imports FlexCell
Public Class GridNavigation : Implements INavigation
Private ReadOnly _grd As Grid
Private ReadOnly _beforeRange As GridSelectRange
Private ReadOnly _afterRange As GridSelectRange
Sub New(grd As FlexCell.Grid, beforeRange As GridSelectRange, afterRange As GridSelectRange)
_grd = grd
Me._beforeRange = beforeRange
Me._afterRange = afterRange
End Sub
Public Sub Backward() Implements INavigation.Backward
_grd.Range(_beforeRange.StartRow, _beforeRange.StartCol, _beforeRange.EndRow, _beforeRange.EndCol).SelectCells()
End Sub
Public Sub Forward() Implements INavigation.Forward
_grd.Range(_afterRange.StartRow, _afterRange.StartCol, _afterRange.EndRow, _afterRange.EndCol).SelectCells()
End Sub
End Class
Public Class GridSelectRange
Public Property StartRow As Integer
Public Property StartCol As Integer
Public Property EndRow As Integer
Public Property EndCol As Integer
End Class

View File

@@ -0,0 +1,82 @@
Public Module GridNavigationManager
Private _forwardStack As New Stack(Of INavigation)()
Private _backwardStack As New Stack(Of INavigation)()
Private _isRunning As Boolean = False
Sub New()
End Sub
''' <summary>
''' 是否正在执行导航操作
''' </summary>
''' <remarks></remarks>
Public ReadOnly Property IsRunning As Boolean
Get
Return _isRunning
End Get
End Property
''' <summary>
''' 是否可以后退
''' </summary>
''' <returns></returns>
Public ReadOnly Property CanForward As Boolean
Get
Return _forwardStack.Count > 0
End Get
End Property
''' <summary>
''' 是否可以前进
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property CanBackward As Boolean
Get
Return _backwardStack.Count > 0
End Get
End Property
''' <summary>
''' 添加导航
''' <param name="navigation">导航</param>
''' </summary>
Public Sub Append(navigation As INavigation)
_backwardStack.Push(navigation)
_forwardStack.Clear()
End Sub
''' <summary>
'''
''' </summary>
Public Sub RemoveForward()
If CanBackward Then _backwardStack.Pop()
End Sub
Public Sub Clear()
_forwardStack.Clear()
_backwardStack.Clear()
End Sub
Public Sub Forward()
If Not CanForward Then Return
Dim navigation As INavigation = _forwardStack.Pop()
_backwardStack.Push(navigation)
_isRunning = True
navigation.Forward()
_isRunning = False
End Sub
Public Sub Backward()
If Not CanBackward Then Return
Dim navigation As INavigation = _backwardStack.Pop()
_forwardStack.Push(navigation)
_isRunning = True
navigation.Backward()
_isRunning = False
End Sub
End Module

View File

@@ -0,0 +1,12 @@
Public Interface INavigation
''' <summary>
''' 向后导航
''' </summary>
Sub Backward()
''' <summary>
''' 向前导航
''' </summary>
Sub Forward()
End Interface

View File

@@ -0,0 +1,7 @@
Public Interface IStationPlan
Sub CreateStationPlan()
Sub SaveFile(path As String)
Sub LoadFile(path As String)
End Interface

View File

@@ -0,0 +1,8 @@
Namespace UTSModule.Station
Public Class PlanNodeSelectChangedEventArgs
Inherits EventArgs
Public Property Node() As RowNode
Public LineNumber As Integer '指示当前节点所在的行号
Public LineActionEn As Boolean '结合本机勾选和父级勾选确定的实际是否勾选执行的结果
End Class
End Namespace

View File

@@ -0,0 +1,46 @@
Namespace UTSModule.Station
Public Class RowNodeChangedEventArgs
Inherits EventArgs
Enum RowNodeChangeType
None
RowType
Action
SaveToDb
RecordName
Retry
RetryInterval
[Label]
ControlType
Description
ErrorCode
ErrorMessage
CommandType
Command
Parameters
End Enum
''' <summary>
''' 修改后的节点
''' </summary>
''' <returns></returns>
Public Property Node() As RowNode
''' <summary>
''' 修改前的节点
''' </summary>
''' <returns></returns>
Public Property BeforeNode() As RowNode
''' <summary>
''' 修改类型
''' </summary>
''' <returns></returns>
Public Property ChangeType() As RowNodeChangeType
End Class
End Namespace

View File

@@ -0,0 +1,213 @@
Imports System.Drawing
Imports UTS_Core.UTSModule.Project
Namespace UTSModule.Station
Public Class ProcessStation
Enum StationTypeEnum
''' <summary>
''' 未知类型
''' </summary>
None
''' <summary>
''' 扫码目检站
''' </summary>
AOI
''' <summary>
''' 测试站
''' </summary>
Test
''' <summary>
''' 条码关联站
''' </summary>
Assem
''' <summary>
''' 成品录入站
''' </summary>
PE
''' <summary>
''' 抽检站
''' </summary>
QA
''' <summary>
''' 包装站位
''' </summary>
Package
''' <summary>
''' 唯一条码测试站
''' </summary>
Test2
''' <summary>
''' 包装测试站2023-05-09添加参考uts-win的方式做包装站
''' </summary>
PackageTest
End Enum
Enum SnTypeEnum
''' <summary>
''' 无序列号
''' </summary>
None
''' <summary>
''' 系统生成
''' </summary>
Auto
''' <summary>
''' 测试时录入
''' </summary>
Test
''' <summary>
''' 用户录入
''' </summary>
Excel
End Enum
Sub New(project As ProjectInfo)
StationID = -1
Name = String.Empty
Description = String.Empty
_stationType = StationTypeEnum.None
PreViewImage = Nothing
UserId = -1
DevType = String.Empty
DevApp = String.Empty
SnListOrder = -1
IsValid = True
Packet = New StationPacket(Me)
ParentProject = project
SnType = SnTypeEnum.Auto
End Sub
''' <summary>
''' 当前站位类型
''' </summary>
Private _stationType As StationTypeEnum
''' <summary>
''' 项目站索引,项目站唯一索引,新建站时自动生成,生成后不能修改
''' </summary>
''' <returns></returns>
Public Property StationID As Integer
''' <summary>
''' 项目站名称
''' </summary>
''' <returns></returns>
Public Property Name As String
Public Property StationType As StationTypeEnum
Get
Return _stationType
End Get
Set(value As StationTypeEnum)
_stationType = value
Packet.StationType = _stationType
End Set
End Property
''' <summary>
''' 项目站序号,表示该站在项目站总流程中测试顺序
''' 例如1表示当前为第一站
''' </summary>
''' <returns></returns>
Public Property ArtworkOrder() As Integer
''' <summary>
''' 项目站内容描述
''' </summary>
''' <returns></returns>
Public Property Description As String
''' <summary>
''' 工艺站预览图
''' </summary>
''' <returns></returns>
Public Property PreViewImage() As Image
''' <summary>
''' 使用测试站的设备类型,待删除
''' </summary>
''' <returns></returns>
Public Property DevType() As String
''' <summary>
''' 使用测试站的设备软件名,待删除
''' </summary>
''' <returns></returns>
Public Property DevApp() As String
''' <summary>
''' 项目站当前操作人员,为当前登录人员账号
''' </summary>
''' <returns></returns>
Public Property UserId As Integer
''' <summary>
''' 生成测试站时的顺序从1开始
''' </summary>
''' <returns></returns>
Public Property SnListOrder As Integer
''' <summary>
''' 当前站位是否有效
''' </summary>
''' <returns></returns>
Public Property IsValid As Boolean
''' <summary>
''' 条码生成规则1系统生成2客户录入
''' </summary>
''' <returns></returns>
Public Property SnType() As SnTypeEnum
''' <summary>
''' 项目站关联的项目站包信息
''' </summary>
''' <returns></returns>
Public Property Packet() As StationPacket
''' <summary>
''' 项目站所属项目信息
''' </summary>
''' <returns></returns>
Public Property ParentProject() As ProjectInfo
''' <summary>
''' 工艺站信息已被修改
''' </summary>
''' <returns></returns>
Public Property InfoChanged() As Boolean
''' <summary>
''' 工艺站类型已被修改
''' </summary>
''' <returns></returns>
Public Property TypeChange() As Boolean
''' <summary>
''' 工艺站预览图已被修改
''' </summary>
''' <returns></returns>
Public Property PreviewImageChanged() As Boolean
End Class
End Namespace

View File

@@ -0,0 +1,839 @@
Imports System.Drawing
Imports System.Text
Imports System.Xml
Imports UTS_Core.UTSModule.Production
Imports UTS_Core.UTSModule.Test.Command
Namespace UTSModule.Station
Public NotInheritable Class RowNode
#Region "初始化"
Sub New()
RowType = RowTypeEnum.Flow
AuthByType(RowType)
Pause = False
Action = True
RecordName = String.Empty
Retry = 0
RetryInterval = 100
[Label] = String.Empty
Description = String.Empty
ErrorCode = String.Empty
ErrorMessage = String.Empty
CommandType = String.Empty
Command = String.Empty
Parameters = New List(Of TestCmdParam)
SaveToDb = False
ControlType = String.Empty
Children = New List(Of RowNode)()
Expanded = True
AllChildCount = 0
RowNodes = New RowNodeCollection(Me)
RowListIndex = 0
RowList = New List(Of RowNode)()
RowList.Add(Me)
End Sub
''' <summary>
''' 模块名称
''' </summary>
''' <returns></returns>
Public Property [Label] As String
''' <summary>
''' 控制命令类型
''' </summary>
''' <returns></returns>
Public Property ControlType As String
''' <summary>
''' 当前流程步骤的解释
''' </summary>
''' <returns></returns>
Public Property Description As String
''' <summary>
''' 调试模式下运行到当前节点后,暂停运行
''' </summary>
''' <returns></returns>
Public Property Pause() As Boolean
''' <summary>
''' 当前流程步骤是否允许执行
''' </summary>
''' <returns></returns>
Public Property Action As Boolean
''' <summary>
''' 当前流程步骤是否会被执行
''' </summary>
''' <returns></returns>
Public Property IsRunning As Boolean
''' <summary>
''' 当前流程步骤执行结果是否保存至数据库,FALSE则为临时变量
''' </summary>
''' <returns></returns>
Public Property SaveToDb() As Boolean
Public Property RecordName As String
Public Property Retry As Integer
Public Property RetryInterval As Integer
Public Property ErrorCode As String
Public Property ErrorMessage As String
Public Property CommandType As String
Public Property Command As String
Public Property Parameters() As List(Of TestCmdParam)
Private _rowType As RowTypeEnum
''' <summary>
''' 行的类型
''' </summary>
''' <returns></returns>
Public Property RowType As RowTypeEnum
Get
Return _rowType
End Get
Set
_rowType = Value
AuthByType(Value)
End Set
End Property
''' <summary>
''' 行节点关联的站流程
''' </summary>
''' <returns></returns>
Public Property StationPlan() As StationTestPlan
''' <summary>
''' 行节点执行结果信息
''' </summary>
''' <returns></returns>
Public Property TestReturn As TestCommandReturn
''' <summary>
''' 节点树的所有节点集合
''' </summary>
''' <returns></returns>
Public Property RowList As List(Of RowNode)
''' <summary>
''' 节点所属节点数组的位置,从0开始即头结点的的索引
''' </summary>
''' <returns></returns>
Public Property RowListIndex() As Integer
''' <summary>
''' 节点的级别,可见节点级别从0开始
''' </summary>
''' <returns></returns>
Public Property RowLever As Integer
''' <summary>
''' 节点在父节点中的索引,可见节点级别从0开始
''' </summary>
''' <returns></returns>
Public Property RowIndex As Integer
''' <summary>
''' 记录总使用的说明内容
''' </summary>
''' <returns></returns>
Public Property Desc4Record As String
''' <summary>
''' 子节点总数
''' </summary>
''' <returns></returns>
Public ReadOnly Property Count() As Integer
Get
Return Children.Count
End Get
End Property
''' <summary>
''' 所有子节点总数
''' </summary>
''' <returns></returns>
Public Property AllChildCount() As Integer
''' <summary>
''' 行下包含的子行集合
''' </summary>
''' <returns></returns>
Public Property RowNodes() As RowNodeCollection
''' <summary>
''' 当前节点的同级上一节点若当前节点为首节点则返回nothing
''' </summary>
''' <returns></returns>
Public Property PrevNode() As RowNode
''' <summary>
''' 当前节点的同级下一节点若当前节点为尾节点则返回nothing
''' </summary>
''' <returns></returns>
Public Property NextNode() As RowNode
''' <summary>
''' 当前节点的父节点
''' </summary>
''' <returns></returns>
Public Property ParentNode() As RowNode
''' <summary>
''' 当前节点树的起始节点
''' </summary>
''' <returns></returns>
Public Property HeadNode() As RowNode
''' <summary>
''' 内部缓存子节点
''' </summary>
Friend Children As List(Of RowNode)
''' <summary>
''' 处于展开状态
''' </summary>
''' <returns></returns>
Public Property Expanded() As Boolean
''' <summary>
''' 是否允许删除当前节点
''' </summary>
''' <returns></returns>
Public Property CanDelete() As Boolean
''' <summary>
''' 是否允许添加子节点
''' </summary>
''' <returns></returns>
Public Property CanAddChildNode() As Boolean
''' <summary>
''' 允许操作当前节点内容
''' </summary>
''' <returns></returns>
Public Property CanChangeContent() As Boolean
''' <summary>
''' 允许移动节点改变节点的级别
''' </summary>
''' <returns></returns>
Public Property CanChangeLever() As Boolean
''' <summary>
''' 允许移动节点移动
''' </summary>
''' <returns></returns>
Public Property CanMove() As Boolean
''' <summary>
''' 当前节点是否处于重试状态
''' </summary>
''' <returns></returns>
Public Property IsRetry As Boolean
Private Sub AuthByType(type As RowTypeEnum)
Select Case type
Case RowTypeEnum.FixedModule
CanAddChildNode = True
CanChangeContent = False
CanDelete = False
CanChangeLever = False
CanMove = False
Case RowTypeEnum.Module
CanAddChildNode = True
CanChangeContent = True
CanDelete = True
CanChangeLever = True
CanMove = True
Case RowTypeEnum.Control
CanAddChildNode = True
CanChangeContent = True
CanDelete = True
CanChangeLever = True
CanMove = True
Case RowTypeEnum.Flow
CanAddChildNode = True
CanChangeContent = True
CanDelete = True
CanChangeLever = True
CanMove = True
End Select
End Sub
#End Region
#Region "节点操作"
''' <summary>
''' 展开节点
''' </summary>
Public Sub Expand()
If Expanded Then Return
Expanded = True
End Sub
''' <summary>
''' 折叠节点
''' </summary>
Public Sub Collapse()
If Expanded = False Then Return
Expanded = False
End Sub
''' <summary>
''' 展开或折叠节点
''' </summary>
Public Sub Toggle()
Expanded = Not Expanded
End Sub
''' <summary>
''' 增加子节点
''' </summary>
Public Sub AddNode(node As RowNode)
If CanAddChildNode Then
RowNodes.Add(node)
Else
ParentNode.InsertNode(RowIndex + 1, node)
End If
End Sub
''' <summary>
''' 插入子节点
''' </summary>
Public Sub InsertNode(index As Integer, childNode As RowNode)
If CanAddChildNode Then
RowNodes.Insert(index, childNode)
Else
ParentNode.InsertNode(index, childNode)
End If
' ParentNode.InsertNode(index, childNode)
End Sub
Public Sub RemoveChildNode(childNode As RowNode)
If childNode.CanDelete = False Then Return
RowNodes.Remove(childNode)
End Sub
Public Sub RemoveChildAt(index As Integer)
If index >= RowNodes.Count Then Return
Dim child As RowNode = CType(RowNodes.Item(index), RowNode)
If child.CanDelete = False Then Return
RowNodes.RemoveAt(index)
End Sub
''' <summary>
''' 移除本身节点
''' </summary>
Public Function Remove() As Boolean
' If CanDelete = False Then Return False
ParentNode.RowNodes.Remove(Me)
Return True
End Function
''' <summary>
''' 清空节点所有子节点
''' </summary>
Public Sub Clear()
RowNodes.Clear()
End Sub
''' <summary>
''' 节点上移
''' </summary>
Public Sub MoveUp()
If RowIndex = 0 Then Return
If Remove() = False Then Return
ParentNode.RowNodes.Insert(RowIndex - 1, Me)
End Sub
''' <summary>
''' 节点下移
''' </summary>
Public Sub MoveDown()
If RowIndex = ParentNode.RowNodes.Count - 1 Then Return
If Remove() = False Then Return
ParentNode.RowNodes.Insert(RowIndex + 1, Me)
End Sub
''' <summary>
''' 节点左移
''' </summary>
Public Sub MoveLeft()
If RowLever = 0 Then Return
If Remove() = False Then Return
ParentNode.ParentNode.RowNodes.Insert(ParentNode.RowIndex + 1, Me)
End Sub
''' <summary>
''' 节点右移
''' </summary>
Public Sub MoveRight()
If RowIndex = 0 Then Return
' If CanChangeLever = False Then Return
If Remove() = False Then Return
Dim rNode As RowNode = CType(ParentNode.RowNodes(RowIndex - 1), RowNode)
rNode.RowNodes.Add(Me)
End Sub
''' <summary>
''' 节点深复制,创建一个完全相同信息的节点
''' </summary>
''' <returns></returns>
Public Function Clone() As RowNode
Dim cpNode As New RowNode
With cpNode
.RowListIndex = RowListIndex
.Pause = Pause
.ControlType = ControlType
.SaveToDb = SaveToDb
.RowType = RowType
.Action = Action
.RecordName = RecordName
.Retry = Retry
.RetryInterval = RetryInterval
.[Label] = String.Copy(Label)
.Description = String.Copy(Description)
.ErrorCode = String.Copy(ErrorCode)
.ErrorMessage = String.Copy(ErrorMessage)
.CommandType = String.Copy(CommandType)
.Command = String.Copy(Command)
.Parameters = New List(Of TestCmdParam)
For Each param As TestCmdParam In Parameters
.Parameters.Add(param.Clone())
Next
'.RowNodes = New RowNodeCollection(cpNode)
'.Children = New List(Of RowNode)()
''todo:克隆功能待重写
'For Each child As RowNode In Children
' .RowNodes.Add(child.Clone())
'Next
End With
Return cpNode
End Function
Public Sub CopyFrom(node As RowNode)
With node
.RowListIndex = RowListIndex
Pause = .Pause
ControlType = .ControlType
SaveToDb = .SaveToDb
RowType = .RowType
Action = .Action
RecordName = .RecordName
Retry = .Retry
RetryInterval = .RetryInterval
[Label] = String.Copy(.Label)
Description = String.Copy(.Description)
ErrorCode = String.Copy(.ErrorCode)
ErrorMessage = String.Copy(.ErrorMessage)
CommandType = String.Copy(.CommandType)
Command = String.Copy(.Command)
Parameters.Clear()
For Each param As TestCmdParam In .Parameters
Parameters.Add(param.Clone())
Next
End With
End Sub
#End Region
#Region "节点样式"
Public Enum RowTypeEnum
''' <summary>
''' 固定模块
''' </summary>
FixedModule
''' <summary>
''' 模块,可以当作跳转入口
''' </summary>
[Module]
''' <summary>
''' 控制
''' </summary>
Control
''' <summary>
''' 流程
''' </summary>
Flow
End Enum
#End Region
#Region "节点风格"
Public Shared Property NodeStyles() As Dictionary(Of RowTypeEnum, RowNodeStyle)
''' <summary>
''' 默认的初始化节点风格
''' </summary>
Public Shared Sub InitNodeStyles()
NodeStyles = New Dictionary(Of RowTypeEnum, RowNodeStyle) From {
{RowTypeEnum.FixedModule, New RowNodeStyle(RowTypeEnum.FixedModule)},
{RowTypeEnum.Module, New RowNodeStyle(RowTypeEnum.Module)},
{RowTypeEnum.Control, New RowNodeStyle(RowTypeEnum.Control)},
{RowTypeEnum.Flow, New RowNodeStyle(RowTypeEnum.Flow)}
}
End Sub
Private Shared Function LoadNodeStyle(nodeList As XmlNodeList) As RowNodeStyle
Dim nodeStyle As New RowNodeStyle
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "Font"
Dim fStyle As FontStyle = CType([Enum].Parse(GetType(FontStyle), xe.GetAttribute("FontStyle")), FontStyle)
Dim fSize As Single = CSng(xe.GetAttribute("FontSize"))
nodeStyle.NodeFont = New Font(xe.InnerText, fSize, fStyle)
Case "ForeColor"
nodeStyle.NodeForeColor = Color.FromArgb(CInt(xe.InnerText))
Case "BackColor"
nodeStyle.NodeBackColor = Color.FromArgb(CInt(xe.InnerText))
Case "ImageKey"
nodeStyle.NodeImageKey = xe.InnerText
Case "ShowRecord"
nodeStyle.ShowRecord = CType(xe.InnerText, Boolean)
Case "ShowLabel"
nodeStyle.ShowLabel = CType(xe.InnerText, Boolean)
Case "ShowDescription"
nodeStyle.ShowDescription = CType(xe.InnerText, Boolean)
Case "ShowAction"
nodeStyle.ShowAction = CType(xe.InnerText, Boolean)
Case "ShowRecord"
nodeStyle.ShowRecord = CType(xe.InnerText, Boolean)
Case "ShowRetry"
nodeStyle.ShowRetry = CType(xe.InnerText, Boolean)
Case "ShowRetryInterval"
nodeStyle.ShowRetryInterval = CType(xe.InnerText, Boolean)
Case "ShowErrorCode"
nodeStyle.ShowErrorCode = CType(xe.InnerText, Boolean)
Case "ShowErrorMessage"
nodeStyle.ShowErrorMessage = CType(xe.InnerText, Boolean)
Case "ShowCommand"
nodeStyle.ShowCommand = CType(xe.InnerText, Boolean)
Case "ShowParameter"
nodeStyle.ShowParameter = CType(xe.InnerText, Boolean)
Case Else
Throw New Exception($"LoadRowNodes Unknown LocalName:{xe.LocalName}")
End Select
Next
Return nodeStyle
End Function
''' <summary>
''' 从本地文件中初始化节点风格
''' </summary>
''' <param name="path"></param>
Public Shared Sub LoadNodeStyles(path As String)
NodeStyles = New Dictionary(Of RowTypeEnum, RowNodeStyle)()
Dim xd As New XmlDocument()
xd.Load(path)
Dim xe As XmlElement
Dim nodeList As XmlNodeList = xd.SelectSingleNode($"NodeStyles").ChildNodes
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "NodeStyle"
Dim type As RowTypeEnum = CType([Enum].Parse(GetType(RowTypeEnum), xe.GetAttribute("Type")), RowTypeEnum)
NodeStyles.Add(type, LoadNodeStyle(xe.ChildNodes))
Case Else
Throw New Exception($"LoadNodeStyles Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
Public Shared Sub SaveNodeStyles(path As String)
Dim xws As New XmlWriterSettings
With xws
.Indent = True
.NewLineOnAttributes = False
.Encoding = New UTF8Encoding(False)
End With
Using xw As XmlWriter = XmlWriter.Create(path, xws)
xw.WriteStartDocument()
xw.WriteStartElement($"NodeStyles") '创建跟节点
For Each nodeStyle As KeyValuePair(Of RowTypeEnum, RowNodeStyle) In NodeStyles
xw.WriteStartElement($"NodeStyle") '创建表属性节点
xw.WriteAttributeString("Type", nodeStyle.Key.ToString())
xw.WriteStartElement($"Font") '创建表属性节点
xw.WriteAttributeString("FontSize", nodeStyle.Value.NodeFont.Size.ToString())
xw.WriteAttributeString("FontStyle", nodeStyle.Value.NodeFont.Style.ToString())
xw.WriteString(nodeStyle.Value.NodeFont.Name.ToString())
xw.WriteEndElement()
xw.WriteElementString("ForeColor", nodeStyle.Value.NodeForeColor.ToArgb().ToString())
xw.WriteElementString("BackColor", nodeStyle.Value.NodeBackColor.ToArgb().ToString())
xw.WriteElementString("ImageKey", nodeStyle.Value.NodeImageKey)
If nodeStyle.Value.ShowRowType Then xw.WriteElementString("ShowRecord", nodeStyle.Value.ShowRowType.ToString())
If nodeStyle.Value.ShowLabel Then xw.WriteElementString("ShowLabel", nodeStyle.Value.ShowLabel.ToString())
If nodeStyle.Value.ShowDescription Then xw.WriteElementString("ShowDescription", nodeStyle.Value.ShowDescription.ToString())
If nodeStyle.Value.ShowAction Then xw.WriteElementString("ShowAction", nodeStyle.Value.ShowAction.ToString())
If nodeStyle.Value.ShowRecord Then xw.WriteElementString("ShowRecord", nodeStyle.Value.ShowRecord.ToString())
If nodeStyle.Value.ShowRetry Then xw.WriteElementString("ShowRetry", nodeStyle.Value.ShowRetry.ToString())
If nodeStyle.Value.ShowRetryInterval Then xw.WriteElementString("ShowRetryInterval", nodeStyle.Value.ShowRetryInterval.ToString())
If nodeStyle.Value.ShowErrorCode Then xw.WriteElementString("ShowErrorCode", nodeStyle.Value.ShowErrorCode.ToString())
If nodeStyle.Value.ShowErrorMessage Then xw.WriteElementString("ShowErrorMessage", nodeStyle.Value.ShowErrorMessage.ToString())
If nodeStyle.Value.ShowCommand Then xw.WriteElementString("ShowCommand", nodeStyle.Value.ShowCommand.ToString())
If nodeStyle.Value.ShowParameter Then xw.WriteElementString("ShowParameter", nodeStyle.Value.ShowParameter.ToString())
xw.WriteEndElement()
Next
xw.WriteEndElement()
xw.WriteEndDocument()
End Using
End Sub
#End Region
#Region "节点保存与加载"
Public Sub SaveRowNode(xw As XmlWriter)
xw.WriteStartElement($"RowNode") '创建单元格节点
xw.WriteElementString("RowType", RowType.ToString())
If String.IsNullOrEmpty(Label) = False Then xw.WriteElementString("Label", Label)
xw.WriteElementString("Action", Action.ToString())
If String.IsNullOrEmpty(ControlType) = False Then xw.WriteElementString("ControlType", ControlType)
If String.IsNullOrEmpty(CommandType) = False Then xw.WriteElementString("CommandType", CommandType)
If String.IsNullOrEmpty(Command) = False Then xw.WriteElementString("Command", Command)
If String.IsNullOrEmpty(Description) = False Then xw.WriteElementString("Description", Description)
xw.WriteElementString("Retry", Retry.ToString())
xw.WriteElementString("RetryInterval", RetryInterval.ToString())
xw.WriteElementString("SaveToDb", SaveToDb.ToString())
If String.IsNullOrEmpty(RecordName) = False Then xw.WriteElementString("RecordName", RecordName)
If String.IsNullOrEmpty(ErrorCode) = False Then xw.WriteElementString("ErrorCode", ErrorCode)
If String.IsNullOrEmpty(ErrorMessage) = False Then xw.WriteElementString("ErrorMessage", ErrorMessage)
For Each parameter As TestCmdParam In Parameters
xw.WriteStartElement($"Parameter") '创建跟节点
xw.WriteAttributeString("Type", parameter.Type)
xw.WriteAttributeString("Desc", parameter.Desc)
xw.WriteAttributeString("LowerLimit", parameter.LowerLimit)
xw.WriteAttributeString("UpperLimit", parameter.UpperLimit)
xw.WriteString(parameter.Value)
xw.WriteEndElement()
Next
If RowNodes.Count > 0 Then
SaveRowNodes(xw, RowNodes)
End If
xw.WriteEndElement()
End Sub
Public Shared Sub SaveRowNodes(xw As XmlWriter, nodes As RowNodeCollection)
xw.WriteStartElement($"RowNodes") '创建单元格节点
For Each node As RowNode In nodes
node.SaveRowNode(xw)
Next
xw.WriteEndElement()
End Sub
''' <summary>
''' 导出为XML文件
''' </summary>
''' <param name="path">文件路径</param>
Public Sub ExportToXml(path As String)
Dim xws As New XmlWriterSettings
With xws
.Indent = True
.NewLineOnAttributes = False
.Encoding = New UTF8Encoding(False)
End With
Using xw As XmlWriter = XmlWriter.Create(path, xws)
xw.WriteStartDocument()
SaveRowNode(xw)
xw.WriteEndDocument()
End Using
End Sub
''' <summary>
''' 加载行节点
''' </summary>
''' <param name="nodeList"></param>
''' <param name="rowCollection"></param>
Public Shared Sub LoadRowNodes(nodeList As XmlNodeList, rowCollection As RowNodeCollection)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "RowNode"
Dim row As New RowNode
rowCollection.Add(row)
row.LoadFormXmlNodeList(xe.ChildNodes)
Case Else
Throw New Exception($"LoadRowNodes Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
Public Sub LoadFormXmlNodeList(nodeList As XmlNodeList)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "RowType"
RowType = CType([Enum].Parse(GetType(RowTypeEnum), xe.InnerText), RowTypeEnum)
Case "Description"
Description = xe.InnerText
Case "Label"
Label = xe.InnerText
Case "ControlType"
ControlType = xe.InnerText
Case "Action"
Action = CBool(xe.InnerText)
Case "SaveToDb"
SaveToDb = CBool(xe.InnerText)
Case "RecordName"
RecordName = xe.InnerText
Case "Retry"
Retry = CInt(xe.InnerText)
Case "RetryInterval"
RetryInterval = CInt(xe.InnerText)
Case "ErrorCode"
ErrorCode = xe.InnerText
Case "ErrorMessage"
ErrorMessage = xe.InnerText
Case "CommandType"
CommandType = xe.InnerText
Case "Command"
Command = xe.InnerText
Case "Parameter"
Dim param As New TestCmdParam With {
.Type = xe.GetAttribute("Type"),
.Desc = xe.GetAttribute("Desc"),
.LowerLimit = xe.GetAttribute("LowerLimit"),
.UpperLimit = xe.GetAttribute("UpperLimit"),
.Value = xe.InnerText
}
Parameters.Add(param)
Case "RowNodes"
RowNodes.Clear()
LoadRowNodes(xe.ChildNodes, RowNodes)
Case Else
Throw New Exception($"LoadRowNode Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
Public Sub LoadFormXml(path As String)
Dim xd As New XmlDocument()
xd.Load(path)
Dim nodeList As XmlNodeList = xd.SelectSingleNode($"RowNode").ChildNodes
LoadFormXmlNodeList(nodeList)
End Sub
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,417 @@
Namespace UTSModule.Station
Public Class RowNodeCollection
Implements IList, ICollection, IEnumerable
Private ReadOnly _owner As RowNode
Friend Sub New(node As RowNode)
_owner = node
End Sub
Default Public Property Item(index As Integer) As Object Implements IList.Item
Get
Return _owner.Children.Item(index)
End Get
Set(value As Object)
_owner.Children(index) = CType(value, RowNode)
End Set
End Property
Public ReadOnly Property IsReadOnly As Boolean Implements IList.IsReadOnly
Get
Return False
End Get
End Property
Public ReadOnly Property IsFixedSize As Boolean Implements IList.IsFixedSize
Get
Return False
End Get
End Property
Public ReadOnly Property Count As Integer Implements ICollection.Count
Get
Return _owner.Children.Count
End Get
End Property
Public ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot
Get
Return False
End Get
End Property
Public ReadOnly Property IsSynchronized As Boolean Implements ICollection.IsSynchronized
Get
Return False
End Get
End Property
''' <summary>
''' 更新节点的所有子节点的流程站指向
''' </summary>
''' <param name="pNode"></param>
Private Sub AddNodeUpdateStationPlan(pNode As RowNode)
For Each cNode As RowNode In pNode.RowNodes
cNode.StationPlan = pNode.StationPlan
If cNode.Count > 0 Then
AddNodeUpdateStationPlan(cNode)
End If
Next
End Sub
''' <summary>
''' 更新节点的上一节点指向
''' </summary>
''' <param name="node">需要更新的节点</param>
Private Sub AddNodeUpdatePrevNode(node As RowNode)
If node.RowIndex > 0 Then
node.PrevNode = node.ParentNode.Children(node.RowIndex - 1)
'更新上一节点的下一节点指向
node.PrevNode.NextNode = node
Else
node.PrevNode = Nothing
End If
End Sub
''' <summary>
''' 更新节点的下一节点指向
''' </summary>
''' <param name="node">需要更新的节点</param>
Private Sub AddNodeUpdateNextNode(node As RowNode)
If node.RowIndex < node.ParentNode.Children.Count - 1 Then
node.NextNode = node.ParentNode.Children(node.RowIndex + 1)
'更新下一节点的上一节点指向
node.NextNode.PrevNode = node
Else
node.NextNode = Nothing
End If
End Sub
''' <summary>
''' 新增节点后,更新父节点的所有子节点计数
''' </summary>
''' <param name="node">新增的节点</param>
Private Sub AddNodeUpdateAllChildCount(node As RowNode)
Dim pNode As RowNode = node.ParentNode
While pNode IsNot Nothing
pNode.AllChildCount += (node.AllChildCount + 1)
pNode = pNode.ParentNode
End While
End Sub
''' <summary>
''' 删除节点后,更新父节点的所有子节点计数
''' </summary>
''' <param name="node">被删除的节点</param>
''' <param name="include">包含当前节点</param>
Private Sub DelNodeUpdateAllChildCount(node As RowNode, Optional include As Boolean = True)
Dim removeCount As Integer
If include Then
removeCount = node.AllChildCount + 1
Else
removeCount = node.AllChildCount
End If
Dim pNode As RowNode = node.ParentNode
While pNode IsNot Nothing
pNode.AllChildCount -= removeCount
pNode = pNode.ParentNode
End While
End Sub
''' <summary>
''' 插入节点后,更新节点下方节点的索引
''' </summary>
''' <param name="node">需要更新下方节点索引的节点</param>
Private Sub AddNodeUpdateRowIndex(node As RowNode)
While node.NextNode IsNot Nothing
node.NextNode.RowIndex = node.RowIndex + 1
node = node.NextNode
End While
End Sub
''' <summary>
''' 删除节点后,更新节点下方节点的索引
''' </summary>
''' <param name="node"></param>
Private Sub DelNodeUpdateRowIndex(node As RowNode)
If node.NextNode Is Nothing Then Return
node.NextNode.RowIndex = node.RowIndex
node = node.NextNode
While node.NextNode IsNot Nothing
node.NextNode.RowIndex = node.RowIndex + 1
node = node.NextNode
End While
End Sub
''' <summary>
''' 获取新添加的节点的链状目录索引
''' </summary>
''' <param name="node"></param>
''' <returns></returns>
Private Function GetRowListIndex(node As RowNode) As Integer
Dim rowListIndex As Integer
If node.RowIndex = 0 Then
rowListIndex = node.ParentNode.RowListIndex + 1
Else
rowListIndex = node.PrevNode.RowListIndex + node.PrevNode.AllChildCount + 1
End If
Return rowListIndex
End Function
''' <summary>
''' 更新节点的所有子节点的链式结合的指向
''' </summary>
''' <param name="pNode"></param>
''' <param name="node"></param>
Private Sub AddNodeUpdateRowList(pNode As RowNode, node As RowNode)
node.RowList = pNode.RowList
node.RowListIndex = GetRowListIndex(node)
node.RowList.Insert(node.RowListIndex, node)
For Each cNode As RowNode In node.RowNodes
AddNodeUpdateRowList(node, cNode)
Next
End Sub
''' <summary>
''' 删除节点后,更新链状列表
''' </summary>
''' <param name="node"></param>
''' <param name="include">包含当前节点</param>
Private Sub DelNodeUpdateRowList(node As RowNode, Optional include As Boolean = True)
Dim index As Integer
If include Then
index = node.RowListIndex
node.RowList.RemoveAt(index)
Else
index = node.RowListIndex + 1
End If
Dim removeCount As Integer = node.AllChildCount
While removeCount > 0
node.RowList.RemoveAt(index)
removeCount -= 1
End While
End Sub
''' <summary>
''' 插入节点后,更新链状目录中受影响节点的索引
''' </summary>
''' <param name="node"></param>
Private Sub AddNodeUpdateRowListIndex(node As RowNode)
Dim startIndex As Integer = node.RowListIndex + node.AllChildCount + 1
For index As Integer = startIndex To node.RowList.Count - 1
node.RowList(index).RowListIndex = index
Next
End Sub
''' <summary>
''' 删除节点后,更新链状目录中受影响节点的索引
''' </summary>
''' <param name="node">删除的节点</param>
''' <param name="include">是否保存该节点</param>
Private Sub DelNodeUpdateRowListIndex(node As RowNode, Optional include As Boolean = True)
Dim startIndex As Integer = node.RowListIndex
If include = False Then startIndex += 1
For i As Integer = startIndex To node.RowList.Count - 1
_owner.RowList(i).RowListIndex = i
Next
End Sub
Public Function Add(value As Object) As Integer Implements IList.Add
Dim node As RowNode
Try
node = CType(value, RowNode)
Catch ex As Exception
Return -1
End Try
_owner.Children.Add(node)
node.HeadNode = _owner.HeadNode
node.ParentNode = _owner
node.RowLever = _owner.RowLever + 1
node.RowIndex = _owner.Children.Count - 1
node.RowList = _owner.RowList
'更新所有子节点的流程计划指向
AddNodeUpdateStationPlan(node)
'更新父节点总子节点计数
AddNodeUpdateAllChildCount(node)
'更新上一节点指向
AddNodeUpdatePrevNode(node)
'更新下一节点指向
node.NextNode = Nothing
'将节点及其子节点插入到链状目录中,并更新链状目指向
AddNodeUpdateRowList(_owner, node)
'更新下方节点链状索引
AddNodeUpdateRowListIndex(node)
Return _owner.Children.Count
End Function
Public Sub Insert(index As Integer, value As Object) Implements IList.Insert
Dim node As RowNode = CType(value, RowNode)
_owner.Children.Insert(index, node)
node.HeadNode = _owner.HeadNode
node.ParentNode = _owner
node.RowLever = _owner.RowLever + 1
node.RowIndex = index
node.RowList = _owner.RowList
'更新所有子节点的流程计划指向
AddNodeUpdateStationPlan(node)
'更新父节点总子节点计数
AddNodeUpdateAllChildCount(node)
'更新上一节点指向
AddNodeUpdatePrevNode(node)
'更新下一节点指向
AddNodeUpdateNextNode(node)
'更新下方节点树状索引
AddNodeUpdateRowIndex(node)
'将节点及其子节点插入到链状目录中,并更新链状目指向
AddNodeUpdateRowList(_owner, node)
'更新下方节点链状索引
AddNodeUpdateRowListIndex(node)
End Sub
''' <summary>
''' 移除指定节点
''' </summary>
''' <param name="value"></param>
Public Sub Remove(value As Object) Implements IList.Remove
Dim node As RowNode = CType(value, RowNode)
_owner.Children.Remove(node)
'更新父节点总子节点计数
DelNodeUpdateAllChildCount(node)
'更新上一节点的下一节点指向
If node.PrevNode IsNot Nothing Then
node.PrevNode.NextNode = node.NextNode
End If
'更新下一节点的上一节点指向
If node.NextNode IsNot Nothing Then
node.NextNode.PrevNode = node.PrevNode
End If
'更新下方节点树状索引
DelNodeUpdateRowIndex(node)
'链状目录移除被删除的节点
DelNodeUpdateRowList(node)
'更新链状目录中的节点索引
DelNodeUpdateRowListIndex(node)
End Sub
Public Sub RemoveAt(index As Integer) Implements IList.RemoveAt
Dim node As RowNode = _owner.Children(index)
_owner.Children.RemoveAt(index)
'更新父节点总子节点计数
DelNodeUpdateAllChildCount(node)
'更新上一节点的下一节点指向
If node.PrevNode IsNot Nothing Then
node.PrevNode.NextNode = node.NextNode
End If
'更新下一节点的上一节点指向
If node.NextNode IsNot Nothing Then
node.NextNode.PrevNode = node.PrevNode
End If
'更新下方节点树状索引
DelNodeUpdateRowIndex(node)
'链状目录移除被删除的节点
DelNodeUpdateRowList(node)
'更新链状目录中的节点索引
DelNodeUpdateRowListIndex(node)
End Sub
''' <summary>
''' 清空节点
''' </summary>
Public Sub Clear() Implements IList.Clear
'清空树状目录子节点
_owner.Children.Clear()
'更新父节点总子节点计数
DelNodeUpdateAllChildCount(_owner, False)
'链状目录移除被删除的节点
DelNodeUpdateRowList(_owner, False)
'更新链状目录中的节点索引
DelNodeUpdateRowListIndex(_owner, False)
'更新总子节点计数
_owner.AllChildCount = 0
End Sub
Public Sub CopyTo(array As Array, index As Integer) Implements ICollection.CopyTo
_owner.Children.CopyTo(CType(array, RowNode()), index)
End Sub
Public Function Contains(value As Object) As Boolean Implements IList.Contains
Return _owner.Children.Contains(CType(value, RowNode))
End Function
Public Function IndexOf(value As Object) As Integer Implements IList.IndexOf
Return _owner.Children.IndexOf(CType(value, RowNode))
End Function
Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
Return _owner.Children.GetEnumerator
End Function
End Class
End Namespace

View File

@@ -0,0 +1,761 @@
Imports System.Drawing
Imports System.Windows.Forms
Imports FlexCell.Grid
Imports FlexCell
Imports UTS_Core.UTSModule.Production
Namespace UTSModule.Station
Public Class RowNodeGrid
''' <summary>
''' 行节点表,当前选择行
''' </summary>
Private _lastSingleRowSelRow As Integer
''' <summary>
''' 行节点表,下拉框选择行
''' </summary>
Private _grdSingleRowDropRow As Integer
''' <summary>
''' 行节点表,下拉框所在列
''' </summary>
Private _grdSingleRowDropCol As Integer
Private _grd As Grid
''' <summary>
''' 详细信息表格内容变更类型
''' </summary>
Private _cellChanged As GridCellChangedEnum = GridCellChangedEnum.None
Public Property RtxColTip As RichTextBox
Private ReadOnly _planColManager As PlanColManager '测试列提示管理器
Private ReadOnly _testCmdManager As TestCmdManager '测试命令管理器
Private ReadOnly _errCodeManager As ErrCodeManager '错误代码管理器
Private Property ActiveRowNode() As RowNode
Public Event RowNodeTextChanged(ByVal sender As Object, ByVal e As RowNodeChangedEventArgs) '自定义事件
Public Sub New()
_errCodeManager = ErrCodeManager.CreateManager()
_testCmdManager = TestCmdManager.CreateManager()
_planColManager = PlanColManager.CreateManager()
End Sub
#Region "FlexCell"
Public Property Grid() As Grid
Get
Return _grd
End Get
Set(value As Grid)
_grd = value
InitializeGrid()
RemoveHandler _grd.CellChange, AddressOf Grid_CellChange
RemoveHandler _grd.ComboClick, AddressOf Grid_ComboClick
RemoveHandler _grd.ComboDropDown, AddressOf Grid_ComboDropDown
RemoveHandler _grd.SelChange, AddressOf Grid_SelChange
AddHandler _grd.CellChange, AddressOf Grid_CellChange
AddHandler _grd.ComboClick, AddressOf Grid_ComboClick
AddHandler _grd.ComboDropDown, AddressOf Grid_ComboDropDown
AddHandler _grd.SelChange, AddressOf Grid_SelChange
End Set
End Property
''' <summary>
''' 初始化测试站表格
''' </summary>
Public Sub InitializeGrid()
With _grd
.AutoRedraw = False
.Rows = RowNames.Max '行数不确定
.Cols = ColNames.Max
.DisplayRowNumber = True '首列显示数字
.ExtendLastCol = True '最后一列自动扩充
.MultiSelect = False '是否允许选择多行
.BorderStyle = BorderStyleEnum.None
.DefaultFont = New Font("微软雅黑", 8)
.Range(0, 0, 0, .Cols - 1).Font = New Font($"幼圆", 8) '首行样式
For col As Integer = 0 To ColNames.Max - 1
.Cell(0, col).Text = [Enum].GetName(GetType(ColNames), col) '设置列名
Next
For i As Integer = 0 To RowNames.Max - 1
.Cell(i, ColNames.ColName).Text = [Enum].GetName(GetType(RowNames), i) '填充行内容
Next
.Column(ColNames.ColName).Locked = True
.Cell(RowNames.RowType, ColNames.ColValue).CellType = CellTypeEnum.ComboBox
.Cell(RowNames.ControlType, ColNames.ColValue).CellType = CellTypeEnum.ComboBox
.Cell(RowNames.ErrorCode, ColNames.ColValue).CellType = CellTypeEnum.ComboBox
.Cell(RowNames.Command, ColNames.ColValue).CellType = CellTypeEnum.ComboBox
.Cell(RowNames.CommandType, ColNames.ColValue).CellType = CellTypeEnum.ComboBox
.Cell(RowNames.ActionEn, ColNames.ColValue).CellType = CellTypeEnum.CheckBox
.Cell(RowNames.Action, ColNames.ColValue).CellType = CellTypeEnum.CheckBox
.Cell(RowNames.SaveToDb, ColNames.ColValue).CellType = CellTypeEnum.CheckBox
.Cell(RowNames.ActionEn, ColNames.ColValue).Locked = True
'CommandType 背景色
.Range(RowNames.CommandType, ColNames.ColValue, RowNames.CommandType, ColNames.ColValue).BackColor = Color.LemonChiffon
'Command 背景色
.Range(RowNames.Command, ColNames.ColValue, RowNames.Command, ColNames.ColValue).BackColor = Color.Beige
.Range(RowNames.Command, ColNames.ColValue, RowNames.Command, ColNames.ColValue).FontSize = 10
.Range(RowNames.Command, ColNames.ColValue, RowNames.Command, ColNames.ColValue).FontBold = True
'Description 背景色
.Range(RowNames.Description, ColNames.ColValue, RowNames.Description, ColNames.ColValue).BackColor = Color.MistyRose
.Range(RowNames.Description, ColNames.ColValue, RowNames.Description, ColNames.ColValue).FontSize = 10
.ComboBox(0).Locked = True
.AutoRedraw = True
.Refresh()
End With
End Sub
#End Region
#Region "表格事件处理"
Private _isUpload As Boolean
Private _beforeNode As RowNode
Private Sub Grid_CellChange(sender As Object, e As CellChangeEventArgs)
If ActiveRowNode Is Nothing Then Return
If _cellChanged = GridCellChangedEnum.None Then _cellChanged = GridCellChangedEnum.RowNodeInfo
If _cellChanged <> GridCellChangedEnum.RowNodeInfo Then Return
If Not _isUpload Then _beforeNode = ActiveRowNode.Clone
_isUpload = True
If e.Col = ColNames.ColValue Then
Dim value As String = _grd.Cell(e.Row, e.Col).Text
Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType = RowNodeChangedEventArgs.RowNodeChangeType.None
Select Case e.Row
Case RowNames.Action
ActiveRowNode.Action = _grd.Cell(e.Row, e.Col).BooleanValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Action
Case RowNames.Label
ActiveRowNode.Label = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Label
Case RowNames.CommandType
Dim cmdType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
If String.Compare(ActiveRowNode.CommandType, cmdType) <> 0 Then
ActiveRowNode.CommandType = cmdType
ActiveRowNode.Command = ""
ActiveRowNode.Parameters.Clear()
ActiveRowNode.Action = Not String.IsNullOrWhiteSpace(ActiveRowNode.Command)
CommandTypeChanged(ActiveRowNode)
End If
ActiveRowNode.CommandType = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
Case RowNames.ControlType
ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
Case RowNames.Command
Dim cmdName As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
If String.Compare(ActiveRowNode.Command, cmdName) <> 0 Then
ActiveRowNode.Command = cmdName
ActiveRowNode.Parameters.Clear()
ActiveRowNode.Action = Not String.IsNullOrWhiteSpace(ActiveRowNode.Command)
'拷贝所有参数到当前节点信息中
Dim planCommand As TestCmd = _testCmdManager.GetCommand(ActiveRowNode.CommandType, ActiveRowNode.Command)
If planCommand Is Nothing Then Return
For Each cmdParam As TestCmdParam In planCommand.Params
ActiveRowNode.Parameters.Add(cmdParam.Clone())
Next
'更新行节点信息表格内容
CommandChanged(ActiveRowNode)
End If
ActiveRowNode.Command = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
Case RowNames.ErrorCode
Dim codeMsg As String = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text
Dim errCode As String = ErrCodeManager.CodeMsgToCode(codeMsg)
If String.Compare(ActiveRowNode.ErrorCode, errCode) <> 0 Then
ActiveRowNode.ErrorCode = errCode
ActiveRowNode.ErrorMessage = _errCodeManager(ActiveRowNode.ErrorCode).Msg
_grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text = errCode
_grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor = _errCodeManager(ActiveRowNode.ErrorCode).Color
_grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).BackColor = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor
ErrCodeChanged(ActiveRowNode)
End If
ActiveRowNode.ErrorCode = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
Case RowNames.ErrorMessage
ActiveRowNode.ErrorMessage = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
Case RowNames.RowType
ActiveRowNode.RowType = CType([Enum].Parse(GetType(RowNode.RowTypeEnum), value), RowNode.RowTypeEnum)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RowType
Case RowNames.Description
ActiveRowNode.Description = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Description
Case RowNames.SaveToDb
ActiveRowNode.SaveToDb = _grd.Cell(e.Row, e.Col).BooleanValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.SaveToDb
Case RowNames.RecordName
ActiveRowNode.RecordName = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RecordName
Case RowNames.Retry
ActiveRowNode.Retry = CInt(value)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Retry
Case RowNames.RetryInterval
ActiveRowNode.RetryInterval = CInt(value)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RetryInterval
Case >= RowNames.Parameters
If e.Row - RowNames.Parameters > ActiveRowNode.Parameters.Count - 1 Then Return
ActiveRowNode.Parameters(e.Row - RowNames.Parameters).Value = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Parameters
End Select
If changeType = RowNodeChangedEventArgs.RowNodeChangeType.None Then Return
If _beforeNode IsNot Nothing Then
Dim args As New RowNodeChangedEventArgs With {
.Node = ActiveRowNode,
.BeforeNode = _beforeNode,
.ChangeType = changeType
}
RaiseEvent RowNodeTextChanged(sender, args)
End If
End If
_isUpload = False
_cellChanged = GridCellChangedEnum.None
End Sub
''' <summary>
''' 单行信息表格命令修改后,同步刷新本身信息
''' </summary>
Private Sub CommandChanged(node As RowNode)
_grd.Rows = RowNames.Parameters + node.Parameters.Count
For idx As Integer = 0 To node.Parameters.Count - 1
Dim row As Integer = RowNames.Parameters + idx
_grd.Cell(row, ColNames.ColName).Text = node.Parameters(idx).Desc
_grd.Cell(row, ColNames.ColValue).Text = node.Parameters(idx).Value
Next
_grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).BackColor = Color.LightGray
_grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).Alignment = AlignmentEnum.RightCenter
End Sub
Private Sub CommandTypeChanged(node As RowNode)
_grd.Rows = RowNames.Parameters + 1
_grd.Cell(RowNames.Command, ColNames.ColValue).Text = node.Command
_grd.Cell(RowNames.Parameters, ColNames.ColName).Text = RowNames.Parameters.ToString()
_grd.Cell(RowNames.Parameters, ColNames.ColValue).Text = ""
_grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).BackColor = Color.LightGray
_grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).Alignment = AlignmentEnum.RightCenter
End Sub
Private Sub ErrCodeChanged(node As RowNode)
_grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).Text = node.ErrorMessage
End Sub
''' <summary>
''' 下拉框选择对象事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Grid_ComboClick(sender As Object, e As ComboClickEventArgs)
'If ActiveRowNode Is Nothing Then Return
'Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType = RowNodeChangedEventArgs.RowNodeChangeType.None
'Dim beforeNode As RowNode = ActiveRowNode.Clone
'Select Case _grdSingleRowDropRow
' Case RowNames.ControlType
' ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
' changeType = RowNodeChangedEventArgs.RowNodeChangeType.ControlType
' Case RowNames.CommandType
' '如果命令类型变化则,清空命令
' Dim cmdType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
' If String.Compare(ActiveRowNode.CommandType, cmdType) <> 0 Then
' ActiveRowNode.CommandType = cmdType
' ActiveRowNode.Command = ""
' ActiveRowNode.Parameters.Clear()
' CommandTypeChanged(ActiveRowNode)
' changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
' End If
' Case RowNames.Command
' Dim cmdName As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
' If String.Compare(ActiveRowNode.Command, cmdName) <> 0 Then
' ActiveRowNode.Command = cmdName
' ActiveRowNode.Parameters.Clear()
' '拷贝所有参数到当前节点信息中
' Dim planCommand As TestCmd = _testCmdManager.GetCommand(ActiveRowNode.CommandType, ActiveRowNode.Command)
' If planCommand Is Nothing Then Return
' For Each cmdParam As TestCmdParam In planCommand.Params
' ActiveRowNode.Parameters.Add(cmdParam.Clone())
' Next
' '更新行节点信息表格内容
' CommandChanged(ActiveRowNode)
' changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
' End If
' Case RowNames.ErrorCode
' Dim codeMsg As String = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text
' Dim errCode As String = ErrCodeManager.CodeMsgToCode(codeMsg)
' If String.Compare(ActiveRowNode.ErrorCode, errCode) <> 0 Then
' ActiveRowNode.ErrorCode = errCode
' ActiveRowNode.ErrorMessage = _errCodeManager(ActiveRowNode.ErrorCode).Msg
' _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text = errCode
' _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor = _errCodeManager(ActiveRowNode.ErrorCode).Color
' _grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).BackColor = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor
' ErrCodeChanged(ActiveRowNode)
' changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
' End If
'End Select
'If changeType = RowNodeChangedEventArgs.RowNodeChangeType.None Then Return
'Dim args As New RowNodeChangedEventArgs With {
' .Node = ActiveRowNode,
' .BeforeNode = beforeNode,
' .ChangeType = changeType
'}
'RaiseEvent RowNodeTextChanged(sender, args)
End Sub
''' <summary>
''' 表格下拉框出现时触发事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Grid_ComboDropDown(sender As Object, e As ComboDropDownEventArgs)
_grdSingleRowDropRow = e.Row
_grdSingleRowDropCol = e.Col
Select Case e.Row
Case RowNames.ControlType
_grd.ComboBox(0).Items.Clear()
If ActiveRowNode.ParentNode.ControlType = "If" Then
_grd.ComboBox(0).Items.Add("Then")
_grd.ComboBox(0).Items.Add("ElseIf")
_grd.ComboBox(0).Items.Add("Else")
Else
_grd.ComboBox(0).Items.Add("While")
_grd.ComboBox(0).Items.Add("If")
End If
Case RowNames.CommandType
_grd.ComboBox(0).Items.Clear()
_grd.ComboBox(0).Items.AddRange(_testCmdManager.GetCommandTypes())
Case RowNames.Command
_grd.ComboBox(0).Items.Clear()
_grd.ComboBox(0).Items.AddRange(_testCmdManager.GetCommandNames(ActiveRowNode.CommandType))
Case RowNames.ErrorCode
_grd.ComboBox(0).Items.Clear()
_grd.ComboBox(0).Items.AddRange(_errCodeManager.GetAllCodeAndMsg())
Case RowNames.RowType
_grd.ComboBox(0).Items.Clear()
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Control)
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Flow)
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Module)
Case RowNames.Parameters '特殊处理Call命令
_grd.ComboBox(0).Items.Clear()
_grd.ComboBox(0).Items.AddRange(UTS_Core.UTSModule.Test.UtsTester.CreateTester.GetCustomModuleName())
End Select
End Sub
''' <summary>
''' 更新流程列名提示
''' </summary>
''' <param name="colName"></param>
Private Sub UpdatePlanColNameTip(colName As String)
If _planColManager.IndexOf(colName) > 0 Then
Dim planCol As PlanCol = _planColManager(colName)
RtxColTip.SuspendLayout()
RtxColTip.Clear()
RtxColTip.AppendText($"{planCol.ColName}{vbCrLf}")
RtxColTip.AppendText($"类型:{planCol.ColType}{vbCrLf}")
RtxColTip.AppendText($"描述:{planCol.ColDesc}{vbCrLf}")
RtxColTip.ResumeLayout(False)
End If
End Sub
''' <summary>
''' 更新流程命令提示
''' </summary>
''' <param name="colName"></param>
''' <param name="commandType"></param>
''' <param name="commandName"></param>
''' <param name="paramIndex"></param>
Private Sub UpdateCommandTip(colName As String, commandType As String, commandName As String, paramIndex As Integer)
Dim planCommand As TestCmd = _testCmdManager.GetCommand(commandType, commandName)
If planCommand IsNot Nothing Then
RtxColTip.SuspendLayout()
RtxColTip.Clear()
RtxColTip.AppendText($"{colName}{vbCrLf}")
RtxColTip.AppendText($"类型:{planCommand.Params(paramIndex).Type}{vbCrLf}")
RtxColTip.AppendText($"上限:{planCommand.Params(paramIndex).UpperLimit}{vbCrLf}")
RtxColTip.AppendText($"下限:{planCommand.Params(paramIndex).LowerLimit}{vbCrLf}")
RtxColTip.AppendText($"描述:{planCommand.Params(paramIndex).Desc}{vbCrLf}")
RtxColTip.ResumeLayout(False)
Else
RtxColTip.AppendText($"{colName}{vbCrLf}")
End If
End Sub
''' <summary>
''' 单行信息表格更新当前行
''' </summary>
''' <param name="row"></param>
Private Sub UpdateSingleRowTip(row As Integer)
Dim colName As String = _grd.Cell(row, ColNames.ColName).Text
If row >= RowNames.Parameters Then
Dim commandType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
Dim command As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
If String.IsNullOrEmpty(command) Then
UpdatePlanColNameTip(colName)
Else
UpdateCommandTip(colName, commandType, command, row - RowNames.Parameters)
End If
Else
UpdatePlanColNameTip(colName)
End If
End Sub
Private Sub SingleRowSelChange(row As Integer)
If _lastSingleRowSelRow = row Then Return
If _lastSingleRowSelRow >= _grd.Rows Then Return
'新增命令切换处理
_grd.Cell(_lastSingleRowSelRow, ColNames.ColName).FontBold = False
_grd.Cell(row, ColNames.ColName).FontBold = True
UpdateSingleRowTip(row) '更新列提示
_lastSingleRowSelRow = row
End Sub
Private Sub Grid_SelChange(sender As Object, e As SelChangeEventArgs)
SingleRowSelChange(e.FirstRow)
End Sub
#End Region
#Region "外部事件处理"
''' <summary>
''' 主表格选中单元格时触发事件
''' </summary>
''' <param name="node"></param>
''' <param name="LineNumber"></param>
''' <param name="LineActionEn"></param>
Public Sub AfterSelectUpdateGrid(node As RowNode, LineNumber As Integer, LineActionEn As Boolean)
Dim col As Integer = ColNames.ColValue
Dim textColor As Color
Dim RecordNameEn As Boolean
_grd.AutoRedraw = False
With _grd
.SuspendLayout()
.Column(col).Locked = Not node.CanChangeContent '是否允许编辑
If node.Parameters.Count > 0 Then
.Rows = RowNames.Parameters + node.Parameters.Count
'todo:特殊处理Call命令
If node.Command = "Call" Then
.Cell(RowNames.Parameters, col).CellType = CellTypeEnum.ComboBox
Else
.Cell(RowNames.Parameters, col).CellType = CellTypeEnum.TextBox
End If
For i As Integer = 0 To node.Parameters.Count - 1
.Cell(RowNames.Parameters + i, ColNames.ColName).Text = node.Parameters(i).Desc
.Cell(RowNames.Parameters + i, col).Text = node.Parameters(i).Value
Next
Else
.Rows = RowNames.Parameters + 1
.Cell(RowNames.Parameters, ColNames.ColName).Text = RowNames.Parameters.ToString()
.Cell(RowNames.Parameters, col).CellType = CellTypeEnum.TextBox
.Cell(RowNames.Parameters, col).Text = ""
End If
.Cell(RowNames.LineNumber, col).Text = LineNumber.ToString
.Cell(RowNames.RowType, col).Text = node.RowType.ToString()
.Cell(RowNames.ActionEn, col).Text = LineActionEn.ToString()
.Cell(RowNames.Action, col).Text = IIf(node.Action, "1", "0").ToString()
.Cell(RowNames.ErrorCode, col).Text = node.ErrorCode.ToString()
.Cell(RowNames.ErrorMessage, col).Text = node.ErrorMessage.ToString()
.Cell(RowNames.Command, col).Text = node.Command.ToString()
.Cell(RowNames.CommandType, col).Text = node.CommandType.ToString()
.Cell(RowNames.[Label], col).Text = node.[Label].ToString()
.Cell(RowNames.Description, col).Text = node.Description.ToString()
.Cell(RowNames.SaveToDb, col).Text = node.SaveToDb.ToString()
.Cell(RowNames.RecordName, col).Text = node.RecordName.ToString()
.Cell(RowNames.Retry, col).Text = node.Retry.ToString()
.Cell(RowNames.RetryInterval, col).Text = node.RetryInterval.ToString()
textColor = setRowTextForeColor(.Cell(RowNames.CommandType, col).Text, LineActionEn, node.RowType)
.Cell(RowNames.CommandType, col).ForeColor = textColor
.Cell(RowNames.RecordName, col).ForeColor = textColor
Select Case node.RowType
Case RowNode.RowTypeEnum.FixedModule
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).BackColor = Color.PeachPuff
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).ForeColor = Color.Blue
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).FontBold = True
Case Else
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).BackColor = Color.White
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).ForeColor = textColor
.Range(RowNames.RowType, col, RowNames.RowType, ColNames.Max - 1).FontBold = False
End Select
If String.IsNullOrWhiteSpace(node.ErrorCode) = False Then
.Cell(RowNames.ErrorCode, col).BackColor = _errCodeManager(node.ErrorCode).Color
.Cell(RowNames.ErrorMessage, col).BackColor = .Cell(RowNames.ErrorCode, col).BackColor
Else
.Cell(RowNames.ErrorCode, col).BackColor = Color.White
.Cell(RowNames.ErrorMessage, col).BackColor = Color.White
End If
' .Range(RowNames.Label, ColNames.ColValue, _grd.Rows - 1, ColNames.ColValue).BackColor = Color.White
.Range(RowNames.Label, ColNames.ColValue, _grd.Rows - 1, ColNames.ColValue).ForeColor = textColor
' .Range(RowNames.Label, ColNames.ColValue, _grd.Rows - 1, ColNames.ColValue).FontBold = False
RecordNameEn = LineActionEn And .Cell(RowNames.SaveToDb, col).BooleanValue
textColor = setRowTextForeColor(.Cell(RowNames.CommandType, col).Text, RecordNameEn, node.RowType)
.Cell(RowNames.RecordName, col).ForeColor = textColor
.Cell(RowNames.Command, ColNames.ColValue).ForeColor = Color.Blue
.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).BackColor = Color.LightGray
.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).Alignment = AlignmentEnum.RightCenter
.ResumeLayout(False)
.PerformLayout()
End With
_grd.AutoRedraw = True
_grd.Refresh()
End Sub
''' <summary>
''' 根据CmdType 和 isAction 返回该行字体颜色
''' </summary>
''' <returns></returns>
Public Function setRowTextForeColor(rowCmdType As String, isAction As Boolean, Optional rowNodeType As Integer = 3) As Color
If isAction = True Then
If rowNodeType = RowNode.RowTypeEnum.Flow Then
Select Case rowCmdType
Case "System"
Return Color.DarkSlateGray
Case "ComPort"
Return Color.DarkCyan
Case "UtsComPort"
Return Color.SeaGreen
Case "Converter"
Return Color.DarkOrange
Case "Process"
Return Color.DarkBlue
Case Else
Return Color.Black
End Select
ElseIf rowNodeType = RowNode.RowTypeEnum.Module Then
Return Color.DeepPink
ElseIf rowNodeType = RowNode.RowTypeEnum.FixedModule Then
Return Color.Blue
End If
Else
Return Color.LightGray
End If
End Function
Public Sub Grid_PlanNodeSelectChanged(sender As Object, ByVal e As PlanNodeSelectChangedEventArgs)
If e.Node Is Nothing Then Return
If _cellChanged = GridCellChangedEnum.None Then _cellChanged = GridCellChangedEnum.SelectChange
If _cellChanged = GridCellChangedEnum.SelectChange Then
ActiveRowNode = e.Node
AfterSelectUpdateGrid(ActiveRowNode, e.LineNumber, e.LineActionEn)
_cellChanged = GridCellChangedEnum.None
End If
End Sub
Public Sub RowNodeTextChangedUpdateGrid(e As RowNodeChangedEventArgs)
Dim col As Integer = ColNames.ColValue
Dim node As RowNode = e.Node
With _grd
Select Case e.ChangeType
Case RowNodeChangedEventArgs.RowNodeChangeType.Action
.Cell(RowNames.Action, col).Text = IIf(node.Action, "1", "0").ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.SaveToDb
.Cell(RowNames.SaveToDb, col).Text = IIf(node.SaveToDb, "1", "0").ToString
Case RowNodeChangedEventArgs.RowNodeChangeType.RowType
.Cell(RowNames.RowType, col).Text = node.RowType.ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.Label
.Cell(RowNames.[Label], col).Text = node.[Label].ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.Description
.Cell(RowNames.Description, col).Text = node.Description.ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.CommandType
.Cell(RowNames.CommandType, col).Text = node.CommandType.ToString()
CommandTypeChanged(node)
Case RowNodeChangedEventArgs.RowNodeChangeType.Command
.Cell(RowNames.Command, col).Text = node.Command.ToString()
CommandChanged(node)
Case RowNodeChangedEventArgs.RowNodeChangeType.Parameters
If node.Parameters.Count > 0 Then
.Rows = RowNames.Parameters + node.Parameters.Count
For i As Integer = 0 To node.Parameters.Count - 1
.Cell(RowNames.Parameters + i, ColNames.ColName).Text = node.Parameters(i).Desc
.Cell(RowNames.Parameters + i, col).Text = node.Parameters(i).Value
Next
Else
.Rows = RowNames.Parameters + 1
.Cell(RowNames.Parameters, ColNames.ColName).Text = RowNames.Parameters.ToString()
.Cell(RowNames.Parameters, col).Text = ""
End If
Case RowNodeChangedEventArgs.RowNodeChangeType.RecordName
.Cell(RowNames.RecordName, col).Text = node.RecordName.ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.Retry
.Cell(RowNames.Retry, col).Text = node.Retry.ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.RetryInterval
.Cell(RowNames.RetryInterval, col).Text = node.RetryInterval.ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
.Cell(RowNames.ErrorCode, col).Text = node.ErrorCode
If String.IsNullOrWhiteSpace(node.ErrorCode) = False Then
.Cell(RowNames.ErrorCode, col).BackColor = _errCodeManager(node.ErrorCode).Color
.Cell(RowNames.ErrorMessage, col).BackColor = .Cell(RowNames.ErrorCode, col).BackColor
Else
.Cell(RowNames.ErrorCode, col).BackColor = Color.White
.Cell(RowNames.ErrorMessage, col).BackColor = Color.White
End If
Case RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
.Cell(RowNames.ErrorMessage, col).Text = node.ErrorMessage.ToString()
End Select
End With
End Sub
Public Sub Grid_RowNodeTextChanged(sender As Object, e As RowNodeChangedEventArgs)
If _cellChanged = GridCellChangedEnum.None Then _cellChanged = GridCellChangedEnum.TextChange
If _cellChanged <> GridCellChangedEnum.TextChange Then Return
RowNodeTextChangedUpdateGrid(e)
_cellChanged = GridCellChangedEnum.None
End Sub
#End Region
Public Enum ColNames
Sn
ColName
ColValue
Max
End Enum
Public Enum RowNames
ColName
LineNumber
RowType
[Label]
ControlType
Description
ActionEn
Action
SaveToDb
RecordName
Retry
RetryInterval
ErrorCode
ErrorMessage
CommandType
Command
Parameters
Max
End Enum
''' <summary>
''' 详细信息表格内容变更类型枚举值
''' </summary>
Enum GridCellChangedEnum
''' <summary>
''' 未变更
''' </summary>
None
''' <summary>
''' 加载流程时时引起的变更
''' </summary>
TestPlan
''' <summary>
''' 行节点信息修改引起的变更
''' </summary>
RowNodeInfo
''' <summary>
''' 切换选择节点引起的变更
''' </summary>
SelectChange
''' <summary>
''' 关联节点内容变更
''' </summary>
TextChange
End Enum
End Class
End Namespace

View File

@@ -0,0 +1,139 @@
Imports System.Drawing
Namespace UTSModule.Station
Public Class RowNodeStyle
Sub New()
NodeFont = New Font($"Consolas", 8.5, FontStyle.Regular)
NodeForeColor = Color.Transparent
NodeBackColor = Color.Transparent
NodeImageKey = String.Empty
ShowLabel = False
ShowDescription = False
ShowCommand = False
ShowParameter = False
ShowRetry = False
ShowRetryInterval = False
ShowErrorCode = False
ShowErrorMessage = False
ShowAction = False
ShowRecord = False
End Sub
Sub New(type As RowNode.RowTypeEnum)
Select Case type
Case RowNode.RowTypeEnum.FixedModule
NodeBackColor = Color.Transparent
NodeFont = New Font($"Consolas", 11.5, FontStyle.Bold Or FontStyle.Italic)
NodeForeColor = Color.SkyBlue
NodeImage = Nothing
NodeImageKey = type.ToString()
ShowLabel = True
ShowDescription = True
Case RowNode.RowTypeEnum.Module
NodeBackColor = Color.Transparent
NodeFont = New Font($"Consolas", 10.5, FontStyle.Bold)
NodeForeColor = Color.LightSkyBlue
NodeImage = Nothing
NodeImageKey = type.ToString()
ShowLabel = True
ShowDescription = True
Case RowNode.RowTypeEnum.Control
NodeBackColor = Color.Transparent
NodeFont = New Font($"Consolas", 9.5, FontStyle.Italic)
NodeForeColor = Color.DarkOrchid
NodeImage = Nothing
NodeImageKey = type.ToString()
ShowLabel = True
ShowDescription = True
ShowCommand = True
ShowParameter = True
Case RowNode.RowTypeEnum.Flow
NodeBackColor = Color.Transparent
NodeFont = New Font($"Consolas", 8.5, FontStyle.Regular)
NodeForeColor = Color.Black
NodeImage = Nothing
NodeImageKey = type.ToString()
ShowLabel = True
ShowDescription = True
ShowCommand = True
ShowParameter = True
ShowRetry = True
ShowRetryInterval = True
ShowErrorCode = True
ShowErrorMessage = True
ShowAction = True
ShowRecord = True
End Select
End Sub
''' <summary>
''' 节点字体
''' </summary>
''' <returns></returns>
Public Property NodeFont() As Font
''' <summary>
''' 节点字体颜色
''' </summary>
''' <returns></returns>
Public Property NodeForeColor() As Color
''' <summary>
''' 节点图标
''' </summary>
''' <returns></returns>
Public Property NodeImage() As Image
''' <summary>
''' 节点图标索引
''' </summary>
''' <returns></returns>
Public Property NodeImageKey() As String
''' <summary>
''' 节点背景颜色
''' </summary>
''' <returns></returns>
Public Property NodeBackColor() As Color
Public Property ShowRowType As Boolean
Public Property ShowLabel As Boolean
Public Property ShowDescription As Boolean
Public Property ShowAction As Boolean
Public Property ShowRecord As Boolean
Public Property ShowRetry As Boolean
Public Property ShowRetryInterval As Boolean
Public Property ShowErrorCode As Boolean
Public Property ShowErrorMessage As Boolean
Public Property ShowCommand As Boolean
Public Property ShowParameter As Boolean
End Class
End Namespace

View File

@@ -0,0 +1,369 @@

Imports System.Text
Imports System.Xml
Namespace UTSModule.Station
Public Class StationPackagePlan
Inherits StationPlan
Sub New(packet As StationPacket)
MyBase.New(packet)
CreateStationPlan()
End Sub
''' <summary>
''' 校验条码未测试后处理方式
''' </summary>
''' <returns></returns>
Public Property CheckSnTested As CheckStatus
''' <summary>
''' 校验条码已参与包装后处理方式
''' </summary>
''' <returns></returns>
Public Property CheckSnPackaged As CheckStatus
''' <summary>
''' 校验条码不属于指定MO后处理方式
''' </summary>
''' <returns></returns>
Public Property CheckSnMO As CheckStatus
''' <summary>
''' 保存图像的数量
''' </summary>
''' <returns></returns>
Public Property PictureCount As Integer
''' <summary>
''' 解锁密码
''' </summary>
''' <returns></returns>
Public Property UnlockKey As String
''' <summary>
''' 条码类型
''' </summary>
''' <returns></returns>
Public Property BarCodeType As BarcodeTypes
''' <summary>
''' 缺失条码数量后的处理方式
''' </summary>
''' <returns></returns>
Public Property MissingQuantity As MissCountStatus
''' <summary>
''' 缺失条码数量后的解锁密码
''' </summary>
''' <returns></returns>
Public Property MissingQuantityKey As String
''' <summary>
''' 是否自动打印
''' </summary>
''' <returns></returns>
Public Property AutoPrint As Boolean
''' <summary>
''' 发生错误后报警文件
''' </summary>
''' <returns></returns>
Public Property ErrorSound As String
''' <summary>
''' 模板文件名
''' </summary>
''' <returns></returns>
Public Property TemplateFile As String
''' <summary>
''' 箱号编辑密码
''' </summary>
''' <returns></returns>
Public Property BoxMumEditKey As String
''' <summary>
''' 公司Logo文件
''' </summary>
''' <returns></returns>
Public Property CompanyLogo As String
''' <summary>
''' 公司名称
''' </summary>
''' <returns></returns>
Public Property CompanyName As String
''' <summary>
''' 箱号规则
''' </summary>
''' <returns></returns>
Public Property BoxNumText As String
''' <summary>
''' 箱号条码
''' </summary>
''' <returns></returns>
Public Property BoxBarCode As String
''' <summary>
''' 前置站位
''' </summary>
''' <returns></returns>
Public Property ForwardPosition As String
''' <summary>
''' 后置站位
''' </summary>
''' <returns></returns>
Public Property RearPosition As String
''' <summary>
''' 软件版本
''' </summary>
''' <returns></returns>
Public Property Versions As String
Public Overrides Sub CreateStationPlan()
CheckSnTested = CheckStatus.Fail
CheckSnPackaged = CheckStatus.Fail
CheckSnMO = CheckStatus.Fail
UnlockKey = ""
BarCodeType = BarcodeTypes.AsTemplate
MissingQuantity = MissCountStatus.Key
MissingQuantityKey = ""
AutoPrint = False
ErrorSound = ""
TemplateFile = ""
BoxMumEditKey = ""
CompanyLogo = ""
CompanyName = ""
BoxNumText = ""
BoxBarCode = ""
ForwardPosition = ""
RearPosition = ""
Versions = ""
End Sub
Public Overrides Sub SaveFile(path As String)
Dim xws As New XmlWriterSettings
With xws
.Indent = True
.NewLineOnAttributes = False
.Encoding = New UTF8Encoding(False)
End With
Using xw As XmlWriter = XmlWriter.Create(path, xws)
xw.WriteStartDocument()
xw.WriteStartElement($"UtsStationPlan") '创建跟节点
xw.WriteStartElement($"Properties") '创建表属性节点
'测试流程的属性
xw.WriteElementString("CheckSnTested", CheckSnTested.ToString)
xw.WriteElementString("CheckSnPackaged", CheckSnPackaged.ToString)
xw.WriteElementString("CheckSnMO", CheckSnMO.ToString)
xw.WriteElementString("PictureCount", PictureCount.ToString)
xw.WriteElementString("UnlockKey", UnlockKey)
xw.WriteElementString("BarCodeType", BarCodeType.ToString)
xw.WriteElementString("MissingQuantity", MissingQuantity.ToString)
xw.WriteElementString("MissingQuantityKey", MissingQuantityKey)
xw.WriteElementString("AutoPrint", AutoPrint.ToString)
xw.WriteElementString("ErrorSound", ErrorSound)
xw.WriteElementString("TemplateFile", TemplateFile)
xw.WriteElementString("BoxMumEditKey", BoxMumEditKey)
xw.WriteElementString("CompanyLogo", CompanyLogo)
xw.WriteElementString("CompanyName", CompanyName)
xw.WriteElementString("BoxNumText", BoxNumText)
xw.WriteElementString("ForwardPosition", ForwardPosition)
xw.WriteElementString("RearPosition", RearPosition)
xw.WriteElementString("Versions", Versions)
xw.WriteEndElement()
xw.WriteEndElement()
xw.WriteEndDocument()
End Using
End Sub
''' <summary>
''' 读取测试站属性
''' </summary>
''' <param name="nodeList"></param>
Private Sub LoadProperties(nodeList As XmlNodeList)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "CheckSnTested"
If [Enum].TryParse(xe.InnerText, CheckSnTested) = False Then
CheckSnTested = CheckStatus.Fail
End If
Case "CheckSnPackaged"
If [Enum].TryParse(xe.InnerText, CheckSnPackaged) = False Then
CheckSnPackaged = CheckStatus.Fail
End If
Case "CheckSnMO"
If [Enum].TryParse(xe.InnerText, CheckSnMO) = False Then
CheckSnMO = CheckStatus.Fail
End If
Case "PictureCount"
If Integer.TryParse(xe.InnerText, PictureCount) = False Then
PictureCount = 1
End If
Case "UnlockKey"
UnlockKey = xe.InnerText
Case "BarCodeType"
If [Enum].TryParse(xe.InnerText, BarCodeType) = False Then
BarCodeType = BarcodeTypes.AsTemplate
End If
Case "MissingQuantity"
If [Enum].TryParse(xe.InnerText, MissingQuantity) = False Then
MissingQuantity = MissCountStatus.Key
End If
Case "MissingQuantityKey"
MissingQuantityKey = xe.InnerText
Case "AutoPrint"
If Boolean.TryParse(xe.InnerText, AutoPrint) = False Then
AutoPrint = False
End If
Case "ErrorSound"
ErrorSound = xe.InnerText
Case "TemplateFile"
TemplateFile = xe.InnerText
Case "BoxMumEditKey"
BoxMumEditKey = xe.InnerText
Case "CompanyLogo"
CompanyLogo = xe.InnerText
Case "CompanyName"
CompanyName = xe.InnerText
Case "BoxNumText"
BoxNumText = xe.InnerText
Case "BoxBarCode"
BoxBarCode = xe.InnerText
Case "RearPosition"
RearPosition = xe.InnerText
Case "ForwardPosition"
ForwardPosition = xe.InnerText
Case "Versions"
Versions = xe.InnerText
Case Else
'Throw New Exception($"StationPackagePlan LoadProperties Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
Public Overrides Sub LoadFile(path As String)
Dim xd As New XmlDocument()
xd.Load(path)
Dim xe As XmlElement
Dim nodeList As XmlNodeList = xd.SelectSingleNode($"UtsStationPlan").ChildNodes
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "Properties"
LoadProperties(xe.ChildNodes)
Case Else
Throw New Exception($"StationPackagePlan LoadXml Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
''' <summary>
''' 校验条码失败后处理方式
''' </summary>
Enum CheckStatus
''' <summary>
''' 不处理
''' </summary>
None
''' <summary>
''' 校验失败
''' </summary>
Fail
''' <summary>
''' 程序锁定,需要管理员密码解锁,并写入注册表
''' </summary>
Lock
''' <summary>
''' 忽略错误继续录入
''' </summary>
Ignore
End Enum
''' <summary>
''' 条码总数缺少的处理方式
''' </summary>
Enum MissCountStatus
''' <summary>
''' 允许录入
''' </summary>
Yes
''' <summary>
''' 不允许录入
''' </summary>
No
''' <summary>
''' 需要输入密码解锁
''' </summary>
Key
End Enum
''' <summary>
''' 条码单元格的类型
''' </summary>
Enum BarcodeTypes
''' <summary>
''' 以模板内容为准
''' </summary>
AsTemplate
''' <summary>
''' CODE39支持的字符空格, 数字, 大写字母, $, %, *, +, -, ., /
''' </summary>
CODE39
''' <summary>
''' CODE128A支持的字符空格, 数字, 大写字母, 标点符号, @, #, $, %, ^, +, -, *, /
''' </summary>
CODE128A
''' <summary>
''' CODE128B支持的字符空格, 数字, 小写字母, 大写字母, 标点符号, @, #, $, %, ^, +, -, *, /, ~
''' </summary>
CODE128B
''' <summary>
''' CODE128C只能包含数字
''' </summary>
CODE128C
''' <summary>
''' EAN128只能包含数字
''' </summary>
EAN128
''' <summary>
''' EAN13是商品编码必须是13位数字第13位是根据前面12位运算后得到的
''' </summary>
EAN13
''' <summary>
''' Interleaved2of5只能包含数字数字的长度必须为偶数
''' </summary>
Interleaved2of5
End Enum
End Class
End Namespace

View File

@@ -0,0 +1,700 @@
Imports System.IO
Imports System.Text
Imports System.Xml
Imports FluentFTP
Imports UTS_Core.Database
Imports UTS_Core.Security
Imports UTS_Core.UTSModule.Station.ProcessStation
Imports UTS_Core.UTSModule.Test.StatusMonitor
Namespace UTSModule.Station
Public Class StationPacket
Sub New(processStation As ProcessStation)
CurrentImprint = New StationPacketImprint()
HistoryImprints = New List(Of StationPacketImprint)()
_stationType = processStation.StationType
StationPlan = StationPlanManager.CreateStationPlan(_stationType, Me)
EditPwd = String.Empty
ReleasePwd = String.Empty
StationVersion = 0 '项目站版本从一开始
ParentProcessStation = processStation
End Sub
Private _image As Drawing.Image
Private _imageFileName As String
Private _fileName As String
Private _name As String
Private _stationType As StationTypeEnum
''' <summary>测试包文件名称,不含.uts后缀</summary>
Public ReadOnly Property Name() As String
Get
Return _name
End Get
End Property
''' <summary>测试包文件名称,含.uts后缀</summary>
Public Property FileName() As String
Get
Return _fileName
End Get
Set(value As String)
_fileName = value
If String.IsNullOrWhiteSpace(_fileName) Then
_name = String.Empty
Else
_name = Path.GetFileNameWithoutExtension(_fileName)
End If
End Set
End Property
''' <summary>
''' 当前站包所属站位类型
''' </summary>
''' <returns></returns>
Public Property StationType As StationTypeEnum
Get
Return _stationType
End Get
Set(value As StationTypeEnum)
_stationType = value
StationPlan = StationPlanManager.CreateStationPlan(_stationType, Me)
End Set
End Property
''' <summary>测试站包MD5值</summary>
Public Property PacketMD5 As String
''' <summary>测试站包版本</summary>
Public Property StationVersion As Integer
''' <summary>修改项目流程时所需密码</summary>
Public Property EditPwd As String
''' <summary>发布项目流程时所需密码</summary>
Public Property ReleasePwd As String
''' <summary>测试站包有效日期</summary>
Public Property ValidDate As Date
''' <summary>测试站包创建时间</summary>
Public Property CreateTime As Date
''' <summary>测试站包修改时间</summary>
Public Property ModifiedTime As Date
''' <summary>发布测试站包的应用程序版本</summary>
Public Property AppVersion() As Version
''' <summary>发布测试站包的图片</summary>
Public ReadOnly Property StationImage As Drawing.Image
Get
Return _image
End Get
End Property
''' <summary>
''' 项目站包历史发布说明
''' </summary>
''' <returns></returns>
Public Property HistoryImprints() As List(Of StationPacketImprint)
''' <summary>
''' 当前版本发布说明
''' </summary>
''' <returns></returns>
Public Property CurrentImprint() As StationPacketImprint
Public Shared Function PacketImprintsToString(imprints As List(Of StationPacketImprint)) As String
Dim strReturn As New StringBuilder
For Each imprint As StationPacketImprint In imprints
strReturn.Append($"{imprint.FileName}{vbNewLine}")
strReturn.Append($"{imprint.Creator}{vbNewLine}")
strReturn.Append(vbNewLine)
strReturn.Append(imprint.ToString())
strReturn.Append(vbNewLine)
strReturn.Append(String.Empty.PadRight(40, "-"c))
strReturn.Append(vbNewLine)
Next
Return strReturn.ToString() '将历史记录转换成文本
End Function
Public Property ImageFileName() As String
Get
Return _imageFileName
End Get
Set(value As String)
_imageFileName = value
Try
Dim imagePath As String = $"{UtsPath.GetStationPacketResourceDirPath(Name)}\{_imageFileName}"
If File.Exists(imagePath) Then
_image = ImageProcessor.ImageProcessor.GetBitmapImage(imagePath)
Else
_image = Nothing
End If
Catch ex As Exception
Console.WriteLine($"ImageName Convert To Image Error:{ex.Message}")
End Try
End Set
End Property
''' <summary>站位流程,不同的站位流程类型不同</summary>
Public Property StationPlan() As StationPlan
''' <summary>测试站包所在的测试站信息</summary>
Public Property ParentProcessStation() As ProcessStation
''' <summary>
''' 创建项目站包
''' </summary>
Public Sub CreatePacket()
If ParentProcessStation Is Nothing Then Throw New Exception($"项目站包未关联项目站!")
If ParentProcessStation.ParentProject Is Nothing Then Throw New Exception($"项目站包未关联项目!")
StationVersion = 0 '流程从零开始
EditPwd = "123456"
ReleasePwd = "00803"
ValidDate = Now.AddMonths(6) '有效期六个月
CreateTime = Now
ModifiedTime = Now
FileName = NewPacketFileName() '更新文件名,唯一索引
AppVersion = New Version(Windows.Forms.Application.ProductVersion)
HistoryImprints = New List(Of StationPacketImprint)()
CurrentImprint = New StationPacketImprint()
StationPlan = StationPlanManager.CreateStationPlan(_stationType, Me) '新的测试流程
UtsPath.StationPacketDirPath = UtsPath.GetStationPacketDirPath(Name)
UtsPath.StationPacketInfoPath = UtsPath.GetStationPacketInfoPath(Name)
UtsPath.StationPacketResourceDirPath = UtsPath.GetStationPacketResourceDirPath(Name)
UtsPath.StationPacketTestPlanDirPath = UtsPath.GetStationPacketTestPlanDirPath(Name)
'创建相关文件夹
Directory.CreateDirectory(UtsPath.StationPacketDirPath)
Directory.CreateDirectory(UtsPath.StationPacketResourceDirPath)
Directory.CreateDirectory(UtsPath.StationPacketTestPlanDirPath)
End Sub
Private Function LoadImprintNode(nodeList As XmlNodeList) As List(Of String)
Dim imprints As New List(Of String)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "Imprint"
imprints.Add(xe.InnerText)
End Select
Next
Return imprints
End Function
Private Function LoadImprintsNode(nodeList As XmlNodeList) As List(Of String)
Dim imprints As New List(Of String)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "Imprints"
imprints = LoadImprintNode(node.ChildNodes)
End Select
Next
Return imprints
End Function
Private Function LoadHistoryImprintsNode(nodeList As XmlNodeList) As List(Of StationPacketImprint)
Dim packetImprints As New List(Of StationPacketImprint)
Dim xe As XmlElement
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "HistoryImprint"
Dim packetImprint As New StationPacketImprint
packetImprint.FileName = xe.GetAttribute($"PacketName")
packetImprint.Creator = xe.GetAttribute($"Creator")
packetImprint.Imprints = LoadImprintsNode(node.ChildNodes)
packetImprints.Add(packetImprint)
Case Else
Console.WriteLine($"LoadHistoryImprintsNode Unknown NodeName:{xe.LocalName}")
End Select
Next
Return packetImprints
End Function
''' <summary>
''' 加载项目站包信息文件
''' </summary>
''' <param name="packetInfoFilePath"></param>
Private Sub LoadStationPacketInfoFile(packetInfoFilePath As String)
Dim xd As New XmlDocument()
xd.Load(packetInfoFilePath)
Dim nodeList As XmlNodeList = xd.SelectSingleNode("Configs/StationInfo").ChildNodes
For Each node As XmlNode In nodeList
Dim xe As XmlElement = CType(node, XmlElement)
Select Case xe.LocalName
Case "AppVersion"
If Version.TryParse(xe.InnerText, AppVersion) = False Then '版本转换
Throw New Exception($"AppVersionError!")
End If
'If AppVersion.CompareTo(My.Application.Info.Version) > 0 Then '版本比较,应该在加载后校验。
' Throw New Exception($"AppVersion Is Too Low!")
'End If
Case "CreateTime"
If Date.TryParse(xe.InnerText, CreateTime) = False Then
Throw New Exception($"CreateTimeError!")
End If
Case "ModifiedTime"
If Date.TryParse(xe.InnerText, ModifiedTime) = False Then
Throw New Exception($"ModifiedTimeError!")
End If
Case "PassWord"
EditPwd = Aes128.DecryptStr(xe.InnerText, Aes128.ServerAesKey)
Case "ReleasePwd"
ReleasePwd = Aes128.DecryptStr(xe.InnerText, Aes128.ServerAesKey)
Case "ValidDate"
If Date.TryParse(Aes128.DecryptStr(xe.InnerText, Aes128.ServerAesKey), ValidDate) = False Then
Throw New Exception($"ValidDateError!")
End If
Case "StationVersion"
If IsNumeric(xe.InnerText) = False Then
StationVersion = 0
Else
StationVersion = CType(xe.InnerText, Integer)
End If
Case "ImageName"
ImageFileName = xe.InnerText
Case "HistoryImprints"
HistoryImprints = LoadHistoryImprintsNode(xe.ChildNodes)
Case Else
Console.WriteLine($"LoadStationPacketFile Unknown NodeName:{xe.LocalName}")
End Select
Next
End Sub
''' <summary>
''' 加载项目站包时,校验路径
''' </summary>
''' <param name="packetPath"></param>
Private Sub LoadCheckPath(packetPath As String)
If String.IsNullOrEmpty(FileName) Then
Throw New Exception($"未搜索到项目站 {ParentProcessStation.Name} 的项目站包包名,请自行设计发布!")
End If
If File.Exists(packetPath) = False Then
Throw New Exception($"未搜索到项目包 {packetPath},请自行设计发布!")
End If
End Sub
Private Sub LoadCheckMd5(packetPath As String)
If String.IsNullOrEmpty(PacketMD5) Then Return
If File.Exists(packetPath) = False Then
Throw New Exception($"MD5校验失败,未查找到站包文件:{packetPath}")
End If
Dim srcMd5 As String = UTS_Core.Security.Md5.GetFileMd5(packetPath)
If String.Compare(PacketMD5, srcMd5, True) <> 0 Then
File.Delete(packetPath)
Throw New Exception("MD5校验失败请重新选择当前站位下载更新包")
End If
End Sub
''' <summary>
''' 加载项目站包时,解压项目文件到指定路径
''' </summary>
''' <param name="packetPath"></param>
Private Sub LoadExtractFile(packetPath As String)
Dim stationDesignDir As String = UtsPath.StationDesignDirPath()
If Directory.Exists(stationDesignDir) = False Then Directory.CreateDirectory(stationDesignDir)
Compress.Compress.TarExtractToDirectory(packetPath, stationDesignDir) '解压缩文件到指定路径
End Sub
''' <summary>
''' 加载测试站包时,加载项目站包信息
''' </summary>
''' <param name="packetName"></param>
Private Sub LoadFileUpdatePacketInfo(packetName As String)
Dim packetInfoPath As String = $"{UtsPath.GetStationPacketInfoPath(packetName)}"
LoadStationPacketInfoFile(packetInfoPath) '解析项目站信息内容
Dim stationPlanPath As String = $"{UtsPath.GetStationPacketTestPlanDirPath(packetName)}\Main.xml"
StationPlan.LoadFile(stationPlanPath)
End Sub
''' <summary>
''' 加载测试站包内容
''' </summary>
Public Sub LoadPacket()
Dim packetPath As String = UtsPath.StationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, FileName)
'本地不存在压缩包则从FTP上下载
If File.Exists(packetPath) = False Then
Dim remotePath As String = UtsPath.RemoteStationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, FileName)
Dim ftp As UtsFtp = UtsFtp.CreateObject
If ftp.FtpFileExists(remotePath) Then ftp.FtpDownload(remotePath, packetPath)
End If
'加载本地压缩包
LoadCheckPath(packetPath)
LoadCheckMd5(packetPath)
LoadExtractFile(packetPath)
LoadFileUpdatePacketInfo(Name)
End Sub
''' <summary>
''' 保存项目站历史版本说明
''' </summary>
''' <param name="xw"></param>
Private Sub SavePacketHistoryImprints(xw As XmlWriter)
'写入当前版本信息
xw.WriteStartElement($"HistoryImprint")
xw.WriteAttributeString($"PacketName", CurrentImprint.FileName)
xw.WriteAttributeString($"Creator", CurrentImprint.Creator)
xw.WriteStartElement($"Imprints")
For Each imprint As String In CurrentImprint.Imprints
xw.WriteElementString("Imprint", imprint)
Next
xw.WriteEndElement()
xw.WriteEndElement()
'写入历史版本信息
For Each packetImprint As StationPacketImprint In HistoryImprints
xw.WriteStartElement($"HistoryImprint")
xw.WriteAttributeString($"PacketName", packetImprint.FileName)
xw.WriteAttributeString($"Creator", packetImprint.Creator)
xw.WriteStartElement($"Imprints")
For Each imprint As String In packetImprint.Imprints
xw.WriteElementString("Imprint", imprint)
Next
xw.WriteEndElement()
xw.WriteEndElement()
Next
End Sub
''' <summary>
''' 保存项目站信息节点内容
''' </summary>
''' <param name="xw"></param>
Private Sub SavePacketInfoNode(xw As XmlWriter)
xw.WriteElementString("AppVersion", AppVersion.ToString)
xw.WriteElementString("CreateTime", $"{CreateTime:yyyy-MM-dd HH:mm:ss}")
xw.WriteElementString("ModifiedTime", $"{ModifiedTime:yyyy-MM-dd HH:mm:ss}")
xw.WriteElementString("PassWord", Aes128.EncryptStr(EditPwd, Aes128.ServerAesKey))
xw.WriteElementString("ReleasePwd", Aes128.EncryptStr(ReleasePwd, Aes128.ServerAesKey))
xw.WriteElementString("ValidDate", Aes128.EncryptStr(ValidDate.ToString("yyyy-MM-dd"), Aes128.ServerAesKey))
xw.WriteElementString("StationVersion", StationVersion.ToString())
xw.WriteElementString("ImageName", ImageFileName)
xw.WriteStartElement($"HistoryImprints")
SavePacketHistoryImprints(xw)
xw.WriteEndElement()
End Sub
''' <summary>
''' 保存项目站包信息文件
''' </summary>
''' <param name="configPath"></param>
Private Sub SavePacketInfoFile(configPath As String)
Dim xws As New XmlWriterSettings
With xws
.Indent = True
.NewLineOnAttributes = False
.Encoding = New UTF8Encoding(False)
End With
Using xw As XmlWriter = XmlWriter.Create(configPath, xws)
xw.WriteStartDocument()
xw.WriteStartElement($"Configs") '创建跟节点
xw.WriteStartElement($"StationInfo") '创建一级子节点
SavePacketInfoNode(xw)
xw.WriteEndElement()
xw.WriteEndElement()
xw.WriteEndDocument()
End Using
Return
End Sub
''' <summary>
''' 发布项目时,校验路径合法性
''' </summary>
Private Sub ReleaseCheckPath()
Directory.CreateDirectory(UtsPath.StationReleaseDirPath)
Directory.CreateDirectory(UtsPath.StationProjectReleaseDirPath(ParentProcessStation.ParentProject.Index))
Directory.CreateDirectory(UtsPath.StationPacketReleaseDirPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID))
Dim designDirPath As String = UtsPath.StationDesignDirPath()
If Directory.Exists(designDirPath) = False Then
Throw New Exception($"未搜索到项目站包文件夹 {designDirPath}")
End If
Directory.CreateDirectory(UtsPath.GetStationPacketResourceDirPath(Name))
Directory.CreateDirectory(UtsPath.GetStationPacketTestPlanDirPath(Name))
End Sub
''' <summary>
''' 发布项目时,将原项目包文件夹名重命名为预发布项目包文件夹名
''' </summary>
''' <param name="revPacketName">预发布项目站包名</param>
Private Sub ReleaseRenamePacketDir(revPacketName As String)
Dim revPacketDirPath As String = UtsPath.GetStationPacketDirPath(revPacketName)
If String.IsNullOrWhiteSpace(Name) Then
If Directory.Exists(revPacketDirPath) = False Then
Directory.CreateDirectory(revPacketDirPath)
Directory.CreateDirectory(UtsPath.GetStationPacketResourceDirPath(revPacketName))
Directory.CreateDirectory(UtsPath.GetStationPacketTestPlanDirPath(revPacketName))
End If
Else
Dim curPacketDirPath As String = UtsPath.StationPacketDirPath
Directory.Move(curPacketDirPath, revPacketDirPath)
End If
End Sub
''' <summary>
''' 发布项目时,将缓存信息保存到本地文件中
''' </summary>
''' <param name="revPacketName">预发布项目站包名</param>
Private Sub ReleaseSaveFile(revPacketName As String)
Dim revPacketInfoPath As String = $"{UtsPath.GetStationPacketInfoPath(revPacketName)}"
SavePacketInfoFile(revPacketInfoPath) '生成项目站包信息文件
Dim revStationPlanPath As String = $"{UtsPath.GetStationPacketTestPlanDirPath(revPacketName)}\Main.xml"
StationPlan.SaveFile(revStationPlanPath)
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Saved
End Sub
''' <summary>
''' 发布项目时,压缩项目文件夹至发布路径
''' </summary>
''' <param name="revPacketName">预发布项目站包名</param>
''' <param name="revFileName">预发布项目站包文件名</param>
Private Sub ReleaseTarFile(revPacketName As String, revFileName As String)
Dim tarFileList As New List(Of String)
Dim revDirPath As String = UtsPath.StationPacketDirPath
Compress.Compress.FillFileList(tarFileList, revDirPath, revPacketName) '获取压缩文件列表
Dim revTarFilePath As String = $"{UtsPath.StationDesignDirPath}\{revFileName}"
Compress.Compress.TarFiles(tarFileList, revTarFilePath, UtsPath.StationDesignDirPath) '压缩到临时文件夹
Dim revFilePath As String = $"{UtsPath.StationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, revFileName)}"
If File.Exists(revFilePath) Then File.Delete(revFilePath)
File.Move(revTarFilePath, revFilePath) '压缩文件成功后,从临时文件夹移动到发布文件夹
Dim ftpPath As String = $"{UtsPath.RemoteStationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, revFileName)}"
UtsFtp.CreateObject.FtpUpload(ftpPath, revFilePath)
End Sub
''' <summary>
''' 发布项目成功后,更新数据库数据
''' </summary>
''' <param name="revFileName"></param>
Private Sub ReleaseUpdateDatabase(revFileName As String)
'获取站包Md5值
Dim revFilePath As String = $"{UtsPath.StationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, revFileName)}"
Dim md5 As String = UTS_Core.Security.Md5.GetFileMd5(revFilePath)
ReleaseUpdatePacketLogTable(revFileName, md5) '更新发布历史
ReleaseUpdateStationTable(revFileName, md5) '更新站位表
PacketMD5 = md5
End Sub
''' <summary>
''' 发布站包时,更新站位表信息
''' </summary>
''' <param name="revFileName"></param>
''' <param name="md5"></param>
Private Sub ReleaseUpdateStationTable(revFileName As String, md5 As String)
Dim saved As Boolean = False
'更新最新包名,编辑密码与发布密码
Dim tableName As String = DbTableModel.Customer.StationListTable.TableName
Dim colNames As New Dictionary(Of String, String)
colNames.Add(DbTableModel.Customer.StationListTable.ColNames.PacketName.ToString(), revFileName)
colNames.Add(DbTableModel.Customer.StationListTable.ColNames.PacketMd5.ToString(), md5)
colNames.Add(DbTableModel.Customer.StationListTable.ColNames.EditPwd.ToString(), EditPwd)
colNames.Add(DbTableModel.Customer.StationListTable.ColNames.ReleasePwd.ToString(), ReleasePwd)
Dim condition As String = $"{DbTableModel.Customer.StationListTable.ColNames.ID} = {ParentProcessStation.StationID}"
'保存至云端
Dim remoteCmd As String
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
remoteCmd = db.CmdHelper.DbUpdate(UtsDb.RemotePrivateDb, tableName, colNames, condition)
Try
db.Open()
db.ExecuteNonQuery(remoteCmd)
db.Close()
saved = True
Catch ex As Exception
Console.WriteLine($"Release Packet To Update Station Table Fail,{ex.Message}")
saved = False
End Try
End Using
'保存至本地库
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString) '存至本地
db.Open()
Dim localCmd As String = db.CmdHelper.Update(tableName, colNames, condition)
db.ExecuteNonQuery(localCmd)
'更新缓存日志表
If saved = False Then
DbConnect.DbConnector.SaveCmdStringToCacheTable(db, remoteCmd)
End If
db.Close()
End Using
End Sub
''' <summary>
''' 发布站包时,更新站包发布记录表信息
''' </summary>
''' <param name="revFileName"></param>
''' <param name="md5"></param>
Private Sub ReleaseUpdatePacketLogTable(revFileName As String, md5 As String)
Dim saved As Boolean = False
Dim tableName As String = DbTableModel.Customer.StationPacketReleaseLogTable.TableName
Dim colNames As New Dictionary(Of String, String)
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.ProjectID.ToString(), ParentProcessStation.ParentProject.Index.ToString)
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.StationID.ToString(), ParentProcessStation.StationID.ToString)
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.CreateTime.ToString(), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.UpdateTime.ToString(), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.PacketName.ToString(), revFileName)
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.PacketMd5.ToString(), md5)
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.Description.ToString(), CurrentImprint.ToString())
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.Remark.ToString(), "")
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.IsValid.ToString(), "1")
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.UserID.ToString(), ParentProcessStation.ParentProject.UserId.ToString())
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.UserName.ToString(), ParentProcessStation.ParentProject.UserName.ToString())
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.PublicIP.ToString(), "") 'todo:填充信息
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.ComputerName.ToString(), "")
colNames.Add(DbTableModel.Customer.StationPacketReleaseLogTable.ColNames.SID.ToString(), "")
'保存至云端
Dim remoteCmd As String
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
remoteCmd = db.CmdHelper.DbInsert(UtsDb.RemotePrivateDb, tableName, colNames)
Try
db.Open()
db.ExecuteNonQuery(remoteCmd)
db.Close()
saved = True
Catch ex As Exception
Console.WriteLine($"Release Packet To Update Packet Log Table Fail,{ex.Message}")
saved = False
End Try
End Using
'保存至本地库
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString) '存至本地
db.Open()
Dim localCmd As String = db.CmdHelper.Insert(tableName, colNames)
db.ExecuteNonQuery(localCmd)
'更新缓存日志表
If saved = False Then
DbConnect.DbConnector.SaveCmdStringToCacheTable(db, remoteCmd)
End If
db.Close()
End Using
End Sub
''' <summary>
''' 发布项目成功后,更新项目包信息
''' </summary>
Private Sub ReleaseUpdatePacketInfo()
HistoryImprints.Insert(0, CurrentImprint)
CurrentImprint = New StationPacketImprint()
End Sub
Private Function NewPacketName() As String
Return $"TP_{ParentProcessStation.ParentProject.Index}_{ParentProcessStation.StationID}_REV_{StationVersion.ToString.PadLeft(2, "0"c)}_{ModifiedTime:yyyyMMddHHmmss}"
End Function
Private Function NewPacketFileName() As String
Return $"{NewPacketName()}.uts"
End Function
''' <summary>
''' 发布项目站包
''' </summary>
Public Sub ReleasePacket()
ReleaseCheckPath() '新建文件夹
Dim revPacketName As String = NewPacketName()
Dim revFileName As String = $"{revPacketName}.uts"
CurrentImprint.Creator = ParentProcessStation.UserId.ToString()
CurrentImprint.FileName = revFileName
ReleaseRenamePacketDir(revPacketName)
FileName = revFileName '更新包名,以及路径信息
UtsPath.StationPacketDirPath = UtsPath.GetStationPacketDirPath(Name)
UtsPath.StationPacketInfoPath = UtsPath.GetStationPacketInfoPath(Name)
UtsPath.StationPacketResourceDirPath = UtsPath.GetStationPacketResourceDirPath(Name)
UtsPath.StationPacketTestPlanDirPath = UtsPath.GetStationPacketTestPlanDirPath(Name)
ReleaseSaveFile(revPacketName) '保存
ReleaseTarFile(revPacketName, revFileName)
ReleaseUpdateDatabase(revFileName)
ReleaseUpdatePacketInfo()
GC.Collect() '回收资源
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,42 @@
Imports System.Text
Namespace UTSModule.Station
Public Class StationPacketImprint
Sub New()
Imprints = New List(Of String)()
End Sub
Sub New(imprintString As String)
imprintString = imprintString.Replace(Chr(13), Chr(0))
Imprints = imprintString.Split(Chr(10)).ToList()
End Sub
''' <summary>
''' 项目站包文件名
''' </summary>
''' <returns></returns>
Public Property FileName() As String
''' <summary>
''' 项目站包创建者
''' </summary>
''' <returns></returns>
Public Property Creator() As String
''' <summary>
''' 项目站包版本说明
''' </summary>
''' <returns></returns>
Public Property Imprints() As List(Of String)
Public Overrides Function ToString() As String
Dim strReturn As New StringBuilder
For Each imprint As String In Imprints
strReturn.Append($"{imprint}{vbNewLine}")
Next
Return strReturn.ToString()
End Function
End Class
End Namespace

View File

@@ -0,0 +1,13 @@
Public Class StationPacketVo
Public Property ProjectID As Integer
Public Property StationID As Integer
Public Property PacketName As String
Public Property PacketMd5 As String
Public Property Description As String
End Class

View File

@@ -0,0 +1,26 @@

Imports UTS_Core.UTSModule.Station.ProcessStation
Namespace UTSModule.Station
Public MustInherit Class StationPlan
Implements IStationPlan
''' <summary>测试流程所关联的项目站包信息</summary>
Public Property ParentPacket() As StationPacket
Public ReadOnly StationType As StationTypeEnum
Public Sub New(packet As StationPacket)
ParentPacket = packet
StationType = packet.ParentProcessStation.StationType
End Sub
Public MustOverride Sub CreateStationPlan() Implements IStationPlan.CreateStationPlan
Public MustOverride Sub SaveFile(path As String) Implements IStationPlan.SaveFile
Public MustOverride Sub LoadFile(path As String) Implements IStationPlan.LoadFile
End Class
End Namespace

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@

Imports UTS_Core.UTSModule.Station.ProcessStation
Namespace UTSModule.Station
Public Class StationPlanManager
Public Shared Function CreateStationPlan(type As StationTypeEnum, packet As StationPacket) As StationPlan
Select Case type
Case StationTypeEnum.Test
Return New StationTestPlan(packet)
Case StationTypeEnum.Package
Return New StationPackagePlan(packet)
Case Else
Return Nothing
End Select
Console.WriteLine($"站位类型:{type}")
End Function
End Class
End Namespace

View File

@@ -0,0 +1,214 @@
Imports System.Text
Imports System.Xml
Namespace UTSModule.Station
Public Class StationTestPlan
Inherits StationPlan
Sub New(packet As StationPacket)
MyBase.New(packet)
TestPlanLocked = False
ParentPacket = packet
HeadNode = New RowNode()
HeadNode.HeadNode = HeadNode
HeadNode.RowType = RowNode.RowTypeEnum.FixedModule
HeadNode.RowLever = -1
HeadNode.RowIndex = 0
HeadNode.StationPlan = Me
HeadNode.Label = $"StationPlan"
HeadNode.Description = $"StationPlan"
CreateStationPlan()
End Sub
''' <summary>测试流程是否已锁定</summary>
Public Property TestPlanLocked As Boolean
''' <summary>
''' 头节点
''' </summary>
''' <returns></returns>
Friend Property HeadNode As RowNode
''' <summary>
''' 节点树状集合
''' </summary>
''' <returns></returns>
Public ReadOnly Property RowNodes() As RowNodeCollection
Get
Return HeadNode.RowNodes
End Get
End Property
''' <summary>
''' 节点树的所有节点集合
''' </summary>
''' <returns></returns>
Public ReadOnly Property RowList() As List(Of RowNode)
Get
Return HeadNode.RowList
End Get
End Property
''' <summary>
''' 节点总数
''' </summary>
''' <returns></returns>
Public ReadOnly Property RowCount() As Integer
Get
Return HeadNode.AllChildCount
End Get
End Property
''' <summary>
''' '创建固定模块节点
''' </summary>
''' <param name="text"></param>
''' <param name="desc"></param>
''' <returns></returns>
Private Function CreateFixedRowNode(text As String, desc As String) As RowNode
Dim node As New RowNode With {.RowType = RowNode.RowTypeEnum.FixedModule, .Action = True, .Label = text, .Description = desc}
node.AddNode(New RowNode()) '添加一个空的子节点
Return node
End Function
''' <summary>
''' 创建新的测试流程
''' </summary>
Public Overrides Sub CreateStationPlan()
HeadNode.Clear()
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Setup}", $"{FixedModuleEnum.Setup} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Main}", $"{FixedModuleEnum.Main} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Pass}", $"{FixedModuleEnum.Pass} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Fail}", $"{FixedModuleEnum.Fail} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Cleanup}", $"{FixedModuleEnum.Cleanup} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
HeadNode.AddNode(CreateFixedRowNode($"{FixedModuleEnum.Custom}", $"{FixedModuleEnum.Custom} Module"))
HeadNode.AddNode(New RowNode()) '添加一个空的子节点
End Sub
''' <summary>
''' 保存为Xml文件
''' </summary>
''' <param name="path"></param>
Public Overrides Sub SaveFile(path As String)
Dim xws As New XmlWriterSettings
With xws
.Indent = True
.NewLineOnAttributes = False
.Encoding = New UTF8Encoding(False)
End With
Using xw As XmlWriter = XmlWriter.Create(path, xws)
xw.WriteStartDocument()
xw.WriteStartElement($"UtsStationPlan") '创建跟节点
xw.WriteStartElement($"Properties") '创建表属性节点
'测试流程的属性
xw.WriteEndElement()
RowNode.SaveRowNodes(xw, HeadNode.RowNodes)
xw.WriteEndElement()
xw.WriteEndDocument()
End Using
End Sub
''' <summary>
''' 读取测试站属性
''' </summary>
''' <param name="nodeList"></param>
Private Sub LoadProperties(nodeList As XmlNodeList)
End Sub
''' <summary>
''' 从Xml文件加载
''' </summary>
''' <param name="path"></param>
Public Overrides Sub LoadFile(path As String)
Dim xd As New XmlDocument()
xd.Load(path)
Dim xe As XmlElement
Dim nodeList As XmlNodeList = xd.SelectSingleNode($"UtsStationPlan").ChildNodes
For Each node As XmlNode In nodeList
xe = CType(node, XmlElement)
Select Case xe.LocalName
Case "Properties"
LoadProperties(xe.ChildNodes)
Case "RowNodes"
HeadNode.Clear()
RowNode.LoadRowNodes(xe.ChildNodes, HeadNode.RowNodes)
Case Else
Throw New Exception($"LoadXml Unknown LocalName:{xe.LocalName}")
End Select
Next
End Sub
''' <summary>
''' 测试流程固定模块
''' </summary>
Enum FixedModuleEnum
''' <summary>
''' 空模块,无测试时默认值
''' </summary>
None
''' <summary>
''' 主模块,测试起始模块
''' </summary>
Main
''' <summary>
''' 测试通过执行模块
''' </summary>
Pass
''' <summary>
''' 测试失败执行模块
''' </summary>
Fail
''' <summary>
''' 测试卸载执行模块
''' </summary>
Cleanup
''' <summary>
''' 测试设置执行模块
''' </summary>
Setup
''' <summary>
''' 自定义模块
''' </summary>
Custom
End Enum
'czh 2022、10、04 新加字段
''' <summary>
''' 模板文件名
''' </summary>
''' <returns></returns>
Public Property TemplateFile As String
''' <summary>
''' 公司Logo文件
''' </summary>
''' <returns></returns>
Public Property CompanyLogo As String
End Class
End Namespace

View File

@@ -0,0 +1,28 @@

Imports System.Drawing
Imports System.Windows.Forms
Namespace UTSModule.Station
Public Class TreeViewEx
Inherits TreeView
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = &H203 Then
Dim tvhti As TreeViewHitTestInfo = HitTest(New Point(CType(m.LParam, Integer)))
If tvhti IsNot Nothing AndAlso tvhti.Location = TreeViewHitTestLocations.StateImage Then
m.Result = IntPtr.Zero
tvhti.Node.Checked = Not tvhti.Node.Checked
Return
End If
ElseIf m.Msg = &H204 Then
Dim tvhti As TreeViewHitTestInfo = HitTest(New Point(CType(m.LParam, Integer)))
If tvhti IsNot Nothing Then
SelectedNode = tvhti.Node
End If
End If
MyBase.WndProc(m)
End Sub
End Class
End NameSpace