第一次提交至Git

This commit is contained in:
2024-03-11 16:32:52 +08:00
commit 3f6c4d62b9
2865 changed files with 2172317 additions and 0 deletions

View File

@@ -0,0 +1,255 @@
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.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!))
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(534, 430)
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(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!, 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!, 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.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 = "站位描述"
'
'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!, 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!, 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!, 12!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.CancelButton = Me.Cancel_Button
Me.ClientSize = New System.Drawing.Size(794, 470)
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
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,155 @@
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, 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
'添加所有站位描述
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, 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 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
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,895 @@
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.tsBtnInsertRow = New System.Windows.Forms.ToolStripButton()
Me.tsBtnRemoveRow = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator13 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnCopyWholeRow = New System.Windows.Forms.ToolStripButton()
Me.TsBtnPasteWholdRows = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator()
Me.TsBtnClearAll = New System.Windows.Forms.ToolStripButton()
Me.ToolStripSeparator1 = 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.MsiCopyNode = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiCutNode = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiNodePaste = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator()
Me.MsiCopyWholeRow = New System.Windows.Forms.ToolStripMenuItem()
Me.MsiPasteWholeRow = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator12 = New System.Windows.Forms.ToolStripSeparator()
Me.MsiGridRowBlockInsert = New System.Windows.Forms.ToolStripMenuItem()
Me.tsBtn_InsertChildNode = 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.TsmiDebugStep = New System.Windows.Forms.ToolStripMenuItem()
Me.TsmiDebugContinue = 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.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.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TsBtnOpen, Me.TsBtnSave, Me.ToolStripSeparator4, Me.TsBtnLoad, Me.TsBtnSaveAs, Me.ToolStripSeparator3, Me.tsBtnInsertRow, Me.tsBtnRemoveRow, Me.ToolStripSeparator13, Me.TsBtnCopyWholeRow, Me.TsBtnPasteWholdRows, Me.ToolStripSeparator14, Me.TsBtnClearAll, Me.ToolStripSeparator1, 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.Size = New System.Drawing.Size(977, 40)
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(35, 37)
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(35, 37)
Me.TsBtnSave.Text = "保存"
Me.TsBtnSave.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator4
'
Me.ToolStripSeparator4.Name = "ToolStripSeparator4"
Me.ToolStripSeparator4.Size = New System.Drawing.Size(6, 40)
'
'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(35, 37)
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(35, 37)
Me.TsBtnSaveAs.Text = "导出"
Me.TsBtnSaveAs.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator3
'
Me.ToolStripSeparator3.Name = "ToolStripSeparator3"
Me.ToolStripSeparator3.Size = New System.Drawing.Size(6, 40)
'
'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(48, 37)
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(48, 37)
Me.tsBtnRemoveRow.Text = "移除行"
Me.tsBtnRemoveRow.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator13
'
Me.ToolStripSeparator13.Name = "ToolStripSeparator13"
Me.ToolStripSeparator13.Size = New System.Drawing.Size(6, 40)
'
'TsBtnCopyWholeRow
'
Me.TsBtnCopyWholeRow.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.TsBtnCopyWholeRow.Image = CType(resources.GetObject("TsBtnCopyWholeRow.Image"),System.Drawing.Image)
Me.TsBtnCopyWholeRow.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnCopyWholeRow.Name = "TsBtnCopyWholeRow"
Me.TsBtnCopyWholeRow.Size = New System.Drawing.Size(59, 37)
Me.TsBtnCopyWholeRow.Text = "整行复制"
Me.TsBtnCopyWholeRow.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'TsBtnPasteWholdRows
'
Me.TsBtnPasteWholdRows.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
Me.TsBtnPasteWholdRows.Image = CType(resources.GetObject("TsBtnPasteWholdRows.Image"),System.Drawing.Image)
Me.TsBtnPasteWholdRows.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnPasteWholdRows.Name = "TsBtnPasteWholdRows"
Me.TsBtnPasteWholdRows.Size = New System.Drawing.Size(59, 37)
Me.TsBtnPasteWholdRows.Text = "插入粘贴"
Me.TsBtnPasteWholdRows.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
Me.TsBtnPasteWholdRows.ToolTipText = "整行插入复制"
'
'ToolStripSeparator14
'
Me.ToolStripSeparator14.Name = "ToolStripSeparator14"
Me.ToolStripSeparator14.Size = New System.Drawing.Size(6, 40)
'
'TsBtnClearAll
'
Me.TsBtnClearAll.Enabled = false
Me.TsBtnClearAll.Image = CType(resources.GetObject("TsBtnClearAll.Image"),System.Drawing.Image)
Me.TsBtnClearAll.ImageTransparentColor = System.Drawing.Color.Magenta
Me.TsBtnClearAll.Name = "TsBtnClearAll"
Me.TsBtnClearAll.Size = New System.Drawing.Size(60, 37)
Me.TsBtnClearAll.Text = "清空节点"
Me.TsBtnClearAll.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 40)
'
'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(35, 37)
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(35, 37)
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(35, 37)
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(35, 37)
Me.TsBtnMoveRight.Text = "降级"
Me.TsBtnMoveRight.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator2
'
Me.ToolStripSeparator2.Name = "ToolStripSeparator2"
Me.ToolStripSeparator2.Size = New System.Drawing.Size(6, 40)
'
'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(60, 37)
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(60, 37)
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(60, 37)
Me.TsBtnFailMode.Text = "单步退出"
Me.TsBtnFailMode.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'ToolStripSeparator10
'
Me.ToolStripSeparator10.Name = "ToolStripSeparator10"
Me.ToolStripSeparator10.Size = New System.Drawing.Size(6, 40)
'
'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(48, 37)
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(54, 37)
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(55, 37)
Me.TsBtn_ExpandNode.Text = "Expand"
Me.TsBtn_ExpandNode.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
'
'StuMain
'
Me.StuMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TssLblTestStatus, Me.TssLblTestTime, Me.TssBarTestProgress})
Me.StuMain.Location = New System.Drawing.Point(0, 558)
Me.StuMain.Name = "StuMain"
Me.StuMain.Size = New System.Drawing.Size(977, 22)
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, 17)
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, 17)
Me.TssLblTestTime.Text = "TimeExpend:00:00:00:000"
'
'TssBarTestProgress
'
Me.TssBarTestProgress.AutoSize = false
Me.TssBarTestProgress.Name = "TssBarTestProgress"
Me.TssBarTestProgress.Size = New System.Drawing.Size(200, 16)
'
'SplStationPlan
'
Me.SplStationPlan.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplStationPlan.Location = New System.Drawing.Point(0, 40)
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(977, 518)
Me.SplStationPlan.SplitterDistance = 348
Me.SplStationPlan.TabIndex = 10
'
'SplPlanDesign
'
Me.SplPlanDesign.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplPlanDesign.Location = New System.Drawing.Point(0, 0)
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(977, 348)
Me.SplPlanDesign.SplitterDistance = 671
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.Name = "GrpStationPlan"
Me.GrpStationPlan.Size = New System.Drawing.Size(671, 348)
Me.GrpStationPlan.TabIndex = 45
Me.GrpStationPlan.TabStop = false
Me.GrpStationPlan.Text = "执行流程"
'
'GrdStationPlan
'
Me.GrdStationPlan.BorderStyle = FlexCell.BorderStyleEnum.None
Me.GrdStationPlan.CheckedImage = Nothing
Me.GrdStationPlan.ContextMenuStrip = Me.CmsPlanGrid
Me.GrdStationPlan.DefaultFont = New System.Drawing.Font("宋体", 9!)
Me.GrdStationPlan.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrdStationPlan.Font = New System.Drawing.Font("宋体", 9!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
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(3, 17)
Me.GrdStationPlan.Name = "GrdStationPlan"
Me.GrdStationPlan.Size = New System.Drawing.Size(665, 328)
Me.GrdStationPlan.TabIndex = 0
Me.GrdStationPlan.UncheckedImage = Nothing
'
'CmsPlanGrid
'
Me.CmsPlanGrid.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MsiCopyNode, Me.MsiCutNode, Me.MsiNodePaste, Me.ToolStripSeparator5, Me.MsiCopyWholeRow, Me.MsiPasteWholeRow, Me.ToolStripSeparator12, Me.MsiGridRowBlockInsert, Me.tsBtn_InsertChildNode, 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.TsmiDebugStep, Me.TsmiDebugContinue, Me.ToolStripSeparator8, Me.TsmiDebugSetup, Me.TsmiDebugMain, Me.TsmiDebugPass, Me.TsmiDebugFail, Me.TsmiDebugCleanup, Me.ToolStripSeparator9, Me.TsmiDebugNode, Me.TsmiDebugNodeBegin})
Me.CmsPlanGrid.Name = "CmsMain"
Me.CmsPlanGrid.Size = New System.Drawing.Size(193, 624)
'
'MsiCopyNode
'
Me.MsiCopyNode.Image = CType(resources.GetObject("MsiCopyNode.Image"),System.Drawing.Image)
Me.MsiCopyNode.Name = "MsiCopyNode"
Me.MsiCopyNode.ShortcutKeyDisplayString = "Ctr+C"
Me.MsiCopyNode.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C),System.Windows.Forms.Keys)
Me.MsiCopyNode.Size = New System.Drawing.Size(192, 22)
Me.MsiCopyNode.Text = "复制"
'
'MsiCutNode
'
Me.MsiCutNode.Image = CType(resources.GetObject("MsiCutNode.Image"),System.Drawing.Image)
Me.MsiCutNode.Name = "MsiCutNode"
Me.MsiCutNode.ShortcutKeyDisplayString = "Ctr+X"
Me.MsiCutNode.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.X),System.Windows.Forms.Keys)
Me.MsiCutNode.Size = New System.Drawing.Size(192, 22)
Me.MsiCutNode.Text = "剪切"
'
'MsiNodePaste
'
Me.MsiNodePaste.Image = CType(resources.GetObject("MsiNodePaste.Image"),System.Drawing.Image)
Me.MsiNodePaste.Name = "MsiNodePaste"
Me.MsiNodePaste.ShortcutKeyDisplayString = "Ctr+V"
Me.MsiNodePaste.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.V),System.Windows.Forms.Keys)
Me.MsiNodePaste.Size = New System.Drawing.Size(192, 22)
Me.MsiNodePaste.Text = "粘贴"
'
'ToolStripSeparator5
'
Me.ToolStripSeparator5.Name = "ToolStripSeparator5"
Me.ToolStripSeparator5.Size = New System.Drawing.Size(189, 6)
'
'MsiCopyWholeRow
'
Me.MsiCopyWholeRow.Image = CType(resources.GetObject("MsiCopyWholeRow.Image"),System.Drawing.Image)
Me.MsiCopyWholeRow.Name = "MsiCopyWholeRow"
Me.MsiCopyWholeRow.Size = New System.Drawing.Size(192, 22)
Me.MsiCopyWholeRow.Text = "整行复制"
'
'MsiPasteWholeRow
'
Me.MsiPasteWholeRow.Image = CType(resources.GetObject("MsiPasteWholeRow.Image"),System.Drawing.Image)
Me.MsiPasteWholeRow.Name = "MsiPasteWholeRow"
Me.MsiPasteWholeRow.Size = New System.Drawing.Size(192, 22)
Me.MsiPasteWholeRow.Text = "整行插入粘贴"
'
'ToolStripSeparator12
'
Me.ToolStripSeparator12.Name = "ToolStripSeparator12"
Me.ToolStripSeparator12.Size = New System.Drawing.Size(189, 6)
'
'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(192, 22)
Me.MsiGridRowBlockInsert.Text = "插入"
'
'tsBtn_InsertChildNode
'
Me.tsBtn_InsertChildNode.Enabled = false
Me.tsBtn_InsertChildNode.Name = "tsBtn_InsertChildNode"
Me.tsBtn_InsertChildNode.Size = New System.Drawing.Size(192, 22)
Me.tsBtn_InsertChildNode.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(192, 22)
Me.MsiGridRowBlockDelete.Text = "删除"
'
'ToolStripSeparator7
'
Me.ToolStripSeparator7.Name = "ToolStripSeparator7"
Me.ToolStripSeparator7.Size = New System.Drawing.Size(189, 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(192, 22)
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(192, 22)
Me.tsBtn_UncheckAction.Text = "取消勾选测试"
'
'ToolStripSeparator15
'
Me.ToolStripSeparator15.Name = "ToolStripSeparator15"
Me.ToolStripSeparator15.Size = New System.Drawing.Size(189, 6)
'
'MsiUndo
'
Me.MsiUndo.Enabled = false
Me.MsiUndo.Name = "MsiUndo"
Me.MsiUndo.Size = New System.Drawing.Size(192, 22)
Me.MsiUndo.Text = "撤销"
'
'MsiRedo
'
Me.MsiRedo.Enabled = false
Me.MsiRedo.Name = "MsiRedo"
Me.MsiRedo.Size = New System.Drawing.Size(192, 22)
Me.MsiRedo.Text = "重做"
'
'ToolStripSeparator6
'
Me.ToolStripSeparator6.Name = "ToolStripSeparator6"
Me.ToolStripSeparator6.Size = New System.Drawing.Size(189, 6)
'
'MsiSaveNodeFile
'
Me.MsiSaveNodeFile.Name = "MsiSaveNodeFile"
Me.MsiSaveNodeFile.Size = New System.Drawing.Size(192, 22)
Me.MsiSaveNodeFile.Text = "另存为节点文件"
'
'MsiLoadNodeFile
'
Me.MsiLoadNodeFile.Name = "MsiLoadNodeFile"
Me.MsiLoadNodeFile.Size = New System.Drawing.Size(192, 22)
Me.MsiLoadNodeFile.Text = "加载节点文件"
'
'ToolStripSeparator11
'
Me.ToolStripSeparator11.Name = "ToolStripSeparator11"
Me.ToolStripSeparator11.Size = New System.Drawing.Size(189, 6)
'
'TsmiDebugStart
'
Me.TsmiDebugStart.Image = CType(resources.GetObject("TsmiDebugStart.Image"),System.Drawing.Image)
Me.TsmiDebugStart.Name = "TsmiDebugStart"
Me.TsmiDebugStart.ShortcutKeys = System.Windows.Forms.Keys.F1
Me.TsmiDebugStart.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugStart.Text = "开始执行"
'
'TsmiDebugEnd
'
Me.TsmiDebugEnd.Image = CType(resources.GetObject("TsmiDebugEnd.Image"),System.Drawing.Image)
Me.TsmiDebugEnd.Name = "TsmiDebugEnd"
Me.TsmiDebugEnd.ShortcutKeys = System.Windows.Forms.Keys.F2
Me.TsmiDebugEnd.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugEnd.Text = "退出执行"
'
'TsmiDebugStep
'
Me.TsmiDebugStep.Image = CType(resources.GetObject("TsmiDebugStep.Image"),System.Drawing.Image)
Me.TsmiDebugStep.Name = "TsmiDebugStep"
Me.TsmiDebugStep.ShortcutKeys = System.Windows.Forms.Keys.F3
Me.TsmiDebugStep.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugStep.Text = "单步执行"
'
'TsmiDebugContinue
'
Me.TsmiDebugContinue.Image = CType(resources.GetObject("TsmiDebugContinue.Image"),System.Drawing.Image)
Me.TsmiDebugContinue.Name = "TsmiDebugContinue"
Me.TsmiDebugContinue.ShortcutKeys = System.Windows.Forms.Keys.F4
Me.TsmiDebugContinue.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugContinue.Text = "继续执行"
'
'ToolStripSeparator8
'
Me.ToolStripSeparator8.Name = "ToolStripSeparator8"
Me.ToolStripSeparator8.Size = New System.Drawing.Size(189, 6)
'
'TsmiDebugSetup
'
Me.TsmiDebugSetup.Name = "TsmiDebugSetup"
Me.TsmiDebugSetup.ShortcutKeys = System.Windows.Forms.Keys.F5
Me.TsmiDebugSetup.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugSetup.Text = "Setup模块执行"
'
'TsmiDebugMain
'
Me.TsmiDebugMain.Name = "TsmiDebugMain"
Me.TsmiDebugMain.ShortcutKeys = System.Windows.Forms.Keys.F6
Me.TsmiDebugMain.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugMain.Text = "Main模块执行"
'
'TsmiDebugPass
'
Me.TsmiDebugPass.Name = "TsmiDebugPass"
Me.TsmiDebugPass.ShortcutKeys = System.Windows.Forms.Keys.F7
Me.TsmiDebugPass.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugPass.Text = "Pass模块执行"
'
'TsmiDebugFail
'
Me.TsmiDebugFail.Name = "TsmiDebugFail"
Me.TsmiDebugFail.ShortcutKeys = System.Windows.Forms.Keys.F8
Me.TsmiDebugFail.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugFail.Text = "Fail模块执行"
'
'TsmiDebugCleanup
'
Me.TsmiDebugCleanup.Name = "TsmiDebugCleanup"
Me.TsmiDebugCleanup.ShortcutKeys = System.Windows.Forms.Keys.F9
Me.TsmiDebugCleanup.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugCleanup.Text = "Cleanup模块执行"
'
'ToolStripSeparator9
'
Me.ToolStripSeparator9.Name = "ToolStripSeparator9"
Me.ToolStripSeparator9.Size = New System.Drawing.Size(189, 6)
'
'TsmiDebugNode
'
Me.TsmiDebugNode.Name = "TsmiDebugNode"
Me.TsmiDebugNode.ShortcutKeys = System.Windows.Forms.Keys.F10
Me.TsmiDebugNode.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugNode.Text = "节点测试"
'
'TsmiDebugNodeBegin
'
Me.TsmiDebugNodeBegin.Name = "TsmiDebugNodeBegin"
Me.TsmiDebugNodeBegin.ShortcutKeys = System.Windows.Forms.Keys.F11
Me.TsmiDebugNodeBegin.Size = New System.Drawing.Size(192, 22)
Me.TsmiDebugNodeBegin.Text = "节点开始测试"
'
'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.Name = "GrpSingleRowInfo"
Me.GrpSingleRowInfo.Size = New System.Drawing.Size(302, 348)
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(3, 17)
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(296, 328)
Me.SplitContainer1.SplitterDistance = 246
Me.SplitContainer1.TabIndex = 1
'
'GrdRowNode
'
Me.GrdRowNode.BorderStyle = FlexCell.BorderStyleEnum.None
Me.GrdRowNode.CheckedImage = Nothing
Me.GrdRowNode.DefaultFont = New System.Drawing.Font("宋体", 9!)
Me.GrdRowNode.Dock = System.Windows.Forms.DockStyle.Fill
Me.GrdRowNode.Font = New System.Drawing.Font("宋体", 9!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134,Byte))
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.Name = "GrdRowNode"
Me.GrdRowNode.Size = New System.Drawing.Size(296, 246)
Me.GrdRowNode.TabIndex = 0
Me.GrdRowNode.UncheckedImage = Nothing
'
'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.Name = "RtxColTip"
Me.RtxColTip.Size = New System.Drawing.Size(296, 78)
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.Name = "GrpOutputInfo"
Me.GrpOutputInfo.Size = New System.Drawing.Size(977, 166)
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(3, 17)
Me.TabControl1.Name = "TabControl1"
Me.TabControl1.SelectedIndex = 0
Me.TabControl1.Size = New System.Drawing.Size(971, 146)
Me.TabControl1.TabIndex = 1
'
'TpOutputInfo
'
Me.TpOutputInfo.Controls.Add(Me.RtxOutputInfo)
Me.TpOutputInfo.Location = New System.Drawing.Point(4, 22)
Me.TpOutputInfo.Name = "TpOutputInfo"
Me.TpOutputInfo.Padding = New System.Windows.Forms.Padding(3)
Me.TpOutputInfo.Size = New System.Drawing.Size(963, 120)
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(3, 3)
Me.RtxOutputInfo.Name = "RtxOutputInfo"
Me.RtxOutputInfo.Size = New System.Drawing.Size(957, 114)
Me.RtxOutputInfo.TabIndex = 0
Me.RtxOutputInfo.Text = ""
'
'FrmStationPlan
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 12!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(977, 580)
Me.Controls.Add(Me.SplStationPlan)
Me.Controls.Add(Me.StuMain)
Me.Controls.Add(Me.ToolStrip1)
Me.KeyPreview = true
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 TsBtnCopyWholeRow As ToolStripButton
Friend WithEvents TsBtnPasteWholdRows As ToolStripButton
Friend WithEvents TsBtnMoveUp As ToolStripButton
Friend WithEvents GrdRowNode As FlexCell.Grid
Friend WithEvents CmsPlanGrid As ContextMenuStrip
Friend WithEvents MsiCopyNode As ToolStripMenuItem
Friend WithEvents MsiCutNode As ToolStripMenuItem
Friend WithEvents MsiNodePaste As ToolStripMenuItem
Friend WithEvents MsiSaveNodeFile As ToolStripMenuItem
Friend WithEvents ToolStripSeparator1 As ToolStripSeparator
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 ToolStripSeparator5 As ToolStripSeparator
Friend WithEvents MsiLoadNodeFile As ToolStripMenuItem
Friend WithEvents ToolStripSeparator6 As ToolStripSeparator
Friend WithEvents MsiUndo As ToolStripMenuItem
Friend WithEvents MsiRedo As ToolStripMenuItem
Friend WithEvents TsBtnClearAll As ToolStripButton
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 MsiCopyWholeRow As ToolStripMenuItem
Friend WithEvents MsiPasteWholeRow As ToolStripMenuItem
Friend WithEvents ToolStripSeparator12 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 tsBtn_InsertChildNode As ToolStripMenuItem
End Class
End Namespace

View File

@@ -0,0 +1,512 @@
<?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
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGrSURBVGhD7ZjLSsRAFEQDirrXnfpvolsfPyf6Bz4QUX/F
11arkEDbtKncpLrHgRw4INypriTTE7C7hYWFyezAC3gP3+GXWa55B8/hNrRyAF9gqbiGz5CdFvjkW158
L2/C8k1w25QKWngGZ8M9ny56CfehG26ZK5h23cLZvMF0UdveLHAI065XOJt0QVobe599QcHkvk148vPn
LyYvOJFJfXvwEZYCkxacQbiPT76/+FIgXaw0dxPu47YZCqSz0txNuO8BDgXSWWnuJtz3CYcC6aw0dxPu
UwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPuUwE1dxPu
UwE1dxPuUwE1dxPuU4F//099GqA5+bEKjz5q3AQv/hqmXaOOVdIAzeFZZf6ZVp5CSR7K4fEej/nyz9X2
CW5BSR4swS3T8iZ48aNP//LwX/Cb4Fkl92X+w3bINW8gt82oJ9+TL7R2rP0NtHzPV6HVe74aq3zPH8PZ
rOo9zwO1DWih9XueF78LrdR+z39A/t6OIA+UFxYWwnTdN1Eve2U88bP5AAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnSave.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHqSURBVGhD7Zm9Tt1AEEYvNDxCArwSXZDSpAwiFQ+HEA2Q
dPmpeAl4AaALEnxTXDSate/xeHcvkeIjnerzN97F9rWEVwsLC6PsyFP5Rz7Jl07ey0+yKQfyuxw6YQ//
ys+yCbvyhxw6UU+f5RdZzTc5dIJt2ORK2D3vh17ID3KNz8wabLG2aD+vehOP0g/8KD0+M2tpvgk/yIxQ
PodjGTcx+5nwQ8wI5XNptgk/wIxQXkOTTfiyGaG8lupN+KIZiflc7Q18JIcYe7AnvbF9yYzEvMY7OcbQ
JjYd/4YvmBEbEo+ZKy3INhE7CBXsstvlj8dl3XQLeWIPSRc6k15PutCZ9HrShc6k15MudCa9nnShM+n1
pAudSa+HCq1+RqNjP6vxOIQKLV9k0aEXWzwGoULMWxuhvIAKMW9thPICKlCeheZRXkAFyrPQPMoLqEB5
FppHeQEVKM9C8ygvoALlWWge5QVUoDwLzaO8gAqUZ6F5lBdQgfIsNI/yAipQnoXmUV5ABcqz0DzKCx6k
L/j/TBs+M2vZNM8+tPjM1ob8lr50LvflGp+ZtYzNs3NeSp/9ksiZ9KV/ya8S2ZO3cmjAe3ol7cPjJA7l
jRwa9B5eS38bT8J2eyJ/yvjVZhvaA2vntttm8l9+YeH/YrV6BfNWMy9RUhK1AAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnLoad.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVGhD1ZnLSgRBFEMbFN3rUv03H1v160T/wDfot+jo
VhNk4FqUk77dqRrnQGAgnZt+TS26hhnsQpfQPbSAvsziTM6+gNhl5QB6hWrFLfQCsdMC70bPk1+KF2F5
EnxtagU9dA7N5gGKQ68g2+MNHELXUOy6g2bzDsWhLGrFERS73qDZxIFUa+x99oGCyX1b0OnPz19MHjiR
SX370DNUC0waOIN03za0PPlaIA6r+W7SfWfQqkD0ar6bdN8TtCoQvZrvJt33Ca0KRK/mu0n3qYDy3aT7
VED5btJ9KqB8N+k+FVC+m3SfCijfTbpPBZTvJt2nAsp3k+5TAeW7SfepgPLdpPtUQPlu0n0qoHw36T4V
UL6bdJ8KKN9Nuk8FlO8m3acCyneT7lMB5btJ96mA8t2k+1RA+W7SfSqgfDfpPhVQvpt0nwr8+4+7MUCV
lJ/X+Qm8xUXw5G+g2DXq83oMUCXcsyqP6aVRGxxlqITbPNzuKY9rLXbuQJIyWIM7Mj0vIrXJV4b/gneD
j5TvZfnHdogzbyF2jLrzS8pBG8fGX0DPdb4Jvdb5ZqxznT+BZrOudf4R4saihd7rPE9+D7LSep3/gPh/
O4a4sTiBYfgGl13a4+npcwkAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnSaveAs.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADQSURBVEhL5ZYxDgFBGEbnCE4gjuAcCnEER3AER9BpVWqV
QqcTlSOIUkVFx/fWSMYsyfx/FCu+5CX7ZWfmTbKT3Q1J+mLnYCmKMhQ3sRKLQg5iL4ryFHSqVpaZ+H3B
UQwy2qIWr4A5OaxVi0fATrsJPfFVQR7m/pGA42eBmARc8yrgpMxj38aewhjuEbNg/LgMLUEfVe01jGmu
4CpO4hz7JfYUxrgFGzER09jXsacwxi34/WdggZgE7MwCMQk8aYbA8tHPYe5Hgfe35R2spYRwB61XwcSY
NxMjAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsBtnInsertRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADTSURBVDhPvVKrDoNAEOSX+gt1tfxBg6psUNjmFJKcQjY5
gyQ5gyXBVDbBVFYgKitWVEzZ43qpoDwC6SSjZmc2uxlvMXRRQ+UVVNZRnjVEomHlceAL9OooEjUzwBrp
CTQtw0hOD/hsZaPhA/APYnrAZhegj1ZeDzLVYPJ/RCwRHIWhlX/CDbCZz6vvQHUD9IWgChoMYNGRNxvj
FVAlQWSEIBkOYLiB8CSNUeaEMCX4MWEbNaMBDnxv77N1WUMXbQttG7smzi2SxWpNDBY3cf+3JnreG12r
GpgvtOAmAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsBtnRemoveRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADdSURBVDhPY6AK2Hbwwv+1O0/9X7zh0P+Zy3b9nzBv8//e
2ev/Q6UJg3W7Tv8HgS/f//1//PbP/0uPfv039Uwm3oD5a/ajaD5+6+d/p7B84g2YMG8j2EYQBmmcsXA1
HE+es/x/19SF/5t6ZqEYyMLEgtsCkMbDN/7833bu5/+lB7/9n7T5E9hwkCZ0DNWCCkA2rjvx43/7sgf/
S2fe/Z/ScwcjTFA0o8dCZesUsFdg3oJhqHJMgC0WIrKbcGtAB9hiAa+N6ABkALpzSTKAJgmJJAOQExIy
hkoPasDAAACBjwD6rwhXUgAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnCopyWholeRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHJSURBVDhPvZHdK4NhGMb3pzAt4dgfIPmMosgBB8pHjnbA
kSMhijSa2pgJ89U23jEJExpmvhq2+ZoMxVZD78vYxjsue5+NMTVK+dV18jxdv7v7eXh/Rrt8BC7UkpVE
OWvCoHYdoeuf4cqRKCaNqGwY/p1Es2gN1YL4X14hGZmHzmBFcXX7zxLl3A4p6mwAtQuY7Qw6FTOgVhmo
l2mo9DT652iIJ25JQrUwg1ojEXA8PfvB3PvgcLmJIJKm0WskVxi+SuRqPbnsMzxDNMugnrpCzYAdIws3
5Pwz1TIXtBsMkoomwxJpYF9u70cPi2vag3PHHQ7sN5BPO0mplfKTmE/uUCpyIrFoCgkFY4jPGwpKuH29
PvZjslBuQ5V0Hx2qcyJ4h3lgcXLphcFyDxm1DUFub1jAuH04PHNh59gBo/kCS1unaOgLfm/dqBtCqRMl
bTbkN+6RyKhNCLK7woLkrLJvqRHvEQEbWM9Fs7DYH7FoYqBZuUX3mBFxGeKvjxlJedMGEXye/J4u9Rr4
aaLogsJaPTxPL5BPmNCj2YZsfJNM5spS5SpiU1uiCzKEusBrq0ji8xQQ5PQgLlMCfnp7oNyKmJTm6IJ/
gsd7A8Wc0VfbPf1MAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnPasteWholdRows.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACMSURBVDhPtZDRDYAgDET7wazu5AIOY/x2BX/dAHO2KNQW
MMZLXiK1d5zSLwohxBwZ+9IGEBc6sd6JjYXBNO8XOOfG9Kx3xF4GJIOF3hP7M6BGM6CXrgCi0aUzYIiW
MOcgUa2BJcy3bb1DWg34RkafGwF2A+hlg/vnJThAGkAI0WDRU9HAV/6tHp9FdAB/QLi4qrG0hAAAAABJ
RU5ErkJggg==
</value>
</data>
<data name="TsBtnClearAll.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFnSURBVHhe7ZpRasMwEER9pByjhdDerldtSz7SHciAKLYi
J9Jau5kHAwF/rOYhKwZ7EUIIIYQQQgixj5Pl6xb89ubQ+Rj4bbne8mM5W7zALMzkfKzFVQKsczjza/GQ
gBmY9X8+1uTGmgBktISt8oirAGy3cguWGSWhVh5rcT8H3izlOVAGC/209OLdUpv1YTkEDwnTlicjJUxf
noyQEKY86SkhXHnSQ0LY8uQZCeHLk0ckpClP9khIV560SEhbntQkXCwouXYtRXlSk7CWVOVJq4SU5Qkk
bG15BLdE2vIAB949AS0PSyGpnfZlICidhNbyTCoJtfL3/gbDS2h5yGl5WApJS3mSTsKe8iSNhEfKk/AS
nilPwkroUZ6Ek9CzPAkjYUR5Mr2EkeXJtBI8ypPpJLz8y9GXfz2+JmB0ebIlwf37gPKexBb0KE8wq7wF
sRb37wMwENYR9+HG0fOFEEIIIYQQIirL8gdhBPBs3RAiLQAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnMoveUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGeSURBVHhe7ZgxSsRAGEZXsbC0E72A5/AcnsITeAoLwcpK
9DBWIoJ4ALG21e/BBpafWZOZZDWT+R48CLO7ZP6XbDMrY4wxxhhj/pxDebmW66Y4k1/yey3XrDXBsfyQ
3fCdn/JULpoT+SLj8J18xncWCU/+WaYG3/RVLu5N6Hvy0UW9CUOffHQRb0Luk49W/SaUPvlolW9C3/Dv
ibW3xFpnVRH6hr+Vj2ENH+R1WNu0ighDht+XDBs/Y21PVhth6PCwLQBUGSFnePgtAFQVIXd46AsAVUQo
GR6GBIBZRygdHoYGgFlGGDM85ASAWUUYOzzkBoBZRJhieCgJAP8a4UA+ydSN8UaywSGUBgDuwb3i7zvZ
I3udnHOZuiHmDA9jAkBfBPY6OdsC5A4PYwPAbxF2EiD1FygZHqYIAKkIO/sLwJG8knfygoVCpgrQwV7Y
E3tjj7Nn6gDV4QDSAYIOIJvBAaQDBB1ANoMDSAcIOoBsBgeQTQe4lzEAa83AwUUMwFozcGqzebzGdRUn
OVPCuR2Hl7izMzxjjDHGGGNSrFY/c13kAfiRZ4MAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnMoveDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGdSURBVHhe7Zg9SsRAGIajWFjaiXsBz+E5PIUn8BQWgpXV
ooexEUQQe8Ha1n1fyAfhY3bnJ8mSybwPPBAGspnvSbaZTgghhBBCiKNzBm96ed0UF/AN/vfymmvNcA9t
eJNrzbCFPgDXmuEF+gBcawYFgArgVADYDAoAFcCpALAZFAAqgFMBYDMoAKwyAE9teHDxDG+5UMjUAbgX
7ol7m+1kied2w2Ms+ghPYC5TBeCzuYfh73CPs5wx8vBy+CCzJMIUAULDm9zr5OwLQHMjjA1waHg6S4DQ
X2BoToQxAWLDz/YXIJfwHYYeTJ/gKYxRGoDDP0B/r/kJN3BWpohQEmARwxtjI+QGWNTwxpgIOQEWObxR
GiE1wKKHN0oipASoYngjN0IsQFXDGzkRDgWocngjNcK+AFUPb6REeHVrlAGqH96IRfgOrH0F1syqhjdi
EVKtcnjjCn7A0GAp8l7+RtWUfglVv3lP7pewijfvSf0SVvXmPbEvYZVv3sMv4Qf64X/hat+85xr+QRue
11xrinN418trIYQQQgghjkbX7QBWxOPySaszcAAAAABJRU5ErkJggg==
</value>
</data>
<data name="TsBtnMoveLeft.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEUSURBVHhe7ZoxSkRBEAU/YrChmXgB77Hn8BSewHMIJoar
hzFRzMz1AKZaD3ayWU1cd+mugoKfDe/Bn4GmFxERERGRf+cU11vz3YoLfMKvrfk+wxYk/CuO8MMbLM+u
8PEeS/NT+HiFZfkt/C2W5RxfcBY83uEJlsTwOAseDY8lMTzOgkfDY0kMj7Pg0fBYEsPjLHg0PJbkEj9w
Fjy+4SM+HMANZqiyt8nSCj9xFvyYzHhtLzPGa5wdeIxm0PrntC+g/S8Qcgm+4+zgWPoSHOQZfMZZAbH0
MziwBLAEsASwBLAEsASwBLAEsASwBLAEsARovSAxaL0iM2i9JDXYVUKLNblBSmi7KDlovSorIiIiIodl
Wb4BwPHkArNQmuIAAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtnMoveRight.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD9SURBVHhe7ZoxisJgFAYjWGy5rZ5gr+E5PMWewFNYWFrq
ZbaUBY+w9bY6DxIQeWU04X8zMJAufAMR+fk7EREREZG3s8RNbzyX4hN/8NYbzyssww6H8YMXLBPhiM8B
SkXYYhYgLBPhgFmAsESEBe4xCxD+4hqbxghgBDACGAGMAEYAI4ARwAhgBDACzCJCnOTEYcYJzxN5xSxA
+Idf+BLi3O7xGGuu/uMHjk4cXmYvnKPfODrlA5T/BILSP4JTU/q/gOMxGx46HpvE8ZgNDx2PTeJ4zIaH
jscmcTxmw0PHY7OUviBR/opM+UtS5a/Jlb8oGZS+KisiIiIi09J1d9Ph4/jaLDotAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnDebugMode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAW1SURBVHhe7ZvHq2VFEIefKCIoLk0rdYwrcwAdxYABcTEq
iogrRUGXBtCN4V/QvXGhoph1YwAjbs26VDeGjQF0zL9PXkNRtzqd2+fyvPN+8MGb09V9uvqe7q6uc2Zj
W9taiS4T34h/GvlaXCrWRjgUOVriK7E2ihxsYW0UOdfCltZ+4mJx1H//KqvVsVa7pKMFfaAvK9XB4kNB
J/8QN4mSWh1rtUPck3tjR1/o00p0kPhY2I7+LW4VOVlbyKnV7kbxl7C2n4vDxKyKnE+UBsHb5tRiFzmf
mHUQSs4ncoPg7XKq2ZWcT8wyCMyvT4W/2bviN3eNQbhZoDPEw8KWQ07ejrq0gWiTtm0596YP9hrQ12Fr
Qs75F8W+gogtGoRP3LXEnyKn3K9LW5Hz3Js+0BdbBkMGoeZ8UjQIOd4SOb0tojqe5HzSLIPA3pq2Oot3
Pqk2CN+KBwRrSU509kGBbdQGeOeTcoOAD5PiBAIM3xjzLXI+yQ8Cj+3z4gKxt2gVttR5QdhHP+d8En2L
1oSLRLeI8FKgkah1AO0UdPxRcTIXltQpgrYYSNouKXoK8aElWg1FtJVbfLaaIufpey1KreoG4Vfn3eJy
0aO9BL/m/eJNwX79yyafbV67T0x5apiuvwrbR5y/RQzRMoOA41eLL4StX4LBuVJQt6bZnU/KBSLniJx2
iA+ErdMDC9rhIifuHT32KRAbrmgQXhaRzhal7ayVH8R5ItKrwtrO6nySj/BYob3o8O/C2gHT5glxrThW
7L8Jf3PtSYFNVC960h4T1o6+zaozhb0hnCaseOz51bzd0+JIURP1nxG+/nfCT4eThH8i09lhFj0i7M2e
E1YsWn7OE/vfJnp1u/ALL2uCXxiJOawNB6hJ6k1dw/nC6hrhbaY4n3Sn8O1dIayIGL1NiWzKvTd1zQJn
w1t+Gb/V8dgvq2eFbZMDjhV96F1sw5R7ZFiCg43VqcKWs3Axn5fVEcIvjCcKKw5QtryFBUVGEcxpjrT+
mEmEZ+1Y7UfpKWHbvkdYHSI4StM3a1diQVWDighlbX22tVG6Tti2XxO9svVhQVWDir4Utj45eytbBl6l
cuIEW8bZoVe2PiyoalDRz8LWP0BY2TLwKpXTli37SfTK1ocFVQ0qolO2/sgBOFDYsh9Fr2x9WFDVoCK/
BR4jrGwZeJXKjxe2bEtOgTeErT9yEbxe2LZfF72y9WFB3iAH4ek7wm+DJDOsHQebUSKgsm1H2yBhci6t
HrGgyKiED4TI5NhyToOTc3FGTCV/sjxBWA0JhEaEwmRyrA2numVEm/6w40PhfcSQUJgDQu8gcBCxukp4
G051U3W38O3tElYXCm9TAucvEZPk3/ORqrbiF3tfWBvm5R2iR7Rzl/BzmrWHMiv/MuQhMZtINtibgU+I
cHj5Xng7TnUtawJz3j/2ECVEWHd8QuR0Mat8Soy0lNe5IkptsZhxsCG2P04QLAH7PFsdq30ulRa9FHlc
WLvZU2JRUvQlEekssVZJ0ch5UtKl11VMh/eErdMDc35LpMWjLzN4LFtfjPCSg/DV1i/BVudTXznlXoyU
vlnq0jLOe5HFvVcQyjIgnCCBv7lGhOezPS2abRD26JejJDSmvB5nXr4iRr0epw3aos3SazgUDcLk1+Oj
PpBgT5/ygQQRHnXtE1j7AYZ+IDH6ExkCGQ4tpW92ONVhg23UBuQGgT4N/UQG0dnRH0mRvc2JbS+q4/GD
kHN+qY+kkmqDEDnPY+sjxsT/6jO5pNwgMN8i51MgshYfSibxedtHwt/MQgejLzO8XU41u+hLFQ85iUPF
LCoNQs555G1zarErDcKszidFg1ByHllbyKnVLhqElTifxPxKWySBRi3ash2FnFrtEPdMgRp9GT7na2Jv
JVhqibJaHWu1S+Le9GHyPr8qecdaWRtFzrWwNtrj/+MkEVvPICyVut7Wtlq1sfEvE45NIRdAVjQAAAAA
SUVORK5CYII=
</value>
</data>
<data name="TsBtnDebugStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVGhD7ZfBCcJAFERzVOzCk81Ygr3Yk0dr8eTBDhRP
+j+ysAwTogayM7APHoQk8GfDZEmGTqfTkecUbj+HnrzCe3gMV3nCjVxA8RLuQyvqBRStasUWkNrUioWv
la8VC82UrRUGPYQ3OFd8hFmrdSgDhkw2YQZ9hng9laoVhqvZhecQ7ylK1ApDMfJpX0O8N22+W2GgMWRr
hUGmkKsVBvgWmVrh8F+QqBUO/YemtcJhc2hSKxw0l8VrhQPmYr0A2wrZvsTW22iTujBw+BS2nxLWH3My
dWFgoBrbHxrZujAwnP1P/ZgSdWGwsLVSdWGw0Gnz3eVbWHjZujDq4PJ1YWRwm7owrOrS6XQ6SzIMb9OV
UfyTpgr5AAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtnFailMode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFpSURBVGhD7ZkxTgMxEEUXGo6QEK6ULiAKaBFU3IILIVoo
Eam4BFwA6IgE/xeRviwnXiUzxiP8pNdEmtn5ir2rXQ+dTmcjB/AaLuEX/Cn4DuewCWbwCeYG3eYb/HMO
4S7D0yYC3MDccCWbWUJc8zrYA5zAMHxCDTCFodDhaTh6gJFww3Pj0wV/sKJWAN5y19f4hufQBB2eeqEB
qFkIbUq94LLh0HotkxDakHpyCtMQK3gJd0abUW/MQ2gjWgPTENqE1sIshDagNTEJocW0NnuH0EJaYv1E
Tes8vINF0qIS6QPJU/4TRdKiEuEDhF9C1pzB3Ca+gKPQQlqTvYcnWkxrYTI80Qa0BmbDE21CvTEdnmgj
6on58ESbUS/Cv9CEf6UM/1If/rOKG+EDfEANEOrLNHmBGuAeHsMw3EINMFZuxiYOOI7gK8wNWZK3xiY4
gY8wN+Q2mwlAeMx6BZ9hemqTs5kl1On8H4bhFxInwHev/ipmAAAAAElFTkSuQmCC
</value>
</data>
<data name="tslBtn_ActionOnly.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFcSURBVDhPpZKhbsMwEIb7CH2FsMGFDYcNLqyw8hNMRqWV
UWEVFFjJJDCSSWikkMJIJoUFBoEBBgX/7txmSdeFtCf9shT5+3y+ePFy2daC0xwbNHUDUxroQkMfKLlG
ts+gdgq37Y/FoO88uNzZwXW3nBz8xcP3HvJbzgtMZcZThxO3KkAcsRJIP9N5ASqJZzMKZsoUGcwho3lQ
cgW9V8hoHqCr6Yo6rg1mBQz7sxpzkvCtgC1FkDCs2+x/wQDLVXIH+2MKX9O3KoYqJFQtHgW/8Jo2D5IJ
7MoI9hBB5gKyouFOBVPYtTcJwXLNYAybRzA7gr8iiF0KUU4EDA8QDylIqMUgoZbjtyWS92VYxVoi2SQQ
xZ8O1EYEeAjDtoiRfERAb4GO0jfAif4OXSHdJhPBAGIU4OJC+7wGAcPdVcDc5B1cAX626OkJ80m88Wwo
mgAOQdPcCZ5MELxWi8UPMW+AfDa6oN4AAAAASUVORK5CYII=
</value>
</data>
<data name="TsBtn_Record.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJWSURBVDhPtZJbSFRRFIYP9GAvRRfqqaeC6CWKCKqHjMIs
TDOMxIysiRiVFJXJ0im1vKGTt0nTxsjLoOatEkWlSITMIbPScIwuEqmR02TNmfGexdc5R0cbMoKgH342
7L3/b6292MJ/UVtDKi23E6krjmV268961NFJbVn2nIszj2GzlDNqucFAbwbn1J5kp2i4ptOiT4n+HSiH
JsQapuzVTNgqMBZoGBsuJflCGC/bY7gY5k2MaiuWthMMN60lIuigK0QGyOEpeyX5qcfpMmUgfshlqFfL
O9Mp6gt9CQ50pzxuDc+yBUKPHnAFVJdmzgDEW+jigkjQBKAN9+d8qB8atS+RKm9CAj3IiVinAAK83F0B
FUU6JsUqJq0GxgbTsL4Ix1y6UnFPyQq6CpbwRO+mhGV77NjsCjAaUhm3FjPen8TYqzOMPj+M2LCUrJIm
0gx1XLpaRYzOSGRiIcGxeoKi0l0BRXmJjAzoGe1VM9LpjePhFj7dXaWEnZqa/o7NPkH/kA3/kMv4nNTO
Qwqz4hFfJ+Ho8MTRuhF782oGSgSlsqyiO22KDZUt9PRZlPD9djP7/FQzkLz0WL50n8XesgGxcTnWGjf6
bgpK29+mf/DVIVX+aKPnrQVT93u8AiPxlMJ79h/CfecuhJzkaKyPQ6TwMj7XLmawbBHmfIEI6c1y284O
rksd5BqbqW81K6vs7ZvWI1xJiFI+iHPKTqulgf1a+YHpjRKuuddFZdPTeYCsrPjT0g/zReW3F5/d25QD
edrym53VFvIcYCEdkaYtX/ibZ6//qwThJ/L08nQkBLtFAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsBtn_ExpandNode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEySURBVDhPxVKhbsNADM0v5RfKBtc/qIIGq6DRKqiwCiqs
FFJY6cjopJDASkcKAw4UDhwY8PzO9mQpLZu0Jz3l8uL37LNS/QnCZ6b6paH+kqk95vIMExX2Z9GafaL1
LtHqXblNpHYOmCTATDh7QusQdNIwZv0WlwGeQLxLGMzNIZeuxnrjAsaJBTUBPgiMtyQfvokyM3zEoqsd
OxDBMF7VoCjvas5fRMNlfByQ5lyKcfaMrKEGnWFeBuhInoDtAFdA98TdE2vDeREggsFCjJjAzHF+EGAj
lSvwQtHxl2weJzc+m/tnAQacjatXuYJ05wY3/tGeBXgCtgMsEKPDHK4ccApFV7sElC6z0AeBuAJq0Bnm
RQAEjLretNTueuoOgxQeB+r2AzXbjr+3pcYHq/1fUVU/iEIHnpaEtYoAAAAASUVORK5CYII=
</value>
</data>
<metadata name="StuMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>129, 17</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="MsiCopyNode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAH1JREFUOE+9j1EKgDAMQ/exs3onL+YVdgwlrGFdaJmi+CD40ewRy2tqrWcUO69B
WXkkyQT8Wi3Hl+eHu2WTCHykoKwMoUMXMCgrlE4SChSWKQTjt9wSHllkogWktcMkTqDoAgaPu8AtiHJ7
QU68AJkW5HywoJei4LZc8AulXG6IZu0vxOOrAAAAAElFTkSuQmCC
</value>
</data>
<data name="MsiCutNode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAZFJREFUOE+1jNsrg3Ech/e3uFAuFDlEyakmLuZU7+vGaVu8OTQpZ2/Cwhy25jSH
5pC3pDHZaHqHC3NIstHakjFk7EYOIXH1YS8pF95eyXP1+337PI/oX7DueDA5x+Lzy+E580OtN3+7/YjN
dY0eHQPb4cOXMGtexYhxR1ggQL/egOmlD8Hnv0FxBQ2GPRQeMCyuo3uA4YT1bQfIgnJMr50ID8xb994D
U9DPLKO2RQMilxIuB1ixX6KqWQO5oglEXikU9Z2/CwSgqntAFlaCoDowZNwXHrA6X9HA3INsO0fVsAeS
OjuyaBf37jNd8IdY5wvytbcglV4kFU4hrUiPjBobMhrdEJexUKg3+AM0cwOy/QpJxQuIJXohpY2Q1Oxi
0fGIbsMxogktfyCn7QKWg2eYd28Rla3mxtm0GzNbd2gdtyM0uZw/QChPYXE8QWfyIjK9nRvLVAeIlxkQ
EidHUHA4f4BSHyFBNouIzC7EpJZw40HzKSLEpQhLlKJpdJs/MMH6kCIfexcoqCY2+cd/RyR6A4ZK7Qq0
XkbzAAAAAElFTkSuQmCC
</value>
</data>
<data name="MsiNodePaste.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAlZJREFUOE+1kltIVFEUhg/0YC9FF+qpp4LoJYoIqoeMwixMM4zEjKyJGJUUlcnS
KbW8oZO3SdPGyMug5q0SRaVIhMwhs9JwjC4SqZHTZM2Z8Z7F1zlHRxsygqAffjbsvf9vrb3Ywn9RW0Mq
LbcTqSuOZXbrz3rU0UltWfacizOPYbOUM2q5wUBvBufUnmSnaLim06JPif4dKIcmxBqm7NVM2CowFmgY
Gy4l+UIYL9tjuBjmTYxqK5a2Eww3rSUi6KArRAbI4Sl7Jfmpx+kyZSB+yGWoV8s70ynqC30JDnSnPG4N
z7IFQo8ecAVUl2bOAMRb6OKCSNAEoA3353yoHxq1L5Eqb0ICPciJWKcAArzcXQEVRTomxSomrQbGBtOw
vgjHXLpScU/JCroKlvBE76aEZXvs2OwKMBpSGbcWM96fxNirM4w+P4zYsJSskibSDHVculpFjM5IZGIh
wbF6gqLSXQFFeYmMDOgZ7VUz0umN4+EWPt1dpYSdmpr+js0+Qf+QDf+Qy/ic1M5DCrPiEV8n4ejwxNG6
EXvzagZKBKWyrKI7bYoNlS309FmU8P12M/v8VDOQvPRYvnSfxd6yAbFxOdYaN/puCkrb36Z/8NUhVf5o
o+etBVP3e7wCI/GUwnv2H8J95y6EnORorI9DpPAyPtcuZrBsEeZ8gQjpzXLbzg6uSx3kGpupbzUrq+zt
m9YjXEmIUj6Ic8pOq6WB/Vr5gemNEq6510Vl09N5gKys+NPSD/NF5bcXn93blAN52vKbndUW8hxgIR2R
pi1f+Jtnr/+rBOEn8vTydCQEu0UAAAAASUVORK5CYII=
</value>
</data>
<data name="MsiCopyWholeRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAclJREFUOE+9kd0rg2EYxvenMC3h2B8g+YyiyAEHykeOdsCRIyGKNJramAnz1Tbe
MQkTGma+Grb5mgzFVkPvy9jGOy57n40xNUr51XXyPF2/u/t5eH9Gu3wELtSSlUQ5a8Kgdh2h65/hypEo
Jo2obBj+nUSzaA3VgvhfXiEZmYfOYEVxdfvPEuXcDinqbAC1C5jtDDoVM6BWGaiXaaj0NPrnaIgnbklC
tTCDWiMRcDw9+8Hc++BwuYkgkqbRayRXGL5K5Go9uewzPEM0y6CeukLNgB0jCzfk/DPVMhe0GwySiibD
EmlgX27vRw+La9qDc8cdDuw3kE87SamV8pOYT+5QKnIisWgKCQVjiM8bCkq4fb0+9mOyUG5DlXQfHapz
IniHeWBxcumFwXIPGbUNQW5vWMC4fTg8c2Hn2AGj+QJLW6do6At+b92oG0KpEyVtNuQ37pHIqE0IsrvC
guSssm+pEe8RARtYz0WzsNgfsWhioFm5RfeYEXEZ4q+PGUl50wYRfJ78ni71GvhpouiCwlo9PE8vkE+Y
0KPZhmx8k0zmylLlKmJTW6ILMoS6wGurSOLzFBDk9CAuUwJ+enug3IqYlObogn+Cx3sDxZzRV9s9/UwA
AAAASUVORK5CYII=
</value>
</data>
<data name="MsiPasteWholeRow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAIxJREFUOE+1kNENgCAMRPvBrO7kAg5j/HYFf90Ac7Yo1BYwxkteIrV3nNIvCiHE
HBn70gYQFzqx3omNhcE07xc458b0rHfEXgYkg4XeE/szoEYzoJeuAKLRpTNgiJYw5yBRrYElzLdtvUNa
DfhGRp8bAXYD6GWD++clOEAaQAjRYNFT0cBX/q0en0V0AH9AuLiqsbSEAAAAAElFTkSuQmCC
</value>
</data>
<data name="MsiGridRowBlockInsert.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAANNJREFUOE+9UqsOg0AQ5Jf6C3W1/EGDqmxQ2OYUkpxCNjmDJDmDJcFUNsFUViAq
K1ZUTNnjeqmgPALpJKNmZza7GW8xdFFD5RVU1lGeNUSiYeVx4Av06igSNTPAGukJNC3DSE4P+Gxlo+ED
8A9iesBmF6CPVl4PMtVg8n9ELBEchaGVf8INsJnPq+9AdQP0haAKGgxg0ZE3G+MVUCVBZIQgGQ5guIHw
JI1R5oQwJfgxYRs1owEOfG/vs3VZQxdtC20buybOLZLFak0MFjdx/7cmet4bXasamC+04CYAAAAASUVO
RK5CYII=
</value>
</data>
<data name="MsiGridRowBlockDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAN1JREFUOE9joArYdvDC/7U7T/1fvOHQ/5nLdv2fMG/z/97Z6/9DpQmDdbtO/weB
L9///X/89s//S49+/Tf1TCbegPlr9qNoPn7r53+nsHziDZgwbyPYRhAGaZyxcDUcT56z/H/X1IX/m3pm
oRjIwsSC2wKQxsM3/vzfdu7n/6UHv/2ftPkT2HCQJnQM1YIKQDauO/Hjf/uyB/9LZ979n9JzByNMUDSj
x0Jl6xSwV2DegmGockyALRYisptwa0AH2GIBr43oAGQAunNJMoAmCYkkA5ATEjKGSg9qwMAAAIGPAPqv
CFdSAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsBtn_CheckAction.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAGRJREFUOE+lzcENgDAIhWFmchbHcRN3YwEW4GblgDGFV9r0T96hCV9K+53Xs7yv
98HMYSISpqo1RrDEGTxuqjGCJfbDDA5xf4ygVWIELYhHP3oQ+zGCVor9+L+sgGehFfDy9iJq1K76qrTi
CkcAAAAASUVORK5CYII=
</value>
</data>
<data name="tsBtn_UncheckAction.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vgAADr4B6kKxwAAAAFdJREFUOE+ly7ENACEMQ9EMeeMwaxbIAukANyfdQRIjvuTCxZP7ntaP9zaPqoYz
s89o/IfuzuEdpHAES5zBFFcwxAxEC2YhSnEGUYgriLaYgWjBx7tLZADW/iIHX3Y7QQAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="TsmiDebugStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAMdJREFUOE+tk+ENxCAIhdnJndzJBW6Yi8N0A+89ChUbNf44kpdY4HsS2srfI+Xa
UqGaSijmIGuZh0PoUz1wFAqlTowy4IwGB1ewCsXP9+omfNDbDabJCAOi3ABKaDS8j+63tiwY02ADmKsi
g0mhqQYTBrvBY2LNM4O+VB4mBhR3c25ghWhAsXFvgO3FQoSPJtBDkMNcbswtl6iHMMUb9txgEF8j4z3F
Vrisv8IQRya4WfeyCi1yvAmc8K0Pn/AuOOL9f9xagyI/02zCPFZpw6EAAAAASUVORK5CYII=
</value>
</data>
<data name="TsmiDebugEnd.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAH1JREFUOE+9kEEOgCAMBHvi3Vx4N1pkzVKoFQ9O0sTW3TkgHiml+jQ95qOhUsow
LNC9R0dsyJYl530Bdi2/EkitgwS3pQBBnhYmyX3zBChM08OhwI4t820SWFqYyuEbWFBE6H8BYFEgOH+4
cxEIYlig323fAYJPZQXFuSxyANoUGxZ/KYqDAAAAAElFTkSuQmCC
</value>
</data>
<data name="TsmiDebugStep.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABIAAAARCAYAAADQWvz5AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAUdJREFUOE+tlK9uhEAQh3mEPkIfoY/Q4EnO4irwnEZVYQme5CSyAk81qo9QLEFg
+CO38013281dybXNTfILczOz38ztLgTruhbBLUxAZlmWk/35fwPUtq2R58s0TXc2/HcDFIahaZoG2Nse
bNu2J5n81Rcxm/4GoaqqFCYF9zatxgLU973WIHyBHb5gPgjleQ5smuf5gTzF1BBjsavDJ0ZOa3F8EAI2
DIPCBHQqy1JjLI6iyMRxrH6WZaaua4DFjyCUJIkZx1G7spAYEF+uTpq974KQmyJNU11wnidGDsbViTgd
psL3YQDcxNTs7hEF7JE8C6ZyEPYFCL7X7HgBOj81jtefpus6lQ/SK+CD7Alc3CPpeOAUuT9sLI3snZuk
9lGLHOjazbZ/k/04ip7x3dRqgH77rjEpNU42/GmApMNN3v4bfI+C4AP3/yDWi5gZ5QAAAABJRU5ErkJg
gg==
</value>
</data>
<data name="TsmiDebugContinue.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABIAAAARCAYAAADQWvz5AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAALhJREFUOE+t1LsNwyAABFBGyCiZgZ4dUtCzQirWyBBMQZWGPrVFQcOnJL4IJMuy
MIacdI3BT7L5kBhjXuu893cyE0BCiLwsi0spPcrj6wFEKc2c82ytzcNYhSpmjMkhhGcZ7s8WQhljFXuV
KX3ZQxXTWv8w59ytTG3nCKpVSmFF311YC0K7sTMIBbZ+5qe8cpwzSErZt2Fb0F/+0SUE2UNDS49soeHN
iFRo6ngggKYPLAJo+gohhHwB0XQ+lRtjI7IAAAAASUVORK5CYII=
</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,786 @@
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports UTS_Core.DebugLog
Imports UTS_Core.UTSModule.Production
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()
_planGrid.GridUpdateEventTrigger(GrdStationPlan) '笨方法,开始就触发一次刷新
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 _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
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()
_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 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 TsBtnClearAll_Click(sender As Object, e As EventArgs) Handles TsBtnClearAll.Click
_planGrid.NodeClear()
End Sub
Private Sub TsBtnMoveUp_Click(sender As Object, e As EventArgs) Handles TsBtnMoveUp.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
' gCopyWholeRows = tmpLastRow - tmpFrisRow + 1
_planGrid.NodeMoveUp(tmpLastRow - tmpFrisRow + 1)
End Sub
Private Sub TsBtnMoveDown_Click(sender As Object, e As EventArgs) Handles TsBtnMoveDown.Click
_planGrid.NodeMoveDown()
End Sub
Private Sub TsBtnMoveLeft_Click(sender As Object, e As EventArgs) Handles TsBtnMoveLeft.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
_planGrid.NodeMoveLeft(tmpLastRow - tmpFrisRow + 1)
End Sub
Private Sub TsBtnMoveRight_Click(sender As Object, e As EventArgs) Handles TsBtnMoveRight.Click
Dim tmpFrisRow As Integer = GrdStationPlan.Selection.FirstRow
Dim tmpLastRow As Integer = GrdStationPlan.Selection.LastRow
_planGrid.NodeMoveRight(tmpLastRow - tmpFrisRow + 1)
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
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()
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 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.TestProgressChanged, AddressOf TestProgressChanged
AddHandler _tester.RetryProgressChanged, AddressOf RetryProgressChanged
AddHandler _tester.TestTimeChanged, AddressOf TestTimeChanged
AddHandler StationEditStatusMonitor.StationEditStatusChanged, AddressOf _tester.StationEditStatusChanged
End Sub
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 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 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()
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(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(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 MsiCopyNode_Click(sender As Object, e As EventArgs) Handles MsiCopyNode.Click
GrdStationPlan.Selection.CopyData()
End Sub
Private Sub MsiCutNode_Click(sender As Object, e As EventArgs) Handles MsiCutNode.Click
GrdStationPlan.Selection.CutData()
End Sub
Private Sub MsiNodePaste_Click(sender As Object, e As EventArgs) Handles MsiNodePaste.Click
GrdStationPlan.Selection.PasteData()
End Sub
Private Sub MsiCopyWholeRow_Click(sender As Object, e As EventArgs) Handles MsiCopyWholeRow.Click
TsBtnCopyWholeRow.PerformClick()
End Sub
Private Sub MsiPasteWholeRow_Click(sender As Object, e As EventArgs) Handles MsiPasteWholeRow.Click
TsBtnPasteWholdRows.PerformClick()
End Sub
Private Sub TsBtnCopyWholeRow_Click(sender As Object, e As EventArgs) Handles TsBtnCopyWholeRow.Click
_planGrid.MultiLineCopyData()
End Sub
Private Sub TsBtnPasteWholdRows_Click(sender As Object, e As EventArgs) Handles TsBtnPasteWholdRows.Click
_planGrid.MultiLinePasteData()
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
#End Region
End Class
End Namespace

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,34 @@
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
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,784 @@
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 = False
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 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
Private Sub AuthByType(type As RowTypeEnum)
Select Case type
Case RowTypeEnum.FixedModule
CanAddChildNode = True
CanChangeContent = False
CanDelete = False
CanChangeLever = False
Case RowTypeEnum.Module
CanAddChildNode = True
CanChangeContent = True
CanDelete = True
CanChangeLever = True
Case RowTypeEnum.Control
CanAddChildNode = True
CanChangeContent = True
CanDelete = True
CanChangeLever = True
Case RowTypeEnum.Flow
CanAddChildNode = False
CanChangeContent = True
CanDelete = True
CanChangeLever = 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
.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
#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,136 @@
Imports UTS_Core.Undo
Namespace UTSModule.Station
Public Class RowNodeCommand
Implements ICommand
Private ReadOnly _row As Integer
Private ReadOnly _rowNode As RowNode
Sub New(rowNode As RowNode, row As Integer, redoString As String)
_row = row
_rowNode = rowNode
End Sub
Public Sub Redo() Implements ICommand.Redo
End Sub
Public Sub Undo() Implements ICommand.Undo
End Sub
Public Sub Execute() Implements ICommand.Execute
Redo()
End Sub
End Class
Public Class RowNodeCommand2
Implements ICommand
Enum ChangeType
Add
Remove
Insert
RemoveChildAt
RemoveChildNode
MoveUp
MoveDown
MoveLeft
MoveRight
TextChanged
End Enum
Private _parentNode As RowNode
Private _rowNode As RowNode
Private _index As Integer '增加节点的位置
Private _type As ChangeType '当前操作的类型
Sub New(parentNode As RowNode, rowNode As RowNode, type As ChangeType, Optional index As Integer = 0)
_parentNode = parentNode
_rowNode = rowNode
_index = index
_type = type
End Sub
Public Sub Execute() Implements ICommand.Execute
Redo()
End Sub
Public Sub Redo() Implements ICommand.Redo
Select Case _type
Case ChangeType.Add
_parentNode.AddNode(_rowNode)
_index = _rowNode.RowIndex
Case ChangeType.Insert
_parentNode.InsertNode(_index, _rowNode)
Case ChangeType.Remove
_index = _rowNode.RowIndex
_parentNode.RemoveChildNode(_rowNode)
Case ChangeType.RemoveChildAt
_index = _rowNode.RowIndex
_parentNode.RemoveChildAt(_index)
Case ChangeType.RemoveChildNode
_index = _rowNode.RowIndex
_parentNode.RemoveChildNode(_rowNode)
Case ChangeType.MoveUp
_rowNode.MoveUp()
Case ChangeType.MoveDown
_rowNode.MoveDown()
Case ChangeType.MoveLeft
_rowNode.MoveLeft()
Case ChangeType.MoveRight
_rowNode.MoveRight()
Case ChangeType.TextChanged
End Select
End Sub
Public Sub Undo() Implements ICommand.Undo
Select Case _type
Case ChangeType.Add
_parentNode.RemoveChildNode(_rowNode)
Case ChangeType.Insert
_parentNode.RemoveChildAt(_index)
Case ChangeType.Remove
_parentNode.InsertNode(_index, _rowNode)
Case ChangeType.RemoveChildAt
_parentNode.InsertNode(_index, _rowNode)
Case ChangeType.RemoveChildNode
_parentNode.InsertNode(_index, _rowNode)
Case ChangeType.MoveUp
_rowNode.MoveDown()
Case ChangeType.MoveDown
_rowNode.MoveUp()
Case ChangeType.MoveLeft
_rowNode.MoveRight()
Case ChangeType.MoveRight
_rowNode.MoveLeft()
Case ChangeType.TextChanged
End Select
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,697 @@
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 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 e.Col = ColNames.ColValue Then
Dim value As String = _grd.Cell(e.Row, e.Col).Text
Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType
changeType = 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
ActiveRowNode.CommandType = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
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.ErrorCode
ActiveRowNode.ErrorCode = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
Case RowNames.ErrorMessage
ActiveRowNode.ErrorMessage = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
Case RowNames.CommandType
ActiveRowNode.CommandType = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
Case RowNames.Command
ActiveRowNode.Command = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
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
Dim args As New RowNodeChangedEventArgs With {
.Node = ActiveRowNode,
.ChangeType = changeType
}
RaiseEvent RowNodeTextChanged(sender, args)
End If
_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
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 = ""
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
Select Case _grdSingleRowDropRow
Case RowNames.ControlType
ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
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)
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)
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)
End If
End Select
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 idx As Integer
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,631 @@
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)
Dim saved As Boolean = False
'获取站包Md5值
Dim revFilePath As String = $"{UtsPath.StationPacketPath(ParentProcessStation.ParentProject.Index, ParentProcessStation.StationID, revFileName)}"
Dim md5 As String = UTS_Core.Security.Md5.GetFileMd5(revFilePath)
'更新最新包名,编辑密码与发布密码
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 Database 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
PacketMD5 = md5
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,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,209 @@
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, .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>
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