Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
李娜
/
AutoCountMachine
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 54093547
由
LN
编写于
2020-08-18 13:23:24 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
屏蔽:料号未配置NG功能
1 个父辈
876e97c3
显示空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
1568 行增加
和
5 行删除
RC1266-AutoCountMachine/source/AutoCountClient/App.config
RC1266-AutoCountMachine/source/AutoCountClient/AutoCountClient.csproj
RC1266-AutoCountMachine/source/AutoCountClient/FrmAddCom.resx
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.Designer.cs
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.cs
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.resx
RC1266-AutoCountMachine/source/AutoCountClient/FrmLearning.cs
RC1266-AutoCountMachine/source/AutoCountClient/FrmRobotMain.cs
RC1266-AutoCountMachine/source/AutoCountClient/记录.txt
RC1266-AutoCountMachine/source/Common/Setting_Init.cs
RC1266-AutoCountMachine/source/DeviceLibrary/XRAY/pnDetailedList.csv
RC1266-AutoCountMachine/source/DeviceLibrary/XRAY/料号清单(1).xlsx
RC1266-AutoCountMachine/source/DeviceLibrary/bean/OutputEquip.cs
RC1266-AutoCountMachine/source/DeviceLibrary/bean/OutputEquip_Partial.cs
RC1266-AutoCountMachine/source/DeviceLibrary/bean/X_RAY_Equip_Partial.cs
RC1266-AutoCountMachine/source/LoadCVSLibrary/LoadCSVLibrary.csproj
RC1266-AutoCountMachine/source/LoadCVSLibrary/storeConfig/CSVBomManager.cs
RC1266-AutoCountMachine/source/AutoCountClient/App.config
查看文件 @
5409354
...
@@ -53,6 +53,8 @@
...
@@ -53,6 +53,8 @@
<
add
key
=
"CounParamConfig"
value
=
"\XRAY\countParam.csv"
/>
<
add
key
=
"CounParamConfig"
value
=
"\XRAY\countParam.csv"
/>
<
add
key
=
"DataPath"
value
=
"\data\DB.db3"
/>
<
add
key
=
"DataPath"
value
=
"\data\DB.db3"
/>
<
add
key
=
"ResultMinCount"
value
=
"100"
/>
<
add
key
=
"ResultMinCount"
value
=
"100"
/>
<
add
key
=
"ComPath_Config"
value
=
"\XRAY\pnDetailedList.csv"
/>
<
add
key
=
"LabelWaitMS"
value
=
"1000"
/>
</
appSettings
>
</
appSettings
>
<
log4net
>
<
log4net
>
...
...
RC1266-AutoCountMachine/source/AutoCountClient/AutoCountClient.csproj
查看文件 @
5409354
...
@@ -123,6 +123,12 @@
...
@@ -123,6 +123,12 @@
<Compile Include="FrmAnalyze.Designer.cs">
<Compile Include="FrmAnalyze.Designer.cs">
<DependentUpon>FrmAnalyze.cs</DependentUpon>
<DependentUpon>FrmAnalyze.cs</DependentUpon>
</Compile>
</Compile>
<Compile Include="FrmComponentList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmComponentList.Designer.cs">
<DependentUpon>FrmComponentList.cs</DependentUpon>
</Compile>
<Compile Include="FrmLearning.cs">
<Compile Include="FrmLearning.cs">
<SubType>Form</SubType>
<SubType>Form</SubType>
</Compile>
</Compile>
...
@@ -192,6 +198,9 @@
...
@@ -192,6 +198,9 @@
<EmbeddedResource Include="FrmAnalyze.resx">
<EmbeddedResource Include="FrmAnalyze.resx">
<DependentUpon>FrmAnalyze.cs</DependentUpon>
<DependentUpon>FrmAnalyze.cs</DependentUpon>
</EmbeddedResource>
</EmbeddedResource>
<EmbeddedResource Include="FrmComponentList.resx">
<DependentUpon>FrmComponentList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmLearning.resx">
<EmbeddedResource Include="FrmLearning.resx">
<DependentUpon>FrmLearning.cs</DependentUpon>
<DependentUpon>FrmLearning.cs</DependentUpon>
</EmbeddedResource>
</EmbeddedResource>
...
...
RC1266-AutoCountMachine/source/AutoCountClient/FrmAddCom.resx
0 → 100644
查看文件 @
5409354
<?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="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file
\ No newline at end of file
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.Designer.cs
0 → 100644
查看文件 @
5409354
namespace
OnlineStore.AutoCountClient
{
partial
class
FrmComponentList
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System
.
ComponentModel
.
IContainer
components
=
null
;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose
(
bool
disposing
)
{
if
(
disposing
&&
(
components
!=
null
))
{
components
.
Dispose
();
}
base
.
Dispose
(
disposing
);
}
#
region
Windows
Form
Designer
generated
code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent
()
{
System
.
ComponentModel
.
ComponentResourceManager
resources
=
new
System
.
ComponentModel
.
ComponentResourceManager
(
typeof
(
FrmComponentList
));
this
.
groupBox1
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
groupBox2
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
button1
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
txtBomFilePath
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
btnBomImport
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
btnDownLoad
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupInfo
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
txtPartNum
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
label7
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
txtFengzhuang
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
label5
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
txtDes
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
label2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
txtName
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
label1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
btnSave
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
dgvList
=
new
System
.
Windows
.
Forms
.
DataGridView
();
this
.
Column_PN
=
new
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
();
this
.
Column_Name
=
new
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
();
this
.
Column_F
=
new
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
();
this
.
Column_Des
=
new
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
();
this
.
Column_Del
=
new
System
.
Windows
.
Forms
.
DataGridViewLinkColumn
();
this
.
btnBack
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
btnNew
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox1
.
SuspendLayout
();
this
.
groupBox2
.
SuspendLayout
();
this
.
groupInfo
.
SuspendLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvList
)).
BeginInit
();
this
.
SuspendLayout
();
//
// groupBox1
//
this
.
groupBox1
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
)
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Left
)
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
groupBox1
.
Controls
.
Add
(
this
.
groupBox2
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
btnDownLoad
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
groupInfo
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
dgvList
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
btnBack
);
this
.
groupBox1
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
groupBox1
.
Location
=
new
System
.
Drawing
.
Point
(
3
,
3
);
this
.
groupBox1
.
Name
=
"groupBox1"
;
this
.
groupBox1
.
Size
=
new
System
.
Drawing
.
Size
(
1275
,
712
);
this
.
groupBox1
.
TabIndex
=
1
;
this
.
groupBox1
.
TabStop
=
false
;
this
.
groupBox1
.
Text
=
"元器件库管理"
;
//
// groupBox2
//
this
.
groupBox2
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
groupBox2
.
Controls
.
Add
(
this
.
button1
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
txtBomFilePath
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
btnBomImport
);
this
.
groupBox2
.
Location
=
new
System
.
Drawing
.
Point
(
853
,
343
);
this
.
groupBox2
.
Name
=
"groupBox2"
;
this
.
groupBox2
.
Size
=
new
System
.
Drawing
.
Size
(
399
,
187
);
this
.
groupBox2
.
TabIndex
=
74
;
this
.
groupBox2
.
TabStop
=
false
;
this
.
groupBox2
.
Text
=
"上传更新元器件库"
;
//
// button1
//
this
.
button1
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
button1
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
10.5F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
button1
.
Location
=
new
System
.
Drawing
.
Point
(
243
,
117
);
this
.
button1
.
Name
=
"button1"
;
this
.
button1
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
button1
.
TabIndex
=
12
;
this
.
button1
.
Text
=
"保存元器件库"
;
this
.
button1
.
UseVisualStyleBackColor
=
true
;
//
// txtBomFilePath
//
this
.
txtBomFilePath
.
Enabled
=
false
;
this
.
txtBomFilePath
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
txtBomFilePath
.
Location
=
new
System
.
Drawing
.
Point
(
18
,
37
);
this
.
txtBomFilePath
.
Multiline
=
true
;
this
.
txtBomFilePath
.
Name
=
"txtBomFilePath"
;
this
.
txtBomFilePath
.
Size
=
new
System
.
Drawing
.
Size
(
355
,
61
);
this
.
txtBomFilePath
.
TabIndex
=
10
;
//
// btnBomImport
//
this
.
btnBomImport
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnBomImport
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
9F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnBomImport
.
Location
=
new
System
.
Drawing
.
Point
(
88
,
118
);
this
.
btnBomImport
.
Name
=
"btnBomImport"
;
this
.
btnBomImport
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
btnBomImport
.
TabIndex
=
8
;
this
.
btnBomImport
.
Text
=
"选择文件"
;
this
.
btnBomImport
.
UseVisualStyleBackColor
=
true
;
//
// btnDownLoad
//
this
.
btnDownLoad
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnDownLoad
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnDownLoad
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
10.5F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnDownLoad
.
Location
=
new
System
.
Drawing
.
Point
(
941
,
598
);
this
.
btnDownLoad
.
Name
=
"btnDownLoad"
;
this
.
btnDownLoad
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
btnDownLoad
.
TabIndex
=
71
;
this
.
btnDownLoad
.
Text
=
"下载模板"
;
this
.
btnDownLoad
.
UseVisualStyleBackColor
=
true
;
this
.
btnDownLoad
.
Click
+=
new
System
.
EventHandler
(
this
.
btnDownLoad_Click
);
//
// groupInfo
//
this
.
groupInfo
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)(((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
)
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
groupInfo
.
Controls
.
Add
(
this
.
btnNew
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
txtPartNum
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
label7
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
txtFengzhuang
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
label5
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
txtDes
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
label2
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
txtName
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
label1
);
this
.
groupInfo
.
Controls
.
Add
(
this
.
btnSave
);
this
.
groupInfo
.
Location
=
new
System
.
Drawing
.
Point
(
853
,
22
);
this
.
groupInfo
.
Name
=
"groupInfo"
;
this
.
groupInfo
.
Size
=
new
System
.
Drawing
.
Size
(
399
,
315
);
this
.
groupInfo
.
TabIndex
=
68
;
this
.
groupInfo
.
TabStop
=
false
;
this
.
groupInfo
.
Text
=
"元器件基本信息"
;
//
// txtPartNum
//
this
.
txtPartNum
.
Enabled
=
false
;
this
.
txtPartNum
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
txtPartNum
.
Location
=
new
System
.
Drawing
.
Point
(
102
,
41
);
this
.
txtPartNum
.
MaxLength
=
30
;
this
.
txtPartNum
.
Name
=
"txtPartNum"
;
this
.
txtPartNum
.
Size
=
new
System
.
Drawing
.
Size
(
271
,
29
);
this
.
txtPartNum
.
TabIndex
=
74
;
//
// label7
//
this
.
label7
.
AutoSize
=
true
;
this
.
label7
.
Location
=
new
System
.
Drawing
.
Point
(
28
,
48
);
this
.
label7
.
Name
=
"label7"
;
this
.
label7
.
Size
=
new
System
.
Drawing
.
Size
(
68
,
17
);
this
.
label7
.
TabIndex
=
73
;
this
.
label7
.
Text
=
"元器件编号:"
;
this
.
label7
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleRight
;
//
// txtFengzhuang
//
this
.
txtFengzhuang
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
txtFengzhuang
.
Location
=
new
System
.
Drawing
.
Point
(
102
,
131
);
this
.
txtFengzhuang
.
MaxLength
=
30
;
this
.
txtFengzhuang
.
Name
=
"txtFengzhuang"
;
this
.
txtFengzhuang
.
Size
=
new
System
.
Drawing
.
Size
(
271
,
29
);
this
.
txtFengzhuang
.
TabIndex
=
70
;
//
// label5
//
this
.
label5
.
AutoSize
=
true
;
this
.
label5
.
Location
=
new
System
.
Drawing
.
Point
(
52
,
138
);
this
.
label5
.
Name
=
"label5"
;
this
.
label5
.
Size
=
new
System
.
Drawing
.
Size
(
44
,
17
);
this
.
label5
.
TabIndex
=
69
;
this
.
label5
.
Text
=
"封装:"
;
this
.
label5
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleRight
;
//
// txtDes
//
this
.
txtDes
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
txtDes
.
Location
=
new
System
.
Drawing
.
Point
(
102
,
176
);
this
.
txtDes
.
MaxLength
=
30
;
this
.
txtDes
.
Multiline
=
true
;
this
.
txtDes
.
Name
=
"txtDes"
;
this
.
txtDes
.
Size
=
new
System
.
Drawing
.
Size
(
271
,
46
);
this
.
txtDes
.
TabIndex
=
66
;
//
// label2
//
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
52
,
183
);
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
44
,
17
);
this
.
label2
.
TabIndex
=
34
;
this
.
label2
.
Text
=
"描述:"
;
this
.
label2
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleRight
;
//
// txtName
//
this
.
txtName
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
txtName
.
Location
=
new
System
.
Drawing
.
Point
(
102
,
86
);
this
.
txtName
.
MaxLength
=
30
;
this
.
txtName
.
Name
=
"txtName"
;
this
.
txtName
.
Size
=
new
System
.
Drawing
.
Size
(
271
,
29
);
this
.
txtName
.
TabIndex
=
33
;
//
// label1
//
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
52
,
93
);
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
44
,
17
);
this
.
label1
.
TabIndex
=
32
;
this
.
label1
.
Text
=
"产品:"
;
this
.
label1
.
TextAlign
=
System
.
Drawing
.
ContentAlignment
.
MiddleRight
;
//
// btnSave
//
this
.
btnSave
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnSave
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnSave
.
Location
=
new
System
.
Drawing
.
Point
(
243
,
242
);
this
.
btnSave
.
Name
=
"btnSave"
;
this
.
btnSave
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
btnSave
.
TabIndex
=
4
;
this
.
btnSave
.
Text
=
"保存"
;
this
.
btnSave
.
UseVisualStyleBackColor
=
true
;
this
.
btnSave
.
Click
+=
new
System
.
EventHandler
(
this
.
btnSave_Click
);
//
// dgvList
//
this
.
dgvList
.
AllowUserToAddRows
=
false
;
this
.
dgvList
.
AllowUserToDeleteRows
=
false
;
this
.
dgvList
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((((
System
.
Windows
.
Forms
.
AnchorStyles
.
Top
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
)
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Left
)
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
dgvList
.
ColumnHeadersHeightSizeMode
=
System
.
Windows
.
Forms
.
DataGridViewColumnHeadersHeightSizeMode
.
AutoSize
;
this
.
dgvList
.
Columns
.
AddRange
(
new
System
.
Windows
.
Forms
.
DataGridViewColumn
[]
{
this
.
Column_PN
,
this
.
Column_Name
,
this
.
Column_F
,
this
.
Column_Des
,
this
.
Column_Del
});
this
.
dgvList
.
Location
=
new
System
.
Drawing
.
Point
(
7
,
22
);
this
.
dgvList
.
MultiSelect
=
false
;
this
.
dgvList
.
Name
=
"dgvList"
;
this
.
dgvList
.
ReadOnly
=
true
;
this
.
dgvList
.
RowHeadersWidth
=
10
;
this
.
dgvList
.
RowTemplate
.
Height
=
23
;
this
.
dgvList
.
SelectionMode
=
System
.
Windows
.
Forms
.
DataGridViewSelectionMode
.
FullRowSelect
;
this
.
dgvList
.
Size
=
new
System
.
Drawing
.
Size
(
830
,
684
);
this
.
dgvList
.
TabIndex
=
32
;
this
.
dgvList
.
CellContentClick
+=
new
System
.
Windows
.
Forms
.
DataGridViewCellEventHandler
(
this
.
dgvList_CellContentClick
);
this
.
dgvList
.
SelectionChanged
+=
new
System
.
EventHandler
(
this
.
dgvList_SelectionChanged
);
//
// Column_PN
//
this
.
Column_PN
.
HeaderText
=
"元器件编号"
;
this
.
Column_PN
.
Name
=
"Column_PN"
;
this
.
Column_PN
.
ReadOnly
=
true
;
this
.
Column_PN
.
Width
=
120
;
//
// Column_Name
//
this
.
Column_Name
.
HeaderText
=
"产品名称"
;
this
.
Column_Name
.
Name
=
"Column_Name"
;
this
.
Column_Name
.
ReadOnly
=
true
;
this
.
Column_Name
.
Width
=
120
;
//
// Column_F
//
this
.
Column_F
.
HeaderText
=
"封装"
;
this
.
Column_F
.
Name
=
"Column_F"
;
this
.
Column_F
.
ReadOnly
=
true
;
this
.
Column_F
.
Width
=
150
;
//
// Column_Des
//
this
.
Column_Des
.
HeaderText
=
"描述"
;
this
.
Column_Des
.
Name
=
"Column_Des"
;
this
.
Column_Des
.
ReadOnly
=
true
;
this
.
Column_Des
.
Width
=
280
;
//
// Column_Del
//
this
.
Column_Del
.
HeaderText
=
"删除"
;
this
.
Column_Del
.
Name
=
"Column_Del"
;
this
.
Column_Del
.
ReadOnly
=
true
;
this
.
Column_Del
.
Resizable
=
System
.
Windows
.
Forms
.
DataGridViewTriState
.
True
;
this
.
Column_Del
.
Text
=
"删除"
;
this
.
Column_Del
.
ToolTipText
=
"删除"
;
this
.
Column_Del
.
UseColumnTextForLinkValue
=
true
;
this
.
Column_Del
.
Width
=
80
;
//
// btnBack
//
this
.
btnBack
.
Anchor
=
((
System
.
Windows
.
Forms
.
AnchorStyles
)((
System
.
Windows
.
Forms
.
AnchorStyles
.
Bottom
|
System
.
Windows
.
Forms
.
AnchorStyles
.
Right
)));
this
.
btnBack
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnBack
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
10.5F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnBack
.
Location
=
new
System
.
Drawing
.
Point
(
1096
,
598
);
this
.
btnBack
.
Name
=
"btnBack"
;
this
.
btnBack
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
btnBack
.
TabIndex
=
6
;
this
.
btnBack
.
Text
=
"返回"
;
this
.
btnBack
.
UseVisualStyleBackColor
=
true
;
this
.
btnBack
.
Click
+=
new
System
.
EventHandler
(
this
.
btnBack_Click
);
//
// btnNew
//
this
.
btnNew
.
FlatStyle
=
System
.
Windows
.
Forms
.
FlatStyle
.
Flat
;
this
.
btnNew
.
Font
=
new
System
.
Drawing
.
Font
(
"微软雅黑"
,
12F
,
System
.
Drawing
.
FontStyle
.
Regular
,
System
.
Drawing
.
GraphicsUnit
.
Point
,
((
byte
)(
134
)));
this
.
btnNew
.
Location
=
new
System
.
Drawing
.
Point
(
88
,
242
);
this
.
btnNew
.
Name
=
"btnNew"
;
this
.
btnNew
.
Size
=
new
System
.
Drawing
.
Size
(
130
,
45
);
this
.
btnNew
.
TabIndex
=
75
;
this
.
btnNew
.
Text
=
"新增"
;
this
.
btnNew
.
UseVisualStyleBackColor
=
true
;
//
// FrmComponentList
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
7F
,
17F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
1284
,
721
);
this
.
Controls
.
Add
(
this
.
groupBox1
);
this
.
Icon
=
((
System
.
Drawing
.
Icon
)(
resources
.
GetObject
(
"$this.Icon"
)));
this
.
Name
=
"FrmComponentList"
;
this
.
Text
=
"元器件信息"
;
this
.
WindowState
=
System
.
Windows
.
Forms
.
FormWindowState
.
Maximized
;
this
.
FormClosing
+=
new
System
.
Windows
.
Forms
.
FormClosingEventHandler
(
this
.
FrmComponentList_FormClosing
);
this
.
Load
+=
new
System
.
EventHandler
(
this
.
FrmPointType_Load
);
this
.
Shown
+=
new
System
.
EventHandler
(
this
.
FrmComponentList_Shown
);
this
.
groupBox1
.
ResumeLayout
(
false
);
this
.
groupBox2
.
ResumeLayout
(
false
);
this
.
groupBox2
.
PerformLayout
();
this
.
groupInfo
.
ResumeLayout
(
false
);
this
.
groupInfo
.
PerformLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
dgvList
)).
EndInit
();
this
.
ResumeLayout
(
false
);
}
#
endregion
private
System
.
Windows
.
Forms
.
GroupBox
groupBox1
;
private
System
.
Windows
.
Forms
.
Button
btnBack
;
private
System
.
Windows
.
Forms
.
DataGridView
dgvList
;
private
System
.
Windows
.
Forms
.
GroupBox
groupInfo
;
private
System
.
Windows
.
Forms
.
TextBox
txtDes
;
private
System
.
Windows
.
Forms
.
Label
label2
;
private
System
.
Windows
.
Forms
.
TextBox
txtName
;
private
System
.
Windows
.
Forms
.
Label
label1
;
private
System
.
Windows
.
Forms
.
Button
btnSave
;
private
System
.
Windows
.
Forms
.
Button
btnDownLoad
;
private
System
.
Windows
.
Forms
.
TextBox
txtPartNum
;
private
System
.
Windows
.
Forms
.
Label
label7
;
private
System
.
Windows
.
Forms
.
TextBox
txtFengzhuang
;
private
System
.
Windows
.
Forms
.
Label
label5
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox2
;
private
System
.
Windows
.
Forms
.
Button
button1
;
private
System
.
Windows
.
Forms
.
TextBox
txtBomFilePath
;
private
System
.
Windows
.
Forms
.
Button
btnBomImport
;
private
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
Column_PN
;
private
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
Column_Name
;
private
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
Column_F
;
private
System
.
Windows
.
Forms
.
DataGridViewTextBoxColumn
Column_Des
;
private
System
.
Windows
.
Forms
.
DataGridViewLinkColumn
Column_Del
;
private
System
.
Windows
.
Forms
.
Button
btnNew
;
}
}
\ No newline at end of file
\ No newline at end of file
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.cs
0 → 100644
查看文件 @
5409354
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Data
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Windows.Forms
;
using
System.IO
;
using
OnlineStore.LoadCSVLibrary
;
using
OnlineStore.Common
;
namespace
OnlineStore.AutoCountClient
{
internal
partial
class
FrmComponentList
:
FrmBase
{
public
static
FrmComponentList
instance
=
new
FrmComponentList
();
private
FrmComponentList
()
{
InitializeComponent
();
}
private
void
FrmPointType_Load
(
object
sender
,
EventArgs
e
)
{
}
private
DataGridViewRow
SetRowInfo
(
DataGridViewRow
view
,
ComponetInfo
com
)
{
if
(
view
==
null
)
{
view
=
new
DataGridViewRow
();
view
.
CreateCells
(
dgvList
);
}
view
.
Cells
[
Column_PN
.
Index
].
Value
=
com
.
PartNum
.
ToString
();
view
.
Cells
[
this
.
Column_Name
.
Index
].
Value
=
com
.
ProductName
.
ToString
();
view
.
Cells
[
Column_F
.
Index
].
Value
=
com
.
Encapsulations
.
ToString
();
view
.
Cells
[
this
.
Column_Des
.
Index
].
Value
=
com
.
Describe
.
ToString
();
return
view
;
}
private
void
btnSave_Click
(
object
sender
,
EventArgs
e
)
{
////if (groupInfo.Text.StartsWith("新增"))
////{
//// //AddCom();
////}
////else
//{
// if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0)
// {
// int rowIndex = dgvList.SelectedRows[0].Index;
// DataGridViewRow row = dgvList.Rows[rowIndex];
// ComponetInfo obj = getRowPointInfo(row);
// if (obj == null)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请选择元器件!"));
// return;
// }
// if (cmbPositionNumList.SelectedIndex < 0)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition,"请选择元器件位置!"));
// cmbPositionNumList.Focus();
// return;
// }
// TSAVPosition position = (TSAVPosition)cmbPositionNumList.SelectedItem;
// obj.ComponentName = FormUtil.getValue(txtName);
// obj.ComponentDes = FormUtil.getValue(txtDes);
// obj.ComCount = FormUtil.GetIntValue(txtCount);
// obj.Notes = FormUtil.getValue(txtNotes);
// obj.PartNum = FormUtil.getValue(txtPartNum);
// obj.PositionNum = position.PositionNum;
// if (obj.ComponentName.Equals(""))
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName,"请输入元器件名称!"));
// txtName.Focus();
// return;
// }
// //if (obj.PositionNum.Equals(""))
// //{
// // MessageBox.Show("请输入元器件所在位置!");
// // this.txtPosition.Focus();
// // return;
// //}
// if (obj.ComCount<=0)
// {
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum,"请输入元器件数量!"));
// txtCount.Focus();
// return;
// }
// CSVReaderBomManager.SaveComponet(cmbList.Text, obj);
// //ComponentManager.Update(obj);
// SetRowInfo(dgvList.Rows[rowIndex], obj);
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComSaveOk,"元器件【{0}】保存成功!", obj.PartNum + "-" + obj.ComponentName ));
// groupInfo.Text = ResourceCulture.GetString(ResourceCulture.ComInfo,"元器件【{0}】的基本信息",obj.PartNum + "-" + obj.ComponentName);
// }
//}
}
private
void
btnDel_Click
(
object
sender
,
EventArgs
e
)
{
if
(
dgvList
.
SelectedRows
!=
null
&&
dgvList
.
SelectedRows
.
Count
>
0
)
{
int
rowIndex
=
dgvList
.
SelectedRows
[
0
].
Index
;
DeleteCom
(
rowIndex
);
}
}
private
ComponetInfo
getRowPointInfo
(
DataGridViewRow
row
)
{
ComponetInfo
point
=
new
ComponetInfo
();
try
{
if
(
row
.
Cells
[
Column_PN
.
Name
].
Value
==
null
)
{
return
null
;
}
point
.
PartNum
=
row
.
Cells
[
this
.
Column_PN
.
Name
].
Value
.
ToString
();
point
.
Encapsulations
=
row
.
Cells
[
this
.
Column_F
.
Name
].
Value
.
ToString
();
point
.
ProductName
=
row
.
Cells
[
this
.
Column_Name
.
Name
].
Value
.
ToString
();
point
.
Describe
=
row
.
Cells
[
this
.
Column_Des
.
Name
].
Value
.
ToString
();
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"保存数据出错:"
+
ex
.
ToString
());
return
null
;
}
return
point
;
}
private
void
showDetail
(
int
rowIndex
)
{
DataGridViewRow
row
=
dgvList
.
Rows
[
rowIndex
];
ComponetInfo
obj
=
getRowPointInfo
(
row
);
if
(
obj
==
null
)
{
MessageBox
.
Show
(
"请选择元器件!"
);
return
;
}
txtPartNum
.
Tag
=
obj
;
txtName
.
Text
=
obj
.
ProductName
;
txtDes
.
Text
=
obj
.
Describe
;
txtFengzhuang
.
Text
=
obj
.
Encapsulations
.
ToString
();
txtPartNum
.
Text
=
obj
.
PartNum
;
int
index
=
-
1
;
groupInfo
.
Text
=
"元器件【"
+
obj
.
PartNum
+
"】的基本信息"
;
}
private
void
DeleteCom
(
int
rowIndex
)
{
DataGridViewRow
row
=
dgvList
.
Rows
[
rowIndex
];
ComponetInfo
obj
=
getRowPointInfo
(
row
);
if
(
MessageBox
.
Show
(
"确认要删除元器件【"
+
obj
.
PartNum
+
"】吗?"
,
"提示"
,
MessageBoxButtons
.
OKCancel
,
MessageBoxIcon
.
Question
)
!=
DialogResult
.
OK
)
{
return
;
}
else
{
CSVBomManager
.
RemoveCom
(
obj
);
this
.
dgvList
.
Rows
.
RemoveAt
(
rowIndex
);
MessageBox
.
Show
(
"元器件【"
+
obj
.
PartNum
+
"】删除成功!"
,
"提示"
);
}
}
private
void
btnBack_Click
(
object
sender
,
EventArgs
e
)
{
//this.Close();
this
.
Visible
=
false
;
//FrmMenu.frmMain.Visible = true;
}
private
void
dgvList_CellContentClick
(
object
sender
,
DataGridViewCellEventArgs
e
)
{
if
(
e
.
RowIndex
!=
-
1
&&
e
.
ColumnIndex
>=
0
)
{
string
name
=
this
.
dgvList
.
Columns
[
e
.
ColumnIndex
].
Name
;
if
(
name
.
Equals
(
this
.
Column_Del
.
Name
))
{
DeleteCom
(
e
.
RowIndex
);
}
}
}
private
void
dgvList_SelectionChanged
(
object
sender
,
EventArgs
e
)
{
if
(
dgvList
.
SelectedRows
!=
null
&&
dgvList
.
SelectedRows
.
Count
>
0
)
{
int
rowIndex
=
dgvList
.
SelectedRows
[
0
].
Index
;
showDetail
(
rowIndex
);
}
}
private
void
btnDownLoad_Click
(
object
sender
,
EventArgs
e
)
{
//SaveFileDialog sfd = new SaveFileDialog();
//sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
//sfd.FileName = ResourceCulture.GetString( "元器件库模板");
//sfd.Filter = @"csv|*.csv";
//DialogResult result = sfd.ShowDialog();
//if (result.Equals(DialogResult.OK))
//{
// string filePath = sfd.FileName;
// //if (Directory.Exists(filePath))
// {
// string sourcePath = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.Componet_Template);
// if (File.Exists(filePath))
// {
// File.Delete(filePath);
// }
// //复制文件
// File.Copy(sourcePath, filePath);
// MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave,"模板已保存在:" )+ filePath);
// }
//}
}
private
void
FrmComponentList_FormClosing
(
object
sender
,
FormClosingEventArgs
e
)
{
this
.
Visible
=
false
;
//FrmMenu.frmMain.Visible = true;
e
.
Cancel
=
true
;
}
private
void
FrmComponentList_Shown
(
object
sender
,
EventArgs
e
)
{
}
}
}
RC1266-AutoCountMachine/source/AutoCountClient/FrmComponentList.resx
0 → 100644
查看文件 @
5409354
<?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="Column_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_F.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_Des.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column_Del.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AABZPT3QWT09/1g8PP9YPDz/WDw8/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8
Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1g8Pf9YPD3/WDw9/1k9Pf9ZPT3/WT09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9Pf9YPT3/WD09/1g9
Pf9YPT3/WT09/1k9Pf9ZPT3RWT09/lo+Pv9hRkb/Y0hI/2NHRP9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NG
Q/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9jRkP/Y0ZD/2NGQ/9eQUD/WT09/1w+
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BA
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BAPP9gQDz/YEA8/2BA
PP9gQDz/YEA8/2BAPP9gQDz/YEA8/18/PP9ZPT3/WT09/lg8PP9hRkb/w7m5/9/Z2f/dw6H/3bqI/926
iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926iv/duor/3bqK/926
iv/evIv/l3hh/1U6PP+BTDX/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7pi
K/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7pi
K/+6Yiv/umIr/7piK/+6Yiv/umIr/7piK/+6Yiv/umIr/7tiKv+mWi7/Xz88/1k9Pf9YPDz/Y0hI/97Y
2P///////+e7///bnf//3J7//9ye///cnv//3J7//9ye///cnv//3J7//9ye///cnv//3J7//9ye///c
nv//3J7//9ye///cnv//3J7//96f/6eIa/9UOjz/i1Az/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9Rs
Jv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9Rs
Jv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/1Gwm/9RsJv/VbCX/u2Iq/2BA
PP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Z
m//+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7l
u//+2Zv//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3djY///////+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///+5bv//tmb//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////////5rv//9yd///d
n///3J7//tud//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Tayb/02sm/9Jr
Jv/Sayb/1Gwm/9RsJv/Tayb/0Wsm/85qJ//Rayb/0msm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y
2P//////xa+Z/6yMbP/Do3z/2beI//PQl//+253//9ue///cnv//3Z///9ye//7bnf/+2p3//tqd//7a
nf/+2p3//tqd//7anf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/02sm/9NrJv/UbCb/02sm/9JrJv/Tayb/0msm/89q
J//LaCf/xWYp/8VmKP/Rayb/0Wsm/7BeLP+YVTL/jFE0/4JNNf95STf/rV0t/9NsJv/UbCb/umIr/2BA
PP9YPT3/WDw8/2NISP/e2Nj//v7+/4p2d/9vQjT/eko4/2pHP/+yknH//dmc/7qZdf+pim3/waF7/9i2
iP/10pj//tud//7bnf//3J7//92f///cnv/+253//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/9RsJv/UbCb/0msm/9JrJv/Rayb/zGkn/8ZnKP+/ZCr/t2Er/8Zm
KP/UbCb/vGMq/4hPNP99Szb/dkc2/3BEN/93SDf/yGco/8tpJ/9zRzf/ekMq/5BHH/+aSRn/c0Eu/5hV
Mf/UbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9BqJv+KTjH/pYZq//bT
mf97XE//eUc0/31LN/9qSED/w6J7///bnv+6mXX/o4Vp/72def/Vs4b/89CX//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9BqJv/CZSn/uGEr/65eLf+jWS//pVov/81pJ//Qaib/lVQy/3ZI
N/9yRTb/cUQ0/2VAOP+YVTH/1mwl/6RaL/9sQDL/oEoW/6xMEP+jShT/b0Q2/8RmKf/LaCf/dUc2/69N
D//OUwD/zVIA/4ZFJf+YVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RX
K//WbCX/kFAx/6WHa//205n/f15P/7JeKv/Qaib/gEs0/7iYdv/82Jz/g2RV/3RENP97Sjf/aEY+/7iX
dP//3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+0YCz/bEQ4/29CNP9zQjD/dEIv/2hC
Of/AZCn/zmon/3ZIN/+QRh7/s00N/7tPCP+GRST/kVMz/9ZsJf+kWi//fUQq/8tSAf/OUwD/uE4K/3JF
Nf/EZin/y2gn/3VHNv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/e2Nj//v7+/4t3d/+kVyv/1mwl/49QMf+lh2v/9tOZ/39eT/+yXir/02wm/4NMNP+4mXb/+9ic/4Vm
Vf+qWiz/0Wsm/4ZNMv+sjW///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/qlwu/3NC
L/+7Twn/xVED/7lPCf9xRDT/v2Qq/85qJ/94SDb/qksS/85TAP/NUgD/jEYh/5FTM//WbCX/pFov/31E
Kv/JUgH/zFIA/7dOCv9yRTX/xGYp/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bTmf9/Xk//sl4q/9Nr
Jv+DTDT/uJl2//vYnP+FZlX/qlos/9VsJf+KTzL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/1Gwm/6tcLv95Qy3/yFEC/81SAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tG
If+SUzP/1mwl/6RaL/99RCr/yVIB/8xSAP+3Tgr/ckU1/8RmKf/LaCf/dUc2/65MD//NUgD/y1IA/4VF
Jf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RXK//WbCX/j1Ax/6WH
a//205n/f15P/7JeKv/Tayb/g0w0/7iZdv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hI
Nv+oSxL/zVIA/8xSAP+LRiH/klMz/9ZsJf+kWi//fUQq/8lSAf/MUgD/t04K/3JFNf/EZin/y2gn/3VH
Nv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/e2Nj//v7+/4t3
d/+kVyv/1mwl/49QMf+lh2v/9tOZ/39eT/+yXir/02sm/4NMNP+4mXb/+9ic/4VmVf+qWiz/1Wwl/4pO
Mv+sjm///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xP
CP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/pFov/31EKv/JUgH/zFIA/7dO
Cv9yRTX/xGYp/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3tjY//7+/v+Ld3f/pVgr/9ZsJf+PUDH/pYdr//bTmf9/Xk//sl4q/9NrJv+DTDT/uJl2//vY
nP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tc
Lv94Qy3/x1EC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tGIf+SUzP/1mwl/6Ra
L/99RCr/yVIB/8xSAP+3Tgr/ckU1/8RmKf/LaCf/dUc2/69MD//NUgD/zVIA/4ZFJf+YVjL/1Gwm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/inZ2/5xULP/Sayb/kFAx/6WHa//205n/f15P/7Je
Kv/Tayb/g0w0/7iZdv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hINv+oSxL/zVIA/8xS
AP+LRiH/klMz/9ZsJf+kWi//fUQq/8lSAf/NUgD/uE4K/3JFNf/EZin/y2gn/3VHNv+qTBH/wFAG/7NN
DP93Qiz/mFUx/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj//////6SPhv9wTED/fkw3/2xB
Nf+lhmr/9tOZ/35eT/+zXir/1Wwl/4NNNP+4mXb/+9ic/4VmVf+qWiz/1Wwl/4pOMv+sjm///9ye///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xPCP9xRDT/v2Qq/85q
J/94SDb/qEsS/81SAP/NUgD/jEYh/5FTM//WbCX/pFov/3xEKv/GUQP/w1AE/6hLEv9vRDb/xGYp/8xp
J/9zRzj/bkEy/3JDM/9zRTb/ekk2/7FeLP/TbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///33rb/372K/7+fev+cfWX/y6l///bTmf99X1H/hEsx/6tbLP95SDX/uJl2//zYnP+FZlX/qlss/9Vs
Jf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tcLv94Qy3/x1EC/8xS
AP+8Twj/cUQ0/79kKv/Oaif/eEg2/6lLEv/NUgD/x1EC/4dFJP+RUzP/1mwl/6VaL/9lPzf/eUMs/3ND
Mf9wRDX/gEw1/8loKP/Rayb/sV8s/6xdLv+7Yyv/xmco/85pJ//Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////+e8///env//3p///tud//7anf/82Zz/zqyB/55/Zv+BYlP/a01F/8Kh
ev/715v/g2VV/6BWLf/Raib/ik8y/6yNb///3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Rs
Jv+rXC7/eUMt/8lSAv/NUgD/uU8J/3BDNP+/ZCr/zmon/3ZIN/98Qyn/hEUm/3pELf9tQzb/n1gw/9Rs
Jv/BZCn/nFcw/6dbL/+2YSz/wmUp/8xpJ//Sayb/0msm/9RsJv/UbCb/1Gwm/9RsJv/UbCb/02sm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj//////9S9ov/KqH7/6seR//vXm///257//tqd///c
nv/+253/9dKY/+XCjv/00Zf//Nic/6ODaP90UET/fk04/2lBN/+tjW7//9ye///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/UbCb/q1wu/2tAM/+TRx3/h0Uk/3hDLf9wRTj/w2Up/9FrJv+gWC//klMz/6JZ
MP+xXy3/vmQq/81pJ//Sayb/02sm/9RsJv/UbCb/1Gwm/9RsJv/TbCb/0msm/9JrJv/Sayb/zWkn/8Rm
Kf+4YSv/rF0t/8NlKf/Tayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+MeHj/Z0I5/3dV
SP+Ob1z/1bOF///bnv/82Jz//dqd///dn///3Z///tue//7anf/41Zr/5cKP/8enf/+oiGv/1bOF///b
nv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/02sm/7tiKv+ATDX/ilA0/5pWMf+qXC7/vWMq/9Bq
Jv/Sayb/02sm/9NsJv/UbCb/1Gwm/9RsJv/Tayb/0msm/9NrJv/TbCb/0Wsm/8xpJ//DZSj/wWQp/9Fr
Jv/Paif/llQx/3dIN/9xRTb/cUMz/2M/OP+cVzD/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y
2P/+/v7/i3d3/55VLP+6YSr/eUYz/6WGav/82Jz/p4dq/5p7Yf/CoXf/48CN//rWm//+2p3//9ue///d
n///3Z///9ye//7bnf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0Gom/9Jr
Jv/UbCb/1Gwm/9NsJv/Sayb/0msm/9NsJv/UbCb/02sm/89qJ//JaCj/zmkn/9NrJv/CZSn/lVQx/4NN
NP90Rzz/ZkJF/3JGOv/HZyj/y2gn/3JGN/+TRx3/tU4M/79QBv+CRCb/mVYy/9RsJv/UbCb/umIr/2BA
PP9YPT3/WDw8/2NISP/e2Nj//v7+/4t3d/+lWCv/120l/5BRMP+lh2v/9tKY/3lcU/9fSXz/Y0xz/2pP
Uf/KqH7//9ye/+3Kk//syZP//Nic///cnv/+257//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9RsJv/UbCb/1Gwm/9NrJv/Rayb/0msm/9FrJv+3YSv/m1cx/4tQNP99Szb/cEU4/6FY
L//WbCX/plot/1c7Wf9SNaX/UjTB/1I0uf9nQkf/xWYo/8toJ/91Rzb/sE0P/85TAP/MUgD/hUUl/5lW
Mv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bT
mP97Xlf/cGHO/3lu+v9iS3r/uZhy//3Znf+Sc17/clNK/5FzXv+3l3T/68iS///bnf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/85qJ/+7Yir/q10u/5tWMf+KUDT/i1A0/8hnKP/Oaif/eUk3/3VC
Lf+PRx//oEoW/3tDKv+RUzP/1mwl/6ZaK/9XOXf/UTH0/1Ex+f9RM9j/aEJJ/8VmKP/LaCf/dUc2/65M
D//NUgD/y1IA/4VFJf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6RX
K//WbCX/j1Ax/6WHa//205j/e15X/3Bhzv96cP//ZE6B/7qZcv/72Jz/hGVV/5JQL/+aVC//a0M4/7KS
cf//3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+yXyz/aUI4/3ZDLv+DRSb/iEUj/2pC
N/+/ZCr/zmon/3hINv+oSxL/zlMA/85TAP+MRiH/kVMz/9ZsJf+mWiv/Vzl2/1Ex8f9RMfb/UTPW/2hC
Sf/FZij/y2gn/3VHNv+uTA//zVIA/8tSAP+FRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NI
SP/e2Nj//v7+/4t3d/+kVyv/1mwl/49QMf+lh2v/9tOY/3teV/9wYc7/enD//2ROgf+6mXL/+9ic/4Vm
Vf+rWyv/120l/4pOMv+sjW///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/qlwu/3ZD
Lv/DUAT/zFIA/71PCP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/plor/1c5
dv9RMfH/UTH2/1Ez1v9oQkn/xWYo/8toJ/91Rzb/rkwP/81SAP/LUgD/hUUl/5lWMv/UbCb/1Gwm/7pi
K/9gQDz/WD09/1g8PP9jSEj/3tjY//7+/v+Ld3f/pFcr/9ZsJf+PUDH/pYdr//bTmP97Xlf/cGHO/3pw
//9kToH/uply//vYnP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/1Gwm/6tcLv94Qy3/yFEC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tG
If+SUzP/1mwl/6ZaK/9XOXb/UTHx/1Ex9v9RM9b/aEJJ/8VmKP/LaCf/dUc2/65MD//NUgD/y1IA/4VF
Jf+ZVjL/1Gwm/9RsJv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/97Y2P/+/v7/i3d3/6VYK//WbCX/j1Ax/6WH
a//205j/e15X/3Bhzv96cP//ZE6B/7qZcv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eH
av9UOjz/i1A0/9NrJv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hI
Nv+oSxL/zVIA/8xSAP+LRiH/klMz/9ZsJf+mWiv/Vzl2/1Ex8f9RMfb/UTPW/2hCSf/FZij/y2gn/3VH
Nv+uTA//zVIA/8xSAP+GRSX/mVYy/9RsJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/e2Nj//v7+/4p3
d/+iViv/120l/5BRMf+lh2v/9tOY/3teV/9wYc7/enD//2ROgf+6mXL/+9ic/4VmVf+qWiz/1Wwl/4pO
Mv+sjm///9ye///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xP
CP9xRDT/v2Qq/85qJ/94SDb/qEsS/81SAP/MUgD/i0Yh/5JTM//WbCX/plor/1c5dv9RMfH/UTH2/1Ez
1v9oQkn/xWYo/8toJ/91Rzb/r00P/8xSAP/CUAT/fkMo/5hVMv/UbCb/1Gwm/7piK/9gQDz/WD09/1g8
PP9jSEj/3tjY//////+YhH//b0Q3/5ZTL/9+STP/podq//bTmP97Xlf/cGHO/3pw//9kToH/uply//vY
nP+FZlX/qlos/9VsJf+KTjL/rI5v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tc
Lv94Qy3/x1EC/8xSAP+8Twj/cUQ0/79kKv/Oaif/eEg2/6hLEv/NUgD/zFIA/4tGIf+SUzP/1mwl/6Za
K/9XOXb/UTHz/1Ex+f9RMtj/aEJJ/8VmKP/LaCf/ckY3/4FEJv+BRCf/dEMw/29FN/+qXC7/1Gwm/9Rs
Jv+6Yiv/YEA8/1g9Pf9YPDz/Y0hI/93Y2P//////7tWx/8CfeP+PcV3/akxG/66Ob//20pj/e15X/29g
y/97cP//ZE6B/7qZcv/72Jz/hWZV/6paLP/VbCX/ik4y/6yOb///3J7//9ye/6eHav9UOjz/i1A0/9Nr
Jv/Sayb/0msm/9RsJv+rXC7/eEMt/8dRAv/MUgD/vE8I/3FENP+/ZCr/zmon/3hINv+oSxL/zVIA/8xS
AP+MRiH/kVMz/9ZsJf+mWiz/Vzpy/1Ey2v9SNMX/UjaY/2hCQv/FZij/z2on/5FSMv+ITzT/n1gw/7Rg
LP/FZin/0Gom/9JrJv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d2Nj////////mu///3J3/+9eb/+XC
jv/uy5T/99OZ/4VnWP9fSG7/aliu/2BIcP+6mXP//Nic/4VmVf+qWiz/1Wwl/4pOMv+sjm///9ye///c
nv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/UbCb/q1wu/3hDLf/HUQL/zFIA/7xPCP9xRDT/v2Qq/85q
J/94SDb/qkwS/85TAP/JUgH/h0Uk/5FTM//WbCX/qFst/1w+R/9jQFD/cUY//4RNNP+iWS//zmkn/9Jr
Jv/Rayb/0msm/9RsJv/UbCb/02sm/9JrJv/Sayb/1Gwm/7piK/9gQDz/WD09/1g8PP9jSEj/3djY////
///+5bv//tmb//7anf//257//9ue//7anf/lwo7/t5Zx/4lrWv9pTUn/waB6//vXm/+FZlX/qlos/9dt
Jf+LTzL/rI1v///cnv//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/1Gwm/6tcLv94Qy3/yFEC/81S
AP+9Twj/cUQ0/79kKv/Oaif/dkg3/4dFI/+MRiH/ekMs/2pBN/+eVzD/1Gwm/8dnKP+vXiz/vmMp/8po
J//Rayb/02wm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9RsJv+6Yiv/YEA8/1g9
Pf9YPDz/Y0hI/93Y2P///////uW7//7Zm//+2p3//tqd//7anf/+2p3//9ue///cnv/51Zr/5MKO//PQ
l//615v/imxa/3lHNP+oWiz/gUoz/6yNb///3J7//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9Rs
Jv+rXC7/eEMt/8BQBv+5Twn/nkkX/2tCN/+/ZCr/0Gom/4xQM/96Sjf/j1Iz/6VaL/+6Yiv/zWkn/9Jr
Jv/Tayb/1Gwm/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/UbCb/umIr/2BAPP9YPT3/WDw8/2NISP/d19j///////7lu//+2Zv//tqd//7anf/+2p3//tqd//7a
nf/+2p3//tqd///cnv/+253//tqd/+C+jP+sjW7/g2RU/2ZHQf+zk3H//9ye///cnv+nh2r/VDo8/4tQ
NP/Tayb/0msm/9JrJv/UbCb/rF0t/2M/OP90QzD/cUQ1/3dINv+QUjP/ymgo/9NrJv/NaSf/zmon/9Nr
Jv/UbCb/02wm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Wwl/7hhK/9gQDz/WT09/1k9Pf9cQED/mYiI/9nS0f/537X//9yd///b
nv/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7//9ye//XSmP/buYn/7MmS///b
nf//3J7/p4dq/1Q6PP+LUDT/02sm/9JrJv/Sayb/02sm/8VmKf+hWS//r14t/8BkKv/MaSf/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf95STf/Wz49/1k9Pf9ZPT3UWT09/Fc7
O/9jSUn/iW1e/8Ggef/typP//tue///cnv/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7a
nf/+253//9ye//7bnv/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Tayb/1Gwm/9Rs
Jv/Tayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1k9
PfhZPT3KWT09IFk9PWhZPT2+WDw881c7O/9bPz7/dVdN/6iIa//duor/+tab///cnv//257//tqd//7a
nf/+2p3//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9Jr
Jv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1HWT09GVk9PQBZPT0AWT09DVk9PURZPT2aWT094Vc7PP5XOzz/ZklE/49w
XP/HpX3/8c2V///cnv//3J7//tqd//7anf/+2p3//tqd//7anf/+2p3//tqd//7anf//3J7/p4dq/1Q6
PP+LUDT/02sm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAABZPT0AWT09A1k9
PSZZPT1zWT09xlg8PPdXOzz/XEA//3lcUP+ujm7/4b+M//vYnP//3J7//9ud//7anf/+2p3//tqd//7a
nf/+2p3//9ye/6eHav9UOjz/i1A0/9NrJv/Sayb/0msm/9JrJv/Sayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWzs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABZPT0AWT8/AFk9PRFZPT1NWT09o1k9PedXOzz+WDw8/2lMRv+VdmD/zKuA//PQ
l///3J7//9ue//7anf/+2p3//tqd///cnv+nh2r/VDo8/4tQNP/Tayb/0msm/9JrJv/Sayb/0msm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZPT0AWT09AFk9PQVZPT0tWT09fVk9
Pc5YPDz5Vzs8/15CQP9+YFP/tJRy/+XDj//92Zz//9ye//7bnf//3J7/p4dq/1Q6PP+LUDT/02sm/9Jr
Jv/Sayb/0msm/9NrJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZXPj4AWzw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAWT09AFo9PQBZPT0VWT09Vlk9Pa1ZPT3sVzs8/1k9Pf9sT0j/m3tj/9Kwg//20pj//96g/6eI
a/9UOjz/i1A0/9RsJv/UbCb/1Gwm/89qJ//EZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZXPT0AWz09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWz8/AFk9PQBZPT0HWT09NFk9PYZZPT3VWDw8+1c7
PP9gREH/g2VV/7ybd/+YeGH/VTo8/4hPNP/FZin/sF4s/5dVMf9+Szb/aUM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWj09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFk9
PQBZPT0BWT09Glk9PWBZPT22WDw98Fc7PP9aPj7/XkJA/1g9Pf9kQTv/akM6/10+PP9YPT3/Vzw9/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFo+PgBZPT0AWT09Clk9PTxZPT2QWT0921k9Pf1ZPT3/WD09/1g9
PfdZPT3eWT09s1k9PX1ZPT1IWT09Hlk9PQZZPT0AWT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZPT0AWT09Alk9
PSBZPT1qWT09oFk9PX5ZPT1IWT09Hlk9PQZYPj4AWjw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABZPT0AWT09AFk9PQFZPDwAWjs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAH8AAAAAAA
AH/+AAAAAAAH//+AAAAAAH///+AAAAAH/////AAAAH//////AAAH///////gAH////////gH////////
/j////////////////////////////////////////////////8=
</value>
</data>
</root>
\ No newline at end of file
\ No newline at end of file
RC1266-AutoCountMachine/source/AutoCountClient/FrmLearning.cs
查看文件 @
5409354
...
@@ -157,7 +157,7 @@ namespace OnlineStore.AutoCountClient
...
@@ -157,7 +157,7 @@ namespace OnlineStore.AutoCountClient
btnTest
.
Enabled
=
isShowBtn
;
btnTest
.
Enabled
=
isShowBtn
;
btnNext
.
Enabled
=
isShowBtn
;
btnNext
.
Enabled
=
isShowBtn
;
btnEnd
.
Enabled
=
isShowBtn
;
btnEnd
.
Enabled
=
true
;
}
}
...
@@ -214,10 +214,20 @@ namespace OnlineStore.AutoCountClient
...
@@ -214,10 +214,20 @@ namespace OnlineStore.AutoCountClient
private
bool
IsSave
=
false
;
private
bool
IsSave
=
false
;
private
void
btnSaveParam_Click
(
object
sender
,
EventArgs
e
)
private
void
btnSaveParam_Click
(
object
sender
,
EventArgs
e
)
{
{
SaveCurrParam
();
DialogResult
result
=
MessageBox
.
Show
(
"当前第["
+
(
currIndex
+
1
)
+
"]张图片,还剩余["
+
(
ImageList
.
Count
-
currIndex
-
1
)
+
"]张图片未选择算法,是否结束学习?"
,
"提示"
,
MessageBoxButtons
.
YesNo
,
MessageBoxIcon
.
Asterisk
);
if
(
result
.
Equals
(
DialogResult
.
Yes
))
{
ParamManager
.
SaveMapToFile
();
ParamManager
.
SaveMapToFile
();
IsSave
=
true
;
IsSave
=
true
;
this
.
Close
();
this
.
Close
();
}
}
else
{
return
;
}
}
private
void
btnNext_Click
(
object
sender
,
EventArgs
e
)
private
void
btnNext_Click
(
object
sender
,
EventArgs
e
)
{
{
...
...
RC1266-AutoCountMachine/source/AutoCountClient/FrmRobotMain.cs
查看文件 @
5409354
...
@@ -884,7 +884,7 @@ namespace OnlineStore.AutoCountClient
...
@@ -884,7 +884,7 @@ namespace OnlineStore.AutoCountClient
private
void
元器件学习
ToolStripMenuItem_Click
(
object
sender
,
EventArgs
e
)
private
void
元器件学习
ToolStripMenuItem_Click
(
object
sender
,
EventArgs
e
)
{
{
string
backPath
=
ParamManager
.
NoConfigPath
;
string
backPath
=
ParamManager
.
NoConfigPath
;
folderBrowserDialog1
.
Description
=
"请选择需要学习的图片文件夹"
;
if
(!
Directory
.
Exists
(
backPath
))
if
(!
Directory
.
Exists
(
backPath
))
{
{
Directory
.
CreateDirectory
(
backPath
);
Directory
.
CreateDirectory
(
backPath
);
...
...
RC1266-AutoCountMachine/source/AutoCountClient/记录.txt
查看文件 @
5409354
...
@@ -96,3 +96,9 @@ data=1,IFneed=需要
...
@@ -96,3 +96,9 @@ data=1,IFneed=需要
点料接口修改。
点料接口修改。
去掉取码气缸前进->>后退动作。
去掉取码气缸前进->>后退动作。
IO_Type.TakeCode_Back, IO_Type.TakeCode_Forward
IO_Type.TakeCode_Back, IO_Type.TakeCode_Forward
20200817
增加学习界面。
吸盘放标签时等待3秒再离开。
未找到配置暂时不NG.
\ No newline at end of file
\ No newline at end of file
RC1266-AutoCountMachine/source/Common/Setting_Init.cs
查看文件 @
5409354
...
@@ -88,5 +88,13 @@ namespace OnlineStore.Common
...
@@ -88,5 +88,13 @@ namespace OnlineStore.Common
public
static
string
DataPath
=
"DataPath"
;
public
static
string
DataPath
=
"DataPath"
;
public
static
string
ResultMinCount
=
"ResultMinCount"
;
public
static
string
ResultMinCount
=
"ResultMinCount"
;
public
static
string
ComPath_Config
=
"ComPath_Config"
;
/// <summary>
/// 贴标签时,放下标签后等待的时间
/// </summary>
public
static
string
LabelWaitMS
=
"LabelWaitMS"
;
}
}
}
}
RC1266-AutoCountMachine/source/DeviceLibrary/XRAY/pnDetailedList.csv
查看文件 @
5409354
此文件的差异太大,无法显示。
RC1266-AutoCountMachine/source/DeviceLibrary/XRAY/料号清单(1).xlsx
0 → 100644
查看文件 @
5409354
此文件类型无法预览
RC1266-AutoCountMachine/source/DeviceLibrary/bean/OutputEquip.cs
查看文件 @
5409354
...
@@ -30,7 +30,7 @@ namespace OnlineStore.DeviceLibrary
...
@@ -30,7 +30,7 @@ namespace OnlineStore.DeviceLibrary
public
string
WorkShelfId
=
""
;
public
string
WorkShelfId
=
""
;
public
bool
AutoSendShelfOut
=
false
;
public
bool
AutoSendShelfOut
=
false
;
private
int
LabelWaitMS
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
LabelWaitMS
);
public
OutputEquip
(
string
cid
,
OutputEquip_Config
config
)
public
OutputEquip
(
string
cid
,
OutputEquip_Config
config
)
{
{
baseConfig
=
config
;
baseConfig
=
config
;
...
@@ -56,6 +56,13 @@ namespace OnlineStore.DeviceLibrary
...
@@ -56,6 +56,13 @@ namespace OnlineStore.DeviceLibrary
moveAxisArray
=
new
AxisBean
[]
{
MoveXAxis
,
MoveZAxis
};
moveAxisArray
=
new
AxisBean
[]
{
MoveXAxis
,
MoveZAxis
};
labelAxisArray
=
new
AxisBean
[]
{
LabelXAxis
,
LabelYAxis
,
LabelZAxis
,
LabelRAxis
};
labelAxisArray
=
new
AxisBean
[]
{
LabelXAxis
,
LabelYAxis
,
LabelZAxis
,
LabelRAxis
};
if
(
LabelWaitMS
<
1000
)
{
LabelWaitMS
=
3000
;
ConfigAppSettings
.
SaveValue
(
Setting_Init
.
LabelWaitMS
,
LabelWaitMS
);
LogUtil
.
info
(
Name
+
" 初始化并保存 LabelWaitMS="
+
LabelWaitMS
);
}
}
}
public
override
bool
StartRun
()
public
override
bool
StartRun
()
...
...
RC1266-AutoCountMachine/source/DeviceLibrary/bean/OutputEquip_Partial.cs
查看文件 @
5409354
...
@@ -489,9 +489,9 @@ namespace OnlineStore.DeviceLibrary
...
@@ -489,9 +489,9 @@ namespace OnlineStore.DeviceLibrary
else
if
(
SecMoveInfo
.
IsStep
(
StepEnum
.
OL15_ZToP3
))
else
if
(
SecMoveInfo
.
IsStep
(
StepEnum
.
OL15_ZToP3
))
{
{
SecMoveInfo
.
NextMoveStep
(
StepEnum
.
OL16_Nozzle_Stop
);
SecMoveInfo
.
NextMoveStep
(
StepEnum
.
OL16_Nozzle_Stop
);
SecWorkLog
(
"贴标: 放标签到料盘,等待
1S"
);
SecWorkLog
(
"贴标: 放标签到料盘,等待
"
+
LabelWaitMS
);
IOMove
(
IO_Type
.
Nozzle_Work
,
IO_VALUE
.
LOW
);
IOMove
(
IO_Type
.
Nozzle_Work
,
IO_VALUE
.
LOW
);
SecMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
1000
));
SecMoveInfo
.
WaitList
.
Add
(
WaitResultInfo
.
WaitTime
(
LabelWaitMS
));
}
}
else
if
(
SecMoveInfo
.
IsStep
(
StepEnum
.
OL16_Nozzle_Stop
))
else
if
(
SecMoveInfo
.
IsStep
(
StepEnum
.
OL16_Nozzle_Stop
))
{
{
...
...
RC1266-AutoCountMachine/source/DeviceLibrary/bean/X_RAY_Equip_Partial.cs
查看文件 @
5409354
...
@@ -348,6 +348,10 @@ namespace OnlineStore.DeviceLibrary
...
@@ -348,6 +348,10 @@ namespace OnlineStore.DeviceLibrary
string
NgMsg
=
""
;
string
NgMsg
=
""
;
int
count
=
0
;
int
count
=
0
;
CountParam
lastParam
=
ParamManager
.
GetParamByCode
(
Work_ReelInfo
.
WareCode
);
CountParam
lastParam
=
ParamManager
.
GetParamByCode
(
Work_ReelInfo
.
WareCode
);
if
(
lastParam
==
null
)
{
lastParam
=
new
CountParam
(
""
,
ThresholdValue
,
3
);
}
if
(
lastParam
!=
null
)
if
(
lastParam
!=
null
)
{
{
string
fileP
=
path1_tif
+
@"\"
+
lastFileName
;
string
fileP
=
path1_tif
+
@"\"
+
lastFileName
;
...
...
RC1266-AutoCountMachine/source/LoadCVSLibrary/LoadCSVLibrary.csproj
查看文件 @
5409354
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
</Reference>
</Reference>
<Reference Include="System" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.CSharp" />
...
@@ -55,6 +56,7 @@
...
@@ -55,6 +56,7 @@
<Compile Include="storeConfig\config\XRay_Config.cs" />
<Compile Include="storeConfig\config\XRay_Config.cs" />
<Compile Include="storeConfig\config\AIO_Type.cs" />
<Compile Include="storeConfig\config\AIO_Type.cs" />
<Compile Include="CSVAttribute.cs" />
<Compile Include="CSVAttribute.cs" />
<Compile Include="storeConfig\CSVBomManager.cs" />
<Compile Include="storeConfig\CSVConfigReader.cs" />
<Compile Include="storeConfig\CSVConfigReader.cs" />
<Compile Include="CSVReaderBase.cs" />
<Compile Include="CSVReaderBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
...
...
RC1266-AutoCountMachine/source/LoadCVSLibrary/storeConfig/CSVBomManager.cs
0 → 100644
查看文件 @
5409354
using
OnlineStore.Common
;
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Reflection
;
using
System.Text
;
using
System.Windows.Forms
;
namespace
OnlineStore.LoadCSVLibrary
{
public
class
CSVBomManager
:
CSVReaderBase
{
public
static
Dictionary
<
string
,
ComponetInfo
>
allComMap
=
new
Dictionary
<
string
,
ComponetInfo
>();
public
static
List
<
ComponetInfo
>
GetComList
()
{
return
new
List
<
ComponetInfo
>(
allComMap
.
Values
);
}
public
static
bool
LoadAllCom
()
{
string
fileName
=
getFilePath
();
if
(!
Directory
.
Exists
(
fileName
))
{
return
false
;
}
try
{
string
bomName
=
Path
.
GetFileNameWithoutExtension
(
fileName
);
//-->BenXHCMS
List
<
ComponetInfo
>
list
=
ReadFile
(
fileName
);
Dictionary
<
string
,
ComponetInfo
>
map
=
new
Dictionary
<
string
,
ComponetInfo
>();
foreach
(
ComponetInfo
com
in
list
)
{
if
(
com
==
null
||
com
.
PartNum
==
null
||
com
.
Encapsulations
==
null
)
{
continue
;
}
if
(
map
.
ContainsKey
(
com
.
PartNum
))
{
LogUtil
.
error
(
"元器件库【"
+
bomName
+
"】【"
+
com
.
PartNum
+
"】重复"
);
}
else
{
map
.
Add
(
com
.
PartNum
,
com
);
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"加载出错:"
+
ex
.
ToString
());
return
false
;
}
return
true
;
}
public
static
string
getFilePath
()
{
string
appPath
=
Application
.
StartupPath
;
string
fileName
=
appPath
+
ConfigAppSettings
.
GetValue
(
Setting_Init
.
ComPath_Config
);
return
fileName
;
}
/// <summary>
/// 添加一个csv文件的数据到位置集合中
/// </summary>
/// <param name="filePath">cvs文件路径+文件名</param>
/// <returns></returns>
public
static
List
<
ComponetInfo
>
ReadFile
(
string
filePath
)
{
System
.
Type
type
=
typeof
(
ComponetInfo
);
List
<
ComponetInfo
>
comList
=
new
List
<
ComponetInfo
>();
Dictionary
<
string
,
string
>
proTitleMap
=
getProAttributeMap
(
typeof
(
ComponetInfo
));
List
<
string
>
cvsTitleList
=
new
List
<
string
>(
proTitleMap
.
Values
);
List
<
string
>
propertyList
=
new
List
<
string
>(
proTitleMap
.
Keys
);
string
[]
lines
=
ReadCSVFile
(
filePath
);
int
index
=
0
;
Dictionary
<
string
,
int
>
titleIndex
=
new
Dictionary
<
string
,
int
>();
foreach
(
var
line
in
lines
)
{
var
array
=
line
.
Split
(
Spilt_Char
);
if
(
index
==
0
)
{
titleIndex
=
GetTitleIndex
(
line
,
cvsTitleList
);
}
else
{
try
{
if
(
array
.
Length
>=
titleIndex
.
Count
)
{
if
(
array
.
Length
>
0
&&
array
[
0
].
Equals
(
""
))
{
continue
;
}
var
bllIns
=
type
.
Assembly
.
CreateInstance
(
type
.
FullName
);
//取得属性集合
PropertyInfo
[]
props
=
type
.
GetProperties
();
int
listIndex
=
0
;
foreach
(
string
key
in
cvsTitleList
)
{
if
(
titleIndex
.
ContainsKey
(
key
))
{
int
titIndex
=
titleIndex
[
key
];
string
value
=
array
[
titIndex
];
string
proName
=
propertyList
[
listIndex
];
PropertyInfo
prop
=
props
.
First
(
c
=>
c
.
Name
==
proName
);
//获取同名属性
if
(
prop
!=
null
)
{
string
typeName
=
prop
.
PropertyType
.
Name
;
//判断值是否为空
if
(
value
.
Equals
(
""
)
&&
(
typeName
.
ToUpper
().
Equals
(
"INT32"
)
||
typeName
.
ToUpper
().
Equals
(
"DOUBLE"
)))
{
value
=
"0"
;
}
//如果属性存在
prop
.
SetValue
(
bllIns
,
Convert
.
ChangeType
(
value
,
prop
.
PropertyType
),
null
);
//赋值****在这里需要考虑类型问题
}
}
listIndex
++;
}
comList
.
Add
((
ComponetInfo
)
bllIns
);
}
else
{
LogUtil
.
error
(
"读取csv,index="
+
index
+
",数据格式不匹配!,line="
+
line
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"CSV 读取行【"
+
line
+
"】行转换失败"
);
}
}
index
++;
}
return
comList
;
}
public
static
bool
SaveComponet
(
ComponetInfo
com
)
{
if
(!
allComMap
.
ContainsKey
(
com
.
PartNum
))
{
return
false
;
}
System
.
Type
type
=
typeof
(
ComponetInfo
);
Dictionary
<
string
,
string
>
proTitleMap
=
getProAttributeMap
(
typeof
(
ComponetInfo
));
List
<
string
>
cvsTitleList
=
new
List
<
string
>(
proTitleMap
.
Values
);
List
<
string
>
propertyList
=
new
List
<
string
>(
proTitleMap
.
Keys
);
int
IdIndex
=
propertyList
.
IndexOf
(
"PartNum"
);
int
csvIndex
=
-
1
;
string
filePath
=
getFilePath
();
int
idIndex
=
propertyList
.
IndexOf
(
"PartNum"
);
string
[]
lines
=
ReadCSVFile
(
filePath
);
int
index
=
0
;
Dictionary
<
string
,
int
>
titleIndex
=
new
Dictionary
<
string
,
int
>();
foreach
(
var
line
in
lines
)
{
var
array
=
line
.
Split
(
','
);
if
(
index
==
0
)
{
titleIndex
=
GetTitleIndex
(
line
,
cvsTitleList
);
}
else
{
if
(
array
.
Length
==
titleIndex
.
Count
)
{
if
(
csvIndex
<
0
)
{
csvIndex
=
titleIndex
[
cvsTitleList
[
idIndex
]];
}
string
value
=
array
[
csvIndex
];
if
(
value
.
Equals
(
com
.
PartNum
))
{
//更新缓存
allComMap
.
Remove
(
com
.
PartNum
);
allComMap
.
Add
(
com
.
PartNum
,
com
);
string
newValue
=
ObjToString
(
com
,
titleIndex
,
proTitleMap
);
lines
[
index
]
=
newValue
;
return
WriteCSVFile
(
filePath
,
lines
);
}
}
}
index
++;
}
return
true
;
}
private
static
string
ObjToString
(
ComponetInfo
position
,
Dictionary
<
string
,
int
>
titleIndex
,
Dictionary
<
string
,
string
>
proTitleMap
)
{
//取得属性集合
PropertyInfo
[]
props
=
typeof
(
ComponetInfo
).
GetProperties
();
List
<
string
>
cvsTitleList
=
new
List
<
string
>(
proTitleMap
.
Values
);
List
<
string
>
propertyList
=
new
List
<
string
>(
proTitleMap
.
Keys
);
String
[]
array
=
new
String
[
titleIndex
.
Count
];
foreach
(
string
proName
in
proTitleMap
.
Keys
)
{
PropertyInfo
prop
=
props
.
First
(
c
=>
c
.
Name
==
proName
);
//获取同名属性
if
(
prop
!=
null
)
{
//如果属性存在
string
value
=
prop
.
GetValue
(
position
,
null
).
ToString
();
int
index
=
titleIndex
[
proTitleMap
[
proName
]];
array
[
index
]
=
value
;
}
}
string
newStr
=
""
;
foreach
(
string
str
in
array
)
{
if
(
newStr
.
Equals
(
""
))
{
newStr
=
str
;
}
else
{
newStr
=
newStr
+
Spilt_Char
+
str
;
}
}
return
newStr
;
}
/// <summary>
/// 获取此文件第一行的数据
/// </summary>
private
static
string
GetHeaderString
(
List
<
string
>
cvsValues
)
{
string
newStr
=
""
;
foreach
(
string
str
in
cvsValues
)
{
if
(
newStr
.
Equals
(
""
))
{
newStr
=
str
;
}
else
{
newStr
=
newStr
+
Spilt_Char
+
str
;
}
}
return
newStr
;
}
/// <summary>
/// 增加一个元器件库
/// </summary>
public
static
bool
SaveToFile
()
{
try
{
List
<
ComponetInfo
>
comList
=
new
List
<
ComponetInfo
>();
string
filePath
=
getFilePath
();
System
.
Type
type
=
typeof
(
ComponetInfo
);
Dictionary
<
string
,
string
>
proTitleMap
=
getProAttributeMap
(
typeof
(
ComponetInfo
));
List
<
string
>
cvsTitleList
=
new
List
<
string
>(
proTitleMap
.
Values
);
List
<
string
>
propertyList
=
new
List
<
string
>(
proTitleMap
.
Keys
);
Dictionary
<
string
,
int
>
titleIndexMap
=
new
Dictionary
<
string
,
int
>();
int
titleIndex
=
0
;
foreach
(
string
str
in
cvsTitleList
)
{
titleIndexMap
.
Add
(
str
,
titleIndex
);
titleIndex
++;
}
string
[]
lines
=
new
string
[
comList
.
Count
+
1
];
lines
[
0
]
=
GetHeaderString
(
cvsTitleList
);
int
index
=
1
;
Dictionary
<
string
,
ComponetInfo
>
map
=
new
Dictionary
<
string
,
ComponetInfo
>();
foreach
(
ComponetInfo
com
in
comList
)
{
map
.
Add
(
com
.
PartNum
,
com
);
lines
[
index
]
=
ObjToString
(
com
,
titleIndexMap
,
proTitleMap
);
index
++;
}
bool
result
=
WriteCSVFile
(
filePath
,
lines
);
LogUtil
.
info
(
"保存物料库列表到文件 SaveToFile :"
+
result
);
return
true
;
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"SaveToFile 出错"
+
ex
.
ToString
());
return
false
;
}
}
public
static
bool
RemoveCom
(
ComponetInfo
obj
)
{
if
(
allComMap
.
ContainsKey
(
obj
.
PartNum
))
{
allComMap
.
Remove
(
obj
.
PartNum
);
SaveToFile
();
return
true
;
}
return
false
;
}
public
static
ComponetInfo
GetCom
(
string
partNum
)
{
if
(
allComMap
.
ContainsKey
(
partNum
))
{
return
allComMap
[
partNum
];
}
return
null
;
}
}
public
class
ComponetInfo
{
public
ComponetInfo
()
{
}
/// <summary>
///物料编号
/// </summary>
[
CSVAttribute
(
"物料编号"
)]
public
string
PartNum
{
get
;
set
;
}
/// <summary>
/// 描述
/// </summary>
[
CSVAttribute
(
"描述"
)]
public
string
Describe
{
get
;
set
;
}
/// <summary>
///产品
/// </summary>
[
CSVAttribute
(
"产品"
)]
public
string
ProductName
{
get
;
set
;
}
/// <summary>
///封装
/// </summary>
[
CSVAttribute
(
"封装"
)]
public
string
Encapsulations
{
get
;
set
;
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论