合并修改
This commit is contained in:
37
DHSoftware/Views/AddCameraControl.Designer.cs
generated
37
DHSoftware/Views/AddCameraControl.Designer.cs
generated
@ -29,6 +29,7 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new AntdUI.Panel();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
input_name = new AntdUI.Input();
|
||||
label3 = new AntdUI.Label();
|
||||
divider1 = new AntdUI.Divider();
|
||||
@ -36,7 +37,6 @@
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
label1 = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
@ -48,7 +48,7 @@
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
@ -58,6 +58,16 @@
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 23;
|
||||
lbTitleName.Text = "新增相机操作";
|
||||
//
|
||||
// input_name
|
||||
//
|
||||
input_name.Dock = DockStyle.Top;
|
||||
@ -66,7 +76,7 @@
|
||||
input_name.Name = "input_name";
|
||||
input_name.Radius = 3;
|
||||
input_name.Size = new Size(464, 38);
|
||||
input_name.TabIndex = 22;
|
||||
input_name.TabIndex = 28;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
@ -75,7 +85,7 @@
|
||||
label3.Location = new Point(18, 110);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(464, 24);
|
||||
label3.TabIndex = 21;
|
||||
label3.TabIndex = 27;
|
||||
label3.Text = "相机名称";
|
||||
//
|
||||
// divider1
|
||||
@ -84,7 +94,7 @@
|
||||
divider1.Location = new Point(18, 98);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(464, 12);
|
||||
divider1.TabIndex = 20;
|
||||
divider1.TabIndex = 26;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
@ -95,7 +105,7 @@
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(464, 44);
|
||||
stackPanel1.TabIndex = 19;
|
||||
stackPanel1.TabIndex = 25;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_cancel
|
||||
@ -118,6 +128,7 @@
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
@ -125,17 +136,7 @@
|
||||
divider2.Location = new Point(18, 42);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Dock = DockStyle.Top;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.Location = new Point(18, 18);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(464, 24);
|
||||
label1.TabIndex = 17;
|
||||
label1.Text = "新增相机操作";
|
||||
divider2.TabIndex = 24;
|
||||
//
|
||||
// AddCameraControl
|
||||
//
|
||||
@ -150,7 +151,6 @@
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Input input_name;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Divider divider1;
|
||||
@ -158,5 +158,6 @@
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.Label lbTitleName;
|
||||
}
|
||||
}
|
||||
|
@ -7,10 +7,13 @@ namespace DHSoftware.Views
|
||||
private AntdUI.Window window;
|
||||
public bool submit;
|
||||
public string CubicleName;
|
||||
public AddCameraControl(AntdUI.Window _window)
|
||||
public AddCameraControl(AntdUI.Window _window, string TitleName)
|
||||
{
|
||||
this.window = _window;
|
||||
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
@ -19,6 +22,12 @@ namespace DHSoftware.Views
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
Load += AddCameraControl_Load;
|
||||
}
|
||||
|
||||
private void AddCameraControl_Load(object? sender, EventArgs e)
|
||||
{
|
||||
input_name.Text = CubicleName;
|
||||
}
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
|
40
DHSoftware/Views/AddCubicleControl.Designer.cs
generated
40
DHSoftware/Views/AddCubicleControl.Designer.cs
generated
@ -36,6 +36,8 @@
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
sltdetectionType = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
@ -43,18 +45,20 @@
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(sltdetectionType);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(input_name);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(500, 194);
|
||||
panel1.Size = new Size(500, 243);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
@ -127,21 +131,41 @@
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "新增工位操作";
|
||||
//
|
||||
// sltdetectionType
|
||||
//
|
||||
sltdetectionType.Dock = DockStyle.Top;
|
||||
sltdetectionType.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
sltdetectionType.Location = new Point(18, 196);
|
||||
sltdetectionType.Name = "sltdetectionType";
|
||||
sltdetectionType.Radius = 3;
|
||||
sltdetectionType.Size = new Size(464, 38);
|
||||
sltdetectionType.TabIndex = 24;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Dock = DockStyle.Top;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.Location = new Point(18, 18);
|
||||
label1.Location = new Point(18, 172);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(464, 24);
|
||||
label1.TabIndex = 17;
|
||||
label1.Text = "新增工位操作";
|
||||
label1.TabIndex = 23;
|
||||
label1.Text = "检测类型";
|
||||
//
|
||||
// AddCubicleControl
|
||||
//
|
||||
Controls.Add(panel1);
|
||||
Name = "AddCubicleControl";
|
||||
Size = new Size(500, 194);
|
||||
Size = new Size(500, 243);
|
||||
panel1.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
@ -150,7 +174,7 @@
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Input input_name;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Divider divider1;
|
||||
@ -158,5 +182,7 @@
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.Select sltdetectionType;
|
||||
private AntdUI.Label label1;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
|
||||
using DH.Commons.Enums;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class AddCubicleControl : UserControl
|
||||
@ -7,10 +9,17 @@ namespace DHSoftware.Views
|
||||
private AntdUI.Window window;
|
||||
public bool submit;
|
||||
public string CubicleName;
|
||||
public AddCubicleControl(AntdUI.Window _window)
|
||||
public EnumDetectionType DetectionType;
|
||||
public AddCubicleControl(AntdUI.Window _window,string TitleName)
|
||||
{
|
||||
this.window = _window;
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
sltdetectionType.Items.Clear();
|
||||
foreach (EnumDetectionType value in Enum.GetValues(typeof(EnumDetectionType)))
|
||||
{
|
||||
sltdetectionType.Items.Add(value.ToString());
|
||||
}
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
@ -19,6 +28,13 @@ namespace DHSoftware.Views
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
Load += AddCubicleControl_Load;
|
||||
}
|
||||
|
||||
private void AddCubicleControl_Load(object? sender, EventArgs e)
|
||||
{
|
||||
input_name.Text = CubicleName;
|
||||
sltdetectionType.SelectedIndex =(int)DetectionType;
|
||||
}
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
@ -37,7 +53,14 @@ namespace DHSoftware.Views
|
||||
AntdUI.Message.warn(window, "工位名称不能为空!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
CubicleName=input_name.Text;
|
||||
if (String.IsNullOrEmpty(sltdetectionType.Text))
|
||||
{
|
||||
input_name.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "请选择检测类型!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
CubicleName =input_name.Text;
|
||||
DetectionType = (EnumDetectionType)sltdetectionType.SelectedIndex;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
162
DHSoftware/Views/AddGlobalControl.Designer.cs
generated
Normal file
162
DHSoftware/Views/AddGlobalControl.Designer.cs
generated
Normal file
@ -0,0 +1,162 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class AddGlobalControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new AntdUI.Panel();
|
||||
input_name = new AntdUI.Input();
|
||||
label3 = new AntdUI.Label();
|
||||
divider1 = new AntdUI.Divider();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(input_name);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(500, 192);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// input_name
|
||||
//
|
||||
input_name.Dock = DockStyle.Top;
|
||||
input_name.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
input_name.Location = new Point(18, 134);
|
||||
input_name.Name = "input_name";
|
||||
input_name.Radius = 3;
|
||||
input_name.Size = new Size(464, 38);
|
||||
input_name.TabIndex = 22;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Dock = DockStyle.Top;
|
||||
label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label3.Location = new Point(18, 110);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(464, 24);
|
||||
label3.TabIndex = 21;
|
||||
label3.Text = "全局配置名称";
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.Dock = DockStyle.Top;
|
||||
divider1.Location = new Point(18, 98);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(464, 12);
|
||||
divider1.TabIndex = 20;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(button_cancel);
|
||||
stackPanel1.Controls.Add(button_ok);
|
||||
stackPanel1.Dock = DockStyle.Top;
|
||||
stackPanel1.Location = new Point(18, 54);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(464, 44);
|
||||
stackPanel1.TabIndex = 19;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_cancel
|
||||
//
|
||||
button_cancel.BorderWidth = 1F;
|
||||
button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
|
||||
button_cancel.Ghost = true;
|
||||
button_cancel.Location = new Point(84, 3);
|
||||
button_cancel.Name = "button_cancel";
|
||||
button_cancel.Size = new Size(75, 38);
|
||||
button_cancel.TabIndex = 1;
|
||||
button_cancel.Text = "取消";
|
||||
//
|
||||
// button_ok
|
||||
//
|
||||
button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button_ok.Location = new Point(3, 3);
|
||||
button_ok.Name = "button_ok";
|
||||
button_ok.Size = new Size(75, 38);
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
divider2.Dock = DockStyle.Top;
|
||||
divider2.Location = new Point(18, 42);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "新增全局配置操作";
|
||||
//
|
||||
// AddGlobalControl
|
||||
//
|
||||
Controls.Add(panel1);
|
||||
Name = "AddGlobalControl";
|
||||
Size = new Size(500, 192);
|
||||
panel1.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Input input_name;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
}
|
||||
}
|
48
DHSoftware/Views/AddGlobalControl.cs
Normal file
48
DHSoftware/Views/AddGlobalControl.cs
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class AddGlobalControl : UserControl
|
||||
{
|
||||
private AntdUI.Window window;
|
||||
public bool submit;
|
||||
public string GlobalName;
|
||||
public AddGlobalControl(AntdUI.Window _window,string TitleName)
|
||||
{
|
||||
this.window = _window;
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
}
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
submit = false;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void Button_ok_Click(object sender, EventArgs e)
|
||||
{
|
||||
input_name.Status = AntdUI.TType.None;
|
||||
//检查输入内容
|
||||
if (String.IsNullOrEmpty(input_name.Text))
|
||||
{
|
||||
input_name.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "全局配置名称名称不能为空!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
GlobalName = input_name.Text;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
62
DHSoftware/Views/AddMotionControl.Designer.cs
generated
62
DHSoftware/Views/AddMotionControl.Designer.cs
generated
@ -36,31 +36,25 @@
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
label1 = new AntdUI.Label();
|
||||
label2 = new AntdUI.Label();
|
||||
divider3 = new AntdUI.Divider();
|
||||
select_type = new AntdUI.Select();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(select_type);
|
||||
panel1.Controls.Add(label2);
|
||||
panel1.Controls.Add(divider3);
|
||||
panel1.Controls.Add(input_name);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(500, 260);
|
||||
panel1.Size = new Size(500, 192);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
@ -124,6 +118,7 @@
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
@ -133,47 +128,21 @@
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// label1
|
||||
// lbTitleName
|
||||
//
|
||||
label1.Dock = DockStyle.Top;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.Location = new Point(18, 18);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(464, 24);
|
||||
label1.TabIndex = 17;
|
||||
label1.Text = "新增运动控制操作";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Dock = DockStyle.Top;
|
||||
label2.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label2.Location = new Point(18, 184);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(464, 24);
|
||||
label2.TabIndex = 24;
|
||||
label2.Text = "运动控制类型";
|
||||
//
|
||||
// divider3
|
||||
//
|
||||
divider3.Dock = DockStyle.Top;
|
||||
divider3.Location = new Point(18, 172);
|
||||
divider3.Name = "divider3";
|
||||
divider3.Size = new Size(464, 12);
|
||||
divider3.TabIndex = 23;
|
||||
//
|
||||
// select_type
|
||||
//
|
||||
select_type.Dock = DockStyle.Top;
|
||||
select_type.Location = new Point(18, 208);
|
||||
select_type.Name = "select_type";
|
||||
select_type.Size = new Size(464, 37);
|
||||
select_type.TabIndex = 25;
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "新增运动控制操作";
|
||||
//
|
||||
// AddMotionControl
|
||||
//
|
||||
Controls.Add(panel1);
|
||||
Name = "AddMotionControl";
|
||||
Size = new Size(500, 260);
|
||||
Size = new Size(500, 192);
|
||||
panel1.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
@ -182,7 +151,7 @@
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Input input_name;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Divider divider1;
|
||||
@ -190,8 +159,5 @@
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.Select select_type;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Divider divider3;
|
||||
}
|
||||
}
|
||||
|
@ -8,10 +8,11 @@ namespace DHSoftware.Views
|
||||
public bool submit;
|
||||
public string MotionName;
|
||||
public string MotionType;
|
||||
public AddMotionControl(AntdUI.Window _window)
|
||||
public AddMotionControl(AntdUI.Window _window,string TitleName)
|
||||
{
|
||||
this.window = _window;
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
@ -39,7 +40,6 @@ namespace DHSoftware.Views
|
||||
return;
|
||||
}
|
||||
MotionName = input_name.Text;
|
||||
MotionType = select_type.Text;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
201
DHSoftware/Views/AddSchemeControl.Designer.cs
generated
Normal file
201
DHSoftware/Views/AddSchemeControl.Designer.cs
generated
Normal file
@ -0,0 +1,201 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class AddSchemeControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new AntdUI.Panel();
|
||||
input_name = new AntdUI.Input();
|
||||
label3 = new AntdUI.Label();
|
||||
stackPanel2 = new AntdUI.StackPanel();
|
||||
label1 = new AntdUI.Label();
|
||||
ckNullScheme = new AntdUI.Checkbox();
|
||||
divider1 = new AntdUI.Divider();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel2.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(input_name);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(stackPanel2);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(500, 234);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// input_name
|
||||
//
|
||||
input_name.Dock = DockStyle.Top;
|
||||
input_name.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
input_name.Location = new Point(18, 164);
|
||||
input_name.Name = "input_name";
|
||||
input_name.Radius = 3;
|
||||
input_name.Size = new Size(464, 38);
|
||||
input_name.TabIndex = 25;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Dock = DockStyle.Top;
|
||||
label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label3.Location = new Point(18, 140);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(464, 24);
|
||||
label3.TabIndex = 24;
|
||||
label3.Text = "方案名称";
|
||||
//
|
||||
// stackPanel2
|
||||
//
|
||||
stackPanel2.Controls.Add(label1);
|
||||
stackPanel2.Controls.Add(ckNullScheme);
|
||||
stackPanel2.Dock = DockStyle.Top;
|
||||
stackPanel2.Location = new Point(18, 110);
|
||||
stackPanel2.Name = "stackPanel2";
|
||||
stackPanel2.RightToLeft = RightToLeft.No;
|
||||
stackPanel2.Size = new Size(464, 30);
|
||||
stackPanel2.TabIndex = 23;
|
||||
stackPanel2.Text = "stackPanel2";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Dock = DockStyle.Fill;
|
||||
label1.Location = new Point(84, 3);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(333, 24);
|
||||
label1.TabIndex = 1;
|
||||
label1.Text = "默认从当前方案派生,若想创建新方案选中此项";
|
||||
//
|
||||
// ckNullScheme
|
||||
//
|
||||
ckNullScheme.Dock = DockStyle.Left;
|
||||
ckNullScheme.Location = new Point(3, 3);
|
||||
ckNullScheme.Name = "ckNullScheme";
|
||||
ckNullScheme.Size = new Size(75, 24);
|
||||
ckNullScheme.TabIndex = 0;
|
||||
ckNullScheme.Text = "新方案";
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.Dock = DockStyle.Top;
|
||||
divider1.Location = new Point(18, 98);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(464, 12);
|
||||
divider1.TabIndex = 20;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(button_cancel);
|
||||
stackPanel1.Controls.Add(button_ok);
|
||||
stackPanel1.Dock = DockStyle.Top;
|
||||
stackPanel1.Location = new Point(18, 54);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(464, 44);
|
||||
stackPanel1.TabIndex = 19;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_cancel
|
||||
//
|
||||
button_cancel.BorderWidth = 1F;
|
||||
button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
|
||||
button_cancel.Ghost = true;
|
||||
button_cancel.Location = new Point(84, 3);
|
||||
button_cancel.Name = "button_cancel";
|
||||
button_cancel.Size = new Size(75, 38);
|
||||
button_cancel.TabIndex = 1;
|
||||
button_cancel.Text = "取消";
|
||||
//
|
||||
// button_ok
|
||||
//
|
||||
button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button_ok.Location = new Point(3, 3);
|
||||
button_ok.Name = "button_ok";
|
||||
button_ok.Size = new Size(75, 38);
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
divider2.Dock = DockStyle.Top;
|
||||
divider2.Location = new Point(18, 42);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "新增方案操作";
|
||||
//
|
||||
// AddSchemeControl
|
||||
//
|
||||
Controls.Add(panel1);
|
||||
Name = "AddSchemeControl";
|
||||
Size = new Size(500, 234);
|
||||
panel1.ResumeLayout(false);
|
||||
stackPanel2.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.Input input_name;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.StackPanel stackPanel2;
|
||||
private AntdUI.Checkbox ckNullScheme;
|
||||
private AntdUI.Label label1;
|
||||
}
|
||||
}
|
52
DHSoftware/Views/AddSchemeControl.cs
Normal file
52
DHSoftware/Views/AddSchemeControl.cs
Normal file
@ -0,0 +1,52 @@
|
||||
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class AddSchemeControl : UserControl
|
||||
{
|
||||
private AntdUI.Window window;
|
||||
public bool submit;
|
||||
public string SchemeName;
|
||||
public bool NullScheme;
|
||||
public AddSchemeControl(AntdUI.Window _window,string TitleName)
|
||||
{
|
||||
this.window = _window;
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
submit = false;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void Button_ok_Click(object sender, EventArgs e)
|
||||
{
|
||||
input_name.Status = AntdUI.TType.None;
|
||||
//检查输入内容
|
||||
if (String.IsNullOrEmpty(input_name.Text))
|
||||
{
|
||||
input_name.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "方案名称不能为空!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
SchemeName = input_name.Text;
|
||||
NullScheme = ckNullScheme.Checked;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DVPCameraType;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -1,5 +1,5 @@
|
||||
using AntdUI;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Commons.Base;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
687
DHSoftware/Views/CameraControl.Designer.cs
generated
687
DHSoftware/Views/CameraControl.Designer.cs
generated
@ -28,217 +28,65 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
swhEnable = new AntdUI.Switch();
|
||||
panel3 = new AntdUI.Panel();
|
||||
button3 = new AntdUI.Button();
|
||||
button2 = new AntdUI.Button();
|
||||
button1 = new AntdUI.Button();
|
||||
btnSizeAdd = new AntdUI.Button();
|
||||
panel4 = new AntdUI.Panel();
|
||||
pictureBox1 = new PictureBox();
|
||||
panel2 = new AntdUI.Panel();
|
||||
label18 = new AntdUI.Label();
|
||||
swhEnable = new AntdUI.Switch();
|
||||
label1 = new AntdUI.Label();
|
||||
label2 = new AntdUI.Label();
|
||||
label3 = new AntdUI.Label();
|
||||
iptExposure = new AntdUI.InputNumber();
|
||||
iptGain = new AntdUI.InputNumber();
|
||||
iptRevolve = new AntdUI.InputNumber();
|
||||
iptExposure = new AntdUI.Input();
|
||||
iptGain = new AntdUI.Input();
|
||||
iptRevolve = new AntdUI.Select();
|
||||
label4 = new AntdUI.Label();
|
||||
sltAcquisitionMode = new AntdUI.Select();
|
||||
label5 = new AntdUI.Label();
|
||||
sltTriggerMode = new AntdUI.Select();
|
||||
label7 = new AntdUI.Label();
|
||||
iptROIW = new AntdUI.InputNumber();
|
||||
iptROIY = new AntdUI.InputNumber();
|
||||
iptROIX = new AntdUI.InputNumber();
|
||||
iptROIH = new AntdUI.InputNumber();
|
||||
pictureBox1 = new PictureBox();
|
||||
btnSizeAdd = new AntdUI.Button();
|
||||
button1 = new AntdUI.Button();
|
||||
button2 = new AntdUI.Button();
|
||||
button3 = new AntdUI.Button();
|
||||
iptROIX = new AntdUI.Input();
|
||||
iptROIY = new AntdUI.Input();
|
||||
iptROIW = new AntdUI.Input();
|
||||
iptROIH = new AntdUI.Input();
|
||||
label6 = new AntdUI.Label();
|
||||
sthPic = new AntdUI.Switch();
|
||||
label8 = new AntdUI.Label();
|
||||
label9 = new AntdUI.Label();
|
||||
label10 = new AntdUI.Label();
|
||||
label11 = new AntdUI.Label();
|
||||
label12 = new AntdUI.Label();
|
||||
sthAllPic = new AntdUI.Switch();
|
||||
label13 = new AntdUI.Label();
|
||||
sltCamType = new AntdUI.Select();
|
||||
label14 = new AntdUI.Label();
|
||||
switch1 = new AntdUI.Switch();
|
||||
panel1 = new AntdUI.Panel();
|
||||
sltPicType = new AntdUI.Select();
|
||||
label15 = new AntdUI.Label();
|
||||
panel3.SuspendLayout();
|
||||
panel4.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
panel2.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// swhEnable
|
||||
// panel3
|
||||
//
|
||||
swhEnable.CheckedText = "启用";
|
||||
swhEnable.Location = new Point(84, 13);
|
||||
swhEnable.Name = "swhEnable";
|
||||
swhEnable.Size = new Size(93, 33);
|
||||
swhEnable.TabIndex = 13;
|
||||
swhEnable.UnCheckedText = "关闭";
|
||||
//
|
||||
// label18
|
||||
//
|
||||
label18.Location = new Point(28, 23);
|
||||
label18.Name = "label18";
|
||||
label18.Size = new Size(59, 23);
|
||||
label18.TabIndex = 12;
|
||||
label18.Text = "状 态";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(28, 71);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(59, 23);
|
||||
label1.TabIndex = 14;
|
||||
label1.Text = "曝 光";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Location = new Point(28, 113);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(59, 23);
|
||||
label2.TabIndex = 15;
|
||||
label2.Text = "增 益";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Location = new Point(28, 155);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(59, 23);
|
||||
label3.TabIndex = 16;
|
||||
label3.Text = "旋转角度";
|
||||
//
|
||||
// iptExposure
|
||||
//
|
||||
iptExposure.Location = new Point(84, 57);
|
||||
iptExposure.Name = "iptExposure";
|
||||
iptExposure.Size = new Size(93, 37);
|
||||
iptExposure.TabIndex = 17;
|
||||
iptExposure.Tag = "";
|
||||
iptExposure.Text = "0";
|
||||
//
|
||||
// iptGain
|
||||
//
|
||||
iptGain.Location = new Point(84, 100);
|
||||
iptGain.Name = "iptGain";
|
||||
iptGain.Size = new Size(93, 37);
|
||||
iptGain.TabIndex = 18;
|
||||
iptGain.Text = "0";
|
||||
//
|
||||
// iptRevolve
|
||||
//
|
||||
iptRevolve.Location = new Point(84, 143);
|
||||
iptRevolve.Name = "iptRevolve";
|
||||
iptRevolve.Size = new Size(93, 37);
|
||||
iptRevolve.TabIndex = 19;
|
||||
iptRevolve.Text = "0";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
label4.Location = new Point(28, 199);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(59, 23);
|
||||
label4.TabIndex = 20;
|
||||
label4.Text = "采图模式";
|
||||
//
|
||||
// sltAcquisitionMode
|
||||
//
|
||||
sltAcquisitionMode.List = true;
|
||||
sltAcquisitionMode.Location = new Point(84, 186);
|
||||
sltAcquisitionMode.Name = "sltAcquisitionMode";
|
||||
sltAcquisitionMode.Size = new Size(93, 36);
|
||||
sltAcquisitionMode.TabIndex = 21;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
label5.Location = new Point(28, 244);
|
||||
label5.Name = "label5";
|
||||
label5.Size = new Size(59, 23);
|
||||
label5.TabIndex = 22;
|
||||
label5.Text = "触发模式";
|
||||
//
|
||||
// sltTriggerMode
|
||||
//
|
||||
sltTriggerMode.List = true;
|
||||
sltTriggerMode.Location = new Point(84, 231);
|
||||
sltTriggerMode.Name = "sltTriggerMode";
|
||||
sltTriggerMode.Size = new Size(93, 36);
|
||||
sltTriggerMode.TabIndex = 26;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Location = new Point(28, 354);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(59, 23);
|
||||
label7.TabIndex = 28;
|
||||
label7.Text = "ROI范围";
|
||||
//
|
||||
// iptROIW
|
||||
//
|
||||
iptROIW.Location = new Point(84, 371);
|
||||
iptROIW.Name = "iptROIW";
|
||||
iptROIW.Size = new Size(93, 37);
|
||||
iptROIW.TabIndex = 31;
|
||||
iptROIW.Text = "0";
|
||||
//
|
||||
// iptROIY
|
||||
//
|
||||
iptROIY.Location = new Point(84, 328);
|
||||
iptROIY.Name = "iptROIY";
|
||||
iptROIY.Size = new Size(93, 37);
|
||||
iptROIY.TabIndex = 30;
|
||||
iptROIY.Text = "0";
|
||||
//
|
||||
// iptROIX
|
||||
//
|
||||
iptROIX.Location = new Point(84, 285);
|
||||
iptROIX.Name = "iptROIX";
|
||||
iptROIX.Size = new Size(93, 37);
|
||||
iptROIX.TabIndex = 29;
|
||||
iptROIX.Tag = "";
|
||||
iptROIX.Text = "0";
|
||||
//
|
||||
// iptROIH
|
||||
//
|
||||
iptROIH.Location = new Point(84, 414);
|
||||
iptROIH.Name = "iptROIH";
|
||||
iptROIH.Size = new Size(93, 37);
|
||||
iptROIH.TabIndex = 32;
|
||||
iptROIH.Text = "0";
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
pictureBox1.BorderStyle = BorderStyle.FixedSingle;
|
||||
pictureBox1.Location = new Point(219, 23);
|
||||
pictureBox1.Name = "pictureBox1";
|
||||
pictureBox1.Size = new Size(659, 429);
|
||||
pictureBox1.TabIndex = 33;
|
||||
pictureBox1.TabStop = false;
|
||||
//
|
||||
// btnSizeAdd
|
||||
//
|
||||
btnSizeAdd.BorderWidth = 2F;
|
||||
btnSizeAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSizeAdd.Ghost = true;
|
||||
btnSizeAdd.IconRatio = 0F;
|
||||
btnSizeAdd.IconSvg = "";
|
||||
btnSizeAdd.Location = new Point(280, 458);
|
||||
btnSizeAdd.Name = "btnSizeAdd";
|
||||
btnSizeAdd.Size = new Size(80, 38);
|
||||
btnSizeAdd.TabIndex = 34;
|
||||
btnSizeAdd.Text = "连接相机";
|
||||
//
|
||||
// button1
|
||||
//
|
||||
button1.BorderWidth = 2F;
|
||||
button1.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button1.Ghost = true;
|
||||
button1.IconRatio = 0F;
|
||||
button1.IconSvg = "";
|
||||
button1.Location = new Point(438, 458);
|
||||
button1.Name = "button1";
|
||||
button1.Size = new Size(80, 38);
|
||||
button1.TabIndex = 35;
|
||||
button1.Text = "断开相机";
|
||||
//
|
||||
// button2
|
||||
//
|
||||
button2.BorderWidth = 2F;
|
||||
button2.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button2.Ghost = true;
|
||||
button2.IconRatio = 0F;
|
||||
button2.IconSvg = "";
|
||||
button2.Location = new Point(593, 458);
|
||||
button2.Name = "button2";
|
||||
button2.Size = new Size(80, 38);
|
||||
button2.TabIndex = 36;
|
||||
button2.Text = "单次触发";
|
||||
panel3.Controls.Add(button3);
|
||||
panel3.Controls.Add(button2);
|
||||
panel3.Controls.Add(button1);
|
||||
panel3.Controls.Add(btnSizeAdd);
|
||||
panel3.Dock = DockStyle.Bottom;
|
||||
panel3.Location = new Point(0, 585);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(691, 59);
|
||||
panel3.TabIndex = 39;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// button3
|
||||
//
|
||||
@ -247,67 +95,434 @@
|
||||
button3.Ghost = true;
|
||||
button3.IconRatio = 0F;
|
||||
button3.IconSvg = "";
|
||||
button3.Location = new Point(741, 458);
|
||||
button3.Location = new Point(536, 13);
|
||||
button3.Name = "button3";
|
||||
button3.Size = new Size(80, 38);
|
||||
button3.TabIndex = 37;
|
||||
button3.TabIndex = 46;
|
||||
button3.Text = "连续触发";
|
||||
//
|
||||
// button2
|
||||
//
|
||||
button2.BorderWidth = 2F;
|
||||
button2.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button2.Ghost = true;
|
||||
button2.IconRatio = 0F;
|
||||
button2.IconSvg = "";
|
||||
button2.Location = new Point(388, 13);
|
||||
button2.Name = "button2";
|
||||
button2.Size = new Size(80, 38);
|
||||
button2.TabIndex = 45;
|
||||
button2.Text = "单次触发";
|
||||
//
|
||||
// button1
|
||||
//
|
||||
button1.BorderWidth = 2F;
|
||||
button1.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button1.Ghost = true;
|
||||
button1.IconRatio = 0F;
|
||||
button1.IconSvg = "";
|
||||
button1.Location = new Point(233, 13);
|
||||
button1.Name = "button1";
|
||||
button1.Size = new Size(80, 38);
|
||||
button1.TabIndex = 44;
|
||||
button1.Text = "断开相机";
|
||||
//
|
||||
// btnSizeAdd
|
||||
//
|
||||
btnSizeAdd.BorderWidth = 2F;
|
||||
btnSizeAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSizeAdd.Ghost = true;
|
||||
btnSizeAdd.IconRatio = 0F;
|
||||
btnSizeAdd.IconSvg = "";
|
||||
btnSizeAdd.Location = new Point(75, 13);
|
||||
btnSizeAdd.Name = "btnSizeAdd";
|
||||
btnSizeAdd.Size = new Size(80, 38);
|
||||
btnSizeAdd.TabIndex = 43;
|
||||
btnSizeAdd.Text = "连接相机";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
panel4.Controls.Add(pictureBox1);
|
||||
panel4.Dock = DockStyle.Fill;
|
||||
panel4.Location = new Point(0, 0);
|
||||
panel4.Name = "panel4";
|
||||
panel4.Size = new Size(691, 585);
|
||||
panel4.TabIndex = 40;
|
||||
panel4.Text = "panel4";
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
pictureBox1.BorderStyle = BorderStyle.FixedSingle;
|
||||
pictureBox1.Dock = DockStyle.Fill;
|
||||
pictureBox1.Location = new Point(0, 0);
|
||||
pictureBox1.Name = "pictureBox1";
|
||||
pictureBox1.Size = new Size(691, 585);
|
||||
pictureBox1.TabIndex = 39;
|
||||
pictureBox1.TabStop = false;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(panel4);
|
||||
panel2.Controls.Add(panel3);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(218, 0);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(691, 644);
|
||||
panel2.TabIndex = 49;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// label18
|
||||
//
|
||||
label18.Location = new Point(21, 19);
|
||||
label18.Name = "label18";
|
||||
label18.Size = new Size(59, 23);
|
||||
label18.TabIndex = 48;
|
||||
label18.Text = "状 态";
|
||||
//
|
||||
// swhEnable
|
||||
//
|
||||
swhEnable.CheckedText = "启用";
|
||||
swhEnable.Location = new Point(86, 9);
|
||||
swhEnable.Name = "swhEnable";
|
||||
swhEnable.Size = new Size(111, 33);
|
||||
swhEnable.TabIndex = 49;
|
||||
swhEnable.UnCheckedText = "关闭";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(21, 136);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(59, 36);
|
||||
label1.TabIndex = 50;
|
||||
label1.Text = "曝 光";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Location = new Point(21, 179);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(59, 36);
|
||||
label2.TabIndex = 51;
|
||||
label2.Text = "增 益";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Location = new Point(21, 222);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(59, 36);
|
||||
label3.TabIndex = 52;
|
||||
label3.Text = "旋转角度";
|
||||
//
|
||||
// iptExposure
|
||||
//
|
||||
iptExposure.Location = new Point(86, 136);
|
||||
iptExposure.Name = "iptExposure";
|
||||
iptExposure.Size = new Size(111, 36);
|
||||
iptExposure.TabIndex = 53;
|
||||
iptExposure.Tag = "";
|
||||
iptExposure.Text = "0";
|
||||
//
|
||||
// iptGain
|
||||
//
|
||||
iptGain.Location = new Point(86, 179);
|
||||
iptGain.Name = "iptGain";
|
||||
iptGain.Size = new Size(111, 36);
|
||||
iptGain.TabIndex = 54;
|
||||
iptGain.Text = "0";
|
||||
//
|
||||
// iptRevolve
|
||||
//
|
||||
iptRevolve.Items.AddRange(new object[] { "0", "90", "180", "270" });
|
||||
iptRevolve.List = true;
|
||||
iptRevolve.Location = new Point(86, 222);
|
||||
iptRevolve.Name = "iptRevolve";
|
||||
iptRevolve.Size = new Size(111, 36);
|
||||
iptRevolve.TabIndex = 55;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
label4.Location = new Point(21, 265);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(59, 36);
|
||||
label4.TabIndex = 56;
|
||||
label4.Text = "采图模式";
|
||||
//
|
||||
// sltAcquisitionMode
|
||||
//
|
||||
sltAcquisitionMode.List = true;
|
||||
sltAcquisitionMode.Location = new Point(86, 265);
|
||||
sltAcquisitionMode.Name = "sltAcquisitionMode";
|
||||
sltAcquisitionMode.Size = new Size(111, 36);
|
||||
sltAcquisitionMode.TabIndex = 57;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
label5.Location = new Point(21, 310);
|
||||
label5.Name = "label5";
|
||||
label5.Size = new Size(59, 36);
|
||||
label5.TabIndex = 58;
|
||||
label5.Text = "触发模式";
|
||||
//
|
||||
// sltTriggerMode
|
||||
//
|
||||
sltTriggerMode.List = true;
|
||||
sltTriggerMode.Location = new Point(86, 310);
|
||||
sltTriggerMode.Name = "sltTriggerMode";
|
||||
sltTriggerMode.Size = new Size(111, 36);
|
||||
sltTriggerMode.TabIndex = 59;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Location = new Point(3, 538);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(29, 23);
|
||||
label7.TabIndex = 60;
|
||||
label7.Text = "ROI";
|
||||
//
|
||||
// iptROIX
|
||||
//
|
||||
iptROIX.Location = new Point(86, 470);
|
||||
iptROIX.Name = "iptROIX";
|
||||
iptROIX.Size = new Size(111, 37);
|
||||
iptROIX.TabIndex = 61;
|
||||
iptROIX.Tag = "";
|
||||
iptROIX.Text = "0";
|
||||
//
|
||||
// iptROIY
|
||||
//
|
||||
iptROIY.Location = new Point(86, 513);
|
||||
iptROIY.Name = "iptROIY";
|
||||
iptROIY.Size = new Size(111, 37);
|
||||
iptROIY.TabIndex = 62;
|
||||
iptROIY.Text = "0";
|
||||
//
|
||||
// iptROIW
|
||||
//
|
||||
iptROIW.Location = new Point(86, 556);
|
||||
iptROIW.Name = "iptROIW";
|
||||
iptROIW.Size = new Size(111, 37);
|
||||
iptROIW.TabIndex = 63;
|
||||
iptROIW.Text = "0";
|
||||
//
|
||||
// iptROIH
|
||||
//
|
||||
iptROIH.Location = new Point(86, 599);
|
||||
iptROIH.Name = "iptROIH";
|
||||
iptROIH.Size = new Size(111, 37);
|
||||
iptROIH.TabIndex = 64;
|
||||
iptROIH.Text = "0";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
label6.Location = new Point(21, 66);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(59, 23);
|
||||
label6.TabIndex = 65;
|
||||
label6.Text = "相 机 图";
|
||||
//
|
||||
// sthPic
|
||||
//
|
||||
sthPic.CheckedText = "启用";
|
||||
sthPic.Location = new Point(86, 56);
|
||||
sthPic.Name = "sthPic";
|
||||
sthPic.Size = new Size(111, 33);
|
||||
sthPic.TabIndex = 66;
|
||||
sthPic.UnCheckedText = "关闭";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
label8.Location = new Point(36, 470);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(29, 37);
|
||||
label8.TabIndex = 67;
|
||||
label8.Text = "X:";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
label9.Location = new Point(36, 513);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(29, 37);
|
||||
label9.TabIndex = 68;
|
||||
label9.Text = "Y:";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
label10.Location = new Point(28, 556);
|
||||
label10.Name = "label10";
|
||||
label10.Size = new Size(44, 37);
|
||||
label10.TabIndex = 69;
|
||||
label10.Text = "宽度:";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
label11.Location = new Point(28, 600);
|
||||
label11.Name = "label11";
|
||||
label11.Size = new Size(44, 36);
|
||||
label11.TabIndex = 70;
|
||||
label11.Text = "高度:";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
label12.Location = new Point(21, 402);
|
||||
label12.Name = "label12";
|
||||
label12.Size = new Size(59, 23);
|
||||
label12.TabIndex = 71;
|
||||
label12.Text = "全 画 幅";
|
||||
//
|
||||
// sthAllPic
|
||||
//
|
||||
sthAllPic.CheckedText = "启用";
|
||||
sthAllPic.Location = new Point(86, 392);
|
||||
sthAllPic.Name = "sthAllPic";
|
||||
sthAllPic.Size = new Size(111, 33);
|
||||
sthAllPic.TabIndex = 72;
|
||||
sthAllPic.UnCheckedText = "关闭";
|
||||
//
|
||||
// label13
|
||||
//
|
||||
label13.Location = new Point(21, 95);
|
||||
label13.Name = "label13";
|
||||
label13.Size = new Size(59, 36);
|
||||
label13.TabIndex = 73;
|
||||
label13.Text = "相机类型";
|
||||
//
|
||||
// sltCamType
|
||||
//
|
||||
sltCamType.List = true;
|
||||
sltCamType.Location = new Point(86, 93);
|
||||
sltCamType.Name = "sltCamType";
|
||||
sltCamType.Size = new Size(111, 36);
|
||||
sltCamType.TabIndex = 74;
|
||||
//
|
||||
// label14
|
||||
//
|
||||
label14.Location = new Point(21, 441);
|
||||
label14.Name = "label14";
|
||||
label14.Size = new Size(59, 23);
|
||||
label14.TabIndex = 75;
|
||||
label14.Text = "变焦相机";
|
||||
//
|
||||
// switch1
|
||||
//
|
||||
switch1.CheckedText = "启用";
|
||||
switch1.Location = new Point(86, 431);
|
||||
switch1.Name = "switch1";
|
||||
switch1.Size = new Size(111, 33);
|
||||
switch1.TabIndex = 76;
|
||||
switch1.UnCheckedText = "关闭";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(sltPicType);
|
||||
panel1.Controls.Add(label15);
|
||||
panel1.Controls.Add(switch1);
|
||||
panel1.Controls.Add(label14);
|
||||
panel1.Controls.Add(sltCamType);
|
||||
panel1.Controls.Add(label13);
|
||||
panel1.Controls.Add(sthAllPic);
|
||||
panel1.Controls.Add(label12);
|
||||
panel1.Controls.Add(label11);
|
||||
panel1.Controls.Add(label10);
|
||||
panel1.Controls.Add(label9);
|
||||
panel1.Controls.Add(label8);
|
||||
panel1.Controls.Add(sthPic);
|
||||
panel1.Controls.Add(label6);
|
||||
panel1.Controls.Add(iptROIH);
|
||||
panel1.Controls.Add(iptROIW);
|
||||
panel1.Controls.Add(iptROIY);
|
||||
panel1.Controls.Add(iptROIX);
|
||||
panel1.Controls.Add(label7);
|
||||
panel1.Controls.Add(sltTriggerMode);
|
||||
panel1.Controls.Add(label5);
|
||||
panel1.Controls.Add(sltAcquisitionMode);
|
||||
panel1.Controls.Add(label4);
|
||||
panel1.Controls.Add(iptRevolve);
|
||||
panel1.Controls.Add(iptGain);
|
||||
panel1.Controls.Add(iptExposure);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(label2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(swhEnable);
|
||||
panel1.Controls.Add(label18);
|
||||
panel1.Dock = DockStyle.Left;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(218, 644);
|
||||
panel1.TabIndex = 48;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// sltPicType
|
||||
//
|
||||
sltPicType.List = true;
|
||||
sltPicType.Location = new Point(86, 352);
|
||||
sltPicType.Name = "sltPicType";
|
||||
sltPicType.Size = new Size(111, 36);
|
||||
sltPicType.TabIndex = 78;
|
||||
//
|
||||
// label15
|
||||
//
|
||||
label15.Location = new Point(21, 352);
|
||||
label15.Name = "label15";
|
||||
label15.Size = new Size(59, 36);
|
||||
label15.TabIndex = 77;
|
||||
label15.Text = "图片格式";
|
||||
//
|
||||
// CameraControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(button3);
|
||||
Controls.Add(button2);
|
||||
Controls.Add(button1);
|
||||
Controls.Add(btnSizeAdd);
|
||||
Controls.Add(pictureBox1);
|
||||
Controls.Add(iptROIH);
|
||||
Controls.Add(iptROIW);
|
||||
Controls.Add(iptROIY);
|
||||
Controls.Add(iptROIX);
|
||||
Controls.Add(label7);
|
||||
Controls.Add(sltTriggerMode);
|
||||
Controls.Add(label5);
|
||||
Controls.Add(sltAcquisitionMode);
|
||||
Controls.Add(label4);
|
||||
Controls.Add(iptRevolve);
|
||||
Controls.Add(iptGain);
|
||||
Controls.Add(iptExposure);
|
||||
Controls.Add(label3);
|
||||
Controls.Add(label2);
|
||||
Controls.Add(label1);
|
||||
Controls.Add(swhEnable);
|
||||
Controls.Add(label18);
|
||||
Controls.Add(panel2);
|
||||
Controls.Add(panel1);
|
||||
Name = "CameraControl";
|
||||
Size = new Size(909, 505);
|
||||
Size = new Size(909, 644);
|
||||
panel3.ResumeLayout(false);
|
||||
panel4.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||
panel2.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Switch swhEnable;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Button button3;
|
||||
private AntdUI.Button button2;
|
||||
private AntdUI.Button button1;
|
||||
private AntdUI.Button btnSizeAdd;
|
||||
private AntdUI.Panel panel4;
|
||||
private PictureBox pictureBox1;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Label label18;
|
||||
private AntdUI.Switch swhEnable;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.InputNumber iptExposure;
|
||||
private AntdUI.InputNumber iptGain;
|
||||
private AntdUI.InputNumber iptRevolve;
|
||||
private AntdUI.Input iptExposure;
|
||||
private AntdUI.Input iptGain;
|
||||
private AntdUI.Select iptRevolve;
|
||||
private AntdUI.Label label4;
|
||||
private AntdUI.Select sltAcquisitionMode;
|
||||
private AntdUI.Label label5;
|
||||
private AntdUI.Select sltTriggerMode;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.InputNumber iptROIW;
|
||||
private AntdUI.InputNumber iptROIY;
|
||||
private AntdUI.InputNumber iptROIX;
|
||||
private AntdUI.InputNumber iptROIH;
|
||||
private PictureBox pictureBox1;
|
||||
private AntdUI.Button btnSizeAdd;
|
||||
private AntdUI.Button button1;
|
||||
private AntdUI.Button button2;
|
||||
private AntdUI.Button button3;
|
||||
private AntdUI.Input iptROIX;
|
||||
private AntdUI.Input iptROIY;
|
||||
private AntdUI.Input iptROIW;
|
||||
private AntdUI.Input iptROIH;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.Switch sthPic;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.Label label10;
|
||||
private AntdUI.Label label11;
|
||||
private AntdUI.Label label12;
|
||||
private AntdUI.Switch sthAllPic;
|
||||
private AntdUI.Label label13;
|
||||
private AntdUI.Select sltCamType;
|
||||
private AntdUI.Label label14;
|
||||
private AntdUI.Switch switch1;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Select sltPicType;
|
||||
private AntdUI.Label label15;
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,11 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Devices;
|
||||
using DVPCameraType;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using Window = AntdUI.Window;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
@ -17,17 +20,69 @@ namespace DHSoftware.Views
|
||||
{
|
||||
Window window;
|
||||
CameraBase CameraBase;
|
||||
public CameraControl(Window _window,CameraBase cameraBase)
|
||||
public CameraControl(Window _window, CameraBase cameraBase)
|
||||
{
|
||||
window= _window;
|
||||
window = _window;
|
||||
CameraBase = cameraBase;
|
||||
InitializeComponent();
|
||||
|
||||
|
||||
sltCamType.TextChanged += SltCamTpye_TextChanged;
|
||||
sltPicType.TextChanged += SltPicTpye_TextChanged;
|
||||
InitData();
|
||||
BindData();
|
||||
}
|
||||
private void SltPicTpye_TextChanged(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is Select slt && !string.IsNullOrEmpty(slt.Text))
|
||||
{
|
||||
// 将文本转换为枚举值
|
||||
if (Enum.TryParse<dvpStreamFormat>(slt.Text, out var plcType))
|
||||
{
|
||||
switch (plcType)
|
||||
{
|
||||
case dvpStreamFormat.S_RGB24:
|
||||
case dvpStreamFormat.S_MONO8:
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
private void SltCamTpye_TextChanged(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is Select slt && !string.IsNullOrEmpty(slt.Text))
|
||||
{
|
||||
// 将文本转换为枚举值
|
||||
if (Enum.TryParse<EnumCamType>(slt.Text, out var plcType))
|
||||
{
|
||||
switch (plcType)
|
||||
{
|
||||
case EnumCamType.度申Do3think:
|
||||
case EnumCamType.海康hik:
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SltAcquisitionMode_SelectedIndexChanged(object sender, IntEventArgs e)
|
||||
@ -40,7 +95,7 @@ namespace DHSoftware.Views
|
||||
case (int)CameraAcquisitionMode.触发模式:
|
||||
sltTriggerMode.Enabled = true;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -48,27 +103,33 @@ namespace DHSoftware.Views
|
||||
|
||||
private void BindData()
|
||||
{
|
||||
|
||||
sltCamType.DataBindings.Add("Text", CameraBase, "CamType", true, DataSourceUpdateMode.OnPropertyChanged, "");
|
||||
sltPicType.DataBindings.Add("Text", CameraBase, "DvpImageFormat", true, DataSourceUpdateMode.OnPropertyChanged, "");
|
||||
sthPic.DataBindings.Add(nameof(sthPic.Checked), CameraBase, nameof(CameraBase.IsSavePicEnabled),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthAllPic.DataBindings.Add(nameof(sthAllPic.Checked), CameraBase, nameof(CameraBase.IsAllPicEnabled),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
// 启用状态绑定
|
||||
swhEnable.DataBindings.Add(nameof(swhEnable.Checked), CameraBase, nameof(CameraBase.IsEnabled),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
|
||||
switch1.DataBindings.Add(nameof(switch1.Checked), CameraBase, nameof(CameraBase.IsZoomCamera),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
// 曝光时间绑定(假设iptExposure是NumericUpDown)
|
||||
iptExposure.DataBindings.Add(nameof(iptExposure.Value), CameraBase, nameof(CameraBase.Exposure),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged, 0M, "N2");
|
||||
|
||||
|
||||
iptExposure.DataBindings.Add(nameof(iptExposure.Text), CameraBase, nameof(CameraBase.Exposure));
|
||||
// 增益绑定
|
||||
iptGain.DataBindings.Add(nameof(iptGain.Value), CameraBase, nameof(CameraBase.Gain),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged, 0M, "N2");
|
||||
|
||||
iptGain.DataBindings.Add(nameof(iptGain.Text), CameraBase, nameof(CameraBase.Gain));
|
||||
// 旋转角度绑定
|
||||
iptRevolve.DataBindings.Add(nameof(iptRevolve.Value), CameraBase, nameof(CameraBase.RotateImage),
|
||||
true, DataSourceUpdateMode.OnPropertyChanged, 0M, "N2");
|
||||
iptRevolve.DataBindings.Add(nameof(iptRevolve.Text), CameraBase, nameof(CameraBase.RotateImage));
|
||||
|
||||
|
||||
// ROI坐标绑定
|
||||
iptROIX.DataBindings.Add(nameof(iptROIX.Value), CameraBase, nameof(CameraBase.ROIX));
|
||||
iptROIY.DataBindings.Add(nameof(iptROIY.Value), CameraBase, nameof(CameraBase.ROIY));
|
||||
iptROIW.DataBindings.Add(nameof(iptROIW.Value), CameraBase, nameof(CameraBase.ROIW));
|
||||
iptROIH.DataBindings.Add(nameof(iptROIH.Value), CameraBase, nameof(CameraBase.ROIH));
|
||||
iptROIX.DataBindings.Add(nameof(iptROIX.Text), CameraBase, nameof(CameraBase.ROIX));
|
||||
iptROIY.DataBindings.Add(nameof(iptROIY.Text), CameraBase, nameof(CameraBase.ROIY));
|
||||
iptROIW.DataBindings.Add(nameof(iptROIW.Text), CameraBase, nameof(CameraBase.ROIW));
|
||||
iptROIH.DataBindings.Add(nameof(iptROIH.Text), CameraBase, nameof(CameraBase.ROIH));
|
||||
|
||||
// 采集模式下拉框处理
|
||||
sltAcquisitionMode.SelectedIndexChanged += (s, e) =>
|
||||
@ -85,13 +146,27 @@ namespace DHSoftware.Views
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
iptRevolve.Text = Convert.ToInt32(CameraBase.RotateImage).ToString();
|
||||
// 获取枚举字段名列表(原描述改为字段名)
|
||||
sltCamType.Items.Clear();
|
||||
foreach (EnumCamType value in Enum.GetValues(typeof(EnumCamType)))
|
||||
{
|
||||
sltCamType.Items.Add(value.ToString());
|
||||
}
|
||||
sltPicType.Items.Clear();
|
||||
foreach (dvpStreamFormat value in Enum.GetValues(typeof(dvpStreamFormat)))
|
||||
{
|
||||
sltPicType.Items.Add(value.ToString());
|
||||
}
|
||||
// 初始化下拉框选项
|
||||
sltAcquisitionMode.Items.AddRange(new[] { "连续模式", "触发模式" });
|
||||
sltTriggerMode.Items.AddRange(new[] { "软触发", "硬触发" });
|
||||
|
||||
|
||||
// 设置初始选择
|
||||
sltAcquisitionMode.SelectedIndex = CameraBase.IsContinueMode ? 0 : 1;
|
||||
sltTriggerMode.SelectedIndex = CameraBase.IsHardwareTrigger ? 1 : 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
102
DHSoftware/Views/CloseWindow.Designer.cs
generated
Normal file
102
DHSoftware/Views/CloseWindow.Designer.cs
generated
Normal file
@ -0,0 +1,102 @@
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class CloseWindow
|
||||
{
|
||||
/// <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(CloseWindow));
|
||||
panel1 = new AntdUI.Panel();
|
||||
panel2 = new AntdUI.Panel();
|
||||
spin1 = new AntdUI.Spin();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Back = Color.Transparent;
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(280, 124);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Back = Color.Transparent;
|
||||
panel2.Controls.Add(spin1);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(0, 0);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Radius = 0;
|
||||
panel2.Size = new Size(280, 124);
|
||||
panel2.TabIndex = 4;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// spin1
|
||||
//
|
||||
spin1.Fill = SystemColors.Window;
|
||||
spin1.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
spin1.ForeColor = SystemColors.Window;
|
||||
spin1.Location = new Point(50, 20);
|
||||
spin1.Name = "spin1";
|
||||
spin1.Size = new Size(170, 92);
|
||||
spin1.TabIndex = 0;
|
||||
spin1.Text = "软件正在关闭,请稍候......";
|
||||
//
|
||||
// CloseWindow
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
BackColor = Color.FromArgb(46, 108, 227);
|
||||
ClientSize = new Size(280, 124);
|
||||
ControlBox = false;
|
||||
Controls.Add(panel1);
|
||||
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||
MaximizeBox = false;
|
||||
MinimizeBox = false;
|
||||
Name = "CloseWindow";
|
||||
ShowIcon = false;
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "WelcomeForm";
|
||||
panel1.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Spin spin1;
|
||||
}
|
||||
}
|
38
DHSoftware/Views/CloseWindow.cs
Normal file
38
DHSoftware/Views/CloseWindow.cs
Normal file
@ -0,0 +1,38 @@
|
||||
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 AntdUI;
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class CloseWindow : Window
|
||||
{
|
||||
public CloseWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
Control.CheckForIllegalCrossThreadCalls = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗体对象实例
|
||||
/// </summary>
|
||||
private static CloseWindow _instance;
|
||||
public static CloseWindow Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = new CloseWindow();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
382
DHSoftware/Views/CloseWindow.resx
Normal file
382
DHSoftware/Views/CloseWindow.resx
Normal file
@ -0,0 +1,382 @@
|
||||
<?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>
|
||||
<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>
|
||||
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
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px77vKcf7bym
|
||||
H9i7px+WuqogMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/rumH766px1OuaIjFv//AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+9px/2vacfvbymIGe1nyAYAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/wvKcexbyn
|
||||
Htq7px71vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/a8px/Fu6cgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
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
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAALymIRe7px/DvKcf/7ynH/+8px//vKcf/7ynH/y7pR+Dv4AABAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HF
|
||||
u08AAAAAAAAAAAAAAAAAAAAAAAAAAMyZMwW7px+LvKcf/rynH/+8px//vKcf/7ynH/+8px6ru6oiDwAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/QMS7/0DEvOdAxLvcQMS73EDEu9xAxLvcQMS73EDEu9x0uHrruKkk/rynH/+8px//vKcf/7yn
|
||||
H/+lrTz2TcGp30DEu9xAxLvcQMS73EDEu9xAxLvcQMS73EDEut9AxLv2QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9ivI//s6kr/7yn
|
||||
H/+8px//vKcf/7ynH/+rqzT/T8Co/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9cvZj/sKot/7ynH/+8px//vKcf/7ynH/+xqi7/UcCm/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9bvZj/sKou/7ynH/+8px//vKcf/7ynH/+xqi3/UcCl/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/z/E
|
||||
u7E/w7qNP8O6jT/Duo0/w7qNP8O6jT/Duo1wuH2wtqgm+LynH/+8px//vKcf/7ynH/+0qSntWb6cmj/D
|
||||
uo0/w7qNP8O6jT/Duo0/w7qNP8O6jT/Eu5Y/xLvhQMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/QMS7/0HEvlIzzMwFM8zMBTPMzAUzzMwFM8zMBTPMzAW4qCRku6cf9bynH/+8px//vKcf/7yn
|
||||
H/+8pyDKp6c1HTPMzAUzzMwFM8zMBTPMzAUzzMwFM8zMBUDKvxhAxbu8QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAAAAAAAAAAAAAAAL+/AAS7ph6HvKcf/ryn
|
||||
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
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAD/gAACwqoYFbqoHUa9pR+DvaYewbyoH+G9qB/yvKcf/rynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/rumH5q7qiIegIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+7px/tu6gftbunH8i9px/nu6cf/bynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7yoH/i8px/OvqcdTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/6vKgfx7ymH3K7qhoeAAAAAQAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKgf/ryoH828pR9buqcdGv+AAAIAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/8vKgf8LynH927px+muaYfQv//AAEAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px70u6cf1rymH6+9px+DvKceVL+nICD/gAACAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H+y8px/3u6Yf+bymH++8px7kvacf172nH8C8px6jvqcffb2qH1G3piEuuacaHb+fIBC/vwAEAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS83wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
@ -96,6 +96,7 @@
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
|
@ -3,7 +3,7 @@
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using AntdUI;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Base;
|
||||
using DH.Devices.Vision;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
@ -97,6 +97,7 @@ namespace DHSoftware.Views
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = name,
|
||||
ForeColor = Color.FromArgb(61, 94, 218)
|
||||
};
|
||||
foreach (var item in Cameras)
|
||||
{
|
||||
|
@ -7,10 +7,9 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using System.IO;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Commons.Base;
|
||||
|
||||
|
||||
namespace XKRS.UI.Device.Winform
|
||||
|
@ -8,7 +8,7 @@ namespace AntdUIDemo.Views.Table
|
||||
{
|
||||
public partial class DefectRowEdit : UserControl
|
||||
{
|
||||
DetectConfigControl detectConfigControl;
|
||||
//DetectConfigControl detectConfigControl;
|
||||
private AntdUI.Window window;
|
||||
private DefectRow user;
|
||||
public bool submit;
|
||||
@ -48,6 +48,8 @@ namespace AntdUIDemo.Views.Table
|
||||
user.LabelDescription = input_name.Text;
|
||||
user.ScoreMinValue =(double)input_minScore.Value;
|
||||
user.ScoreMaxValue = (double)input_maxScore.Value;
|
||||
user.AreaMinValue = (double)input_minArea.Value;
|
||||
user.AreaMaxValue = (double)input_maxArea.Value;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
@ -58,8 +60,8 @@ namespace AntdUIDemo.Views.Table
|
||||
// input_addr.Text = user.Address;
|
||||
input_minScore.Value =(decimal) user.ScoreMinValue;
|
||||
input_maxScore.Value =(decimal) user.ScoreMaxValue;
|
||||
input_minArea.Value =(decimal) user.ScoreMaxValue;
|
||||
input_maxScore.Value =(decimal) user.ScoreMaxValue;
|
||||
input_minArea.Value =(decimal) user.AreaMinValue;
|
||||
input_maxArea.Value =(decimal) user.AreaMaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
297
DHSoftware/Views/DetectConfigControl.Designer.cs
generated
297
DHSoftware/Views/DetectConfigControl.Designer.cs
generated
@ -1,297 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class DetectConfigControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new Panel();
|
||||
panel3 = new Panel();
|
||||
label6 = new AntdUI.Label();
|
||||
cbxDetectType = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
tbDetectName = new AntdUI.Input();
|
||||
btnPreOpen = new AntdUI.Button();
|
||||
tbModelpath = new AntdUI.Input();
|
||||
button3 = new AntdUI.Button();
|
||||
switchEnable = new AntdUI.Switch();
|
||||
label8 = new AntdUI.Label();
|
||||
label10 = new AntdUI.Label();
|
||||
sthPic = new AntdUI.Switch();
|
||||
sthSaveNGPic = new AntdUI.Switch();
|
||||
label7 = new AntdUI.Label();
|
||||
label9 = new AntdUI.Label();
|
||||
swSaveOKPic = new AntdUI.Switch();
|
||||
panel2 = new Panel();
|
||||
label2 = new AntdUI.Label();
|
||||
buttonDEL = new AntdUI.Button();
|
||||
table_base = new AntdUI.Table();
|
||||
buttonADD = new AntdUI.Button();
|
||||
panel1.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.BorderStyle = BorderStyle.FixedSingle;
|
||||
panel1.Controls.Add(panel3);
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(600, 445);
|
||||
panel1.TabIndex = 0;
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Controls.Add(label6);
|
||||
panel3.Controls.Add(cbxDetectType);
|
||||
panel3.Controls.Add(label1);
|
||||
panel3.Controls.Add(tbDetectName);
|
||||
panel3.Controls.Add(btnPreOpen);
|
||||
panel3.Controls.Add(tbModelpath);
|
||||
panel3.Controls.Add(button3);
|
||||
panel3.Controls.Add(switchEnable);
|
||||
panel3.Controls.Add(label8);
|
||||
panel3.Controls.Add(label10);
|
||||
panel3.Controls.Add(sthPic);
|
||||
panel3.Controls.Add(sthSaveNGPic);
|
||||
panel3.Controls.Add(label7);
|
||||
panel3.Controls.Add(label9);
|
||||
panel3.Controls.Add(swSaveOKPic);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(598, 206);
|
||||
panel3.TabIndex = 41;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
label6.Location = new Point(3, 15);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(58, 23);
|
||||
label6.TabIndex = 25;
|
||||
label6.Text = "检测名称";
|
||||
//
|
||||
// cbxDetectType
|
||||
//
|
||||
cbxDetectType.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
cbxDetectType.Location = new Point(341, 7);
|
||||
cbxDetectType.Name = "cbxDetectType";
|
||||
cbxDetectType.Size = new Size(226, 31);
|
||||
cbxDetectType.TabIndex = 40;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(3, 44);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(73, 23);
|
||||
label1.TabIndex = 9;
|
||||
label1.Text = "模型路径";
|
||||
//
|
||||
// tbDetectName
|
||||
//
|
||||
tbDetectName.Location = new Point(82, 7);
|
||||
tbDetectName.Name = "tbDetectName";
|
||||
tbDetectName.Size = new Size(249, 31);
|
||||
tbDetectName.TabIndex = 39;
|
||||
//
|
||||
// btnPreOpen
|
||||
//
|
||||
btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
btnPreOpen.Location = new Point(507, 36);
|
||||
btnPreOpen.MinimumSize = new Size(20, 0);
|
||||
btnPreOpen.Name = "btnPreOpen";
|
||||
btnPreOpen.Size = new Size(60, 31);
|
||||
btnPreOpen.TabIndex = 22;
|
||||
btnPreOpen.Text = "...";
|
||||
//
|
||||
// tbModelpath
|
||||
//
|
||||
tbModelpath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbModelpath.Location = new Point(82, 36);
|
||||
tbModelpath.Name = "tbModelpath";
|
||||
tbModelpath.Size = new Size(415, 31);
|
||||
tbModelpath.TabIndex = 38;
|
||||
//
|
||||
// button3
|
||||
//
|
||||
button3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
button3.Location = new Point(385, 73);
|
||||
button3.Name = "button3";
|
||||
button3.Size = new Size(182, 34);
|
||||
button3.TabIndex = 37;
|
||||
button3.Text = "查看文件夹";
|
||||
//
|
||||
// switchEnable
|
||||
//
|
||||
switchEnable.Location = new Point(82, 84);
|
||||
switchEnable.Name = "switchEnable";
|
||||
switchEnable.Size = new Size(60, 23);
|
||||
switchEnable.TabIndex = 27;
|
||||
switchEnable.Text = "switch1";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
label8.Location = new Point(3, 84);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(58, 23);
|
||||
label8.TabIndex = 28;
|
||||
label8.Text = "模型启用";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
label10.Location = new Point(176, 113);
|
||||
label10.Name = "label10";
|
||||
label10.Size = new Size(73, 23);
|
||||
label10.TabIndex = 34;
|
||||
label10.Text = "保存NG原图";
|
||||
//
|
||||
// sthPic
|
||||
//
|
||||
sthPic.Location = new Point(263, 84);
|
||||
sthPic.Name = "sthPic";
|
||||
sthPic.Size = new Size(60, 23);
|
||||
sthPic.TabIndex = 29;
|
||||
sthPic.Text = "switch2";
|
||||
//
|
||||
// sthSaveNGPic
|
||||
//
|
||||
sthSaveNGPic.Location = new Point(263, 113);
|
||||
sthSaveNGPic.Name = "sthSaveNGPic";
|
||||
sthSaveNGPic.Size = new Size(60, 23);
|
||||
sthSaveNGPic.TabIndex = 33;
|
||||
sthSaveNGPic.Text = "switch4";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Location = new Point(184, 84);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(58, 23);
|
||||
label7.TabIndex = 30;
|
||||
label7.Text = "数据保存";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
label9.Location = new Point(3, 113);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(73, 23);
|
||||
label9.TabIndex = 32;
|
||||
label9.Text = "保存OK原图";
|
||||
//
|
||||
// swSaveOKPic
|
||||
//
|
||||
swSaveOKPic.Location = new Point(82, 113);
|
||||
swSaveOKPic.Name = "swSaveOKPic";
|
||||
swSaveOKPic.Size = new Size(60, 23);
|
||||
swSaveOKPic.TabIndex = 31;
|
||||
swSaveOKPic.Text = "switch3";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(label2);
|
||||
panel2.Controls.Add(buttonDEL);
|
||||
panel2.Controls.Add(table_base);
|
||||
panel2.Controls.Add(buttonADD);
|
||||
panel2.Dock = DockStyle.Bottom;
|
||||
panel2.Location = new Point(0, 206);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(598, 237);
|
||||
panel2.TabIndex = 35;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Location = new Point(3, 3);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(58, 23);
|
||||
label2.TabIndex = 29;
|
||||
label2.Text = "模型参数";
|
||||
//
|
||||
// buttonDEL
|
||||
//
|
||||
buttonDEL.Location = new Point(93, 28);
|
||||
buttonDEL.Name = "buttonDEL";
|
||||
buttonDEL.Size = new Size(84, 34);
|
||||
buttonDEL.TabIndex = 24;
|
||||
buttonDEL.Text = "删除";
|
||||
//
|
||||
// table_base
|
||||
//
|
||||
table_base.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
table_base.Location = new Point(0, 68);
|
||||
table_base.Name = "table_base";
|
||||
table_base.Size = new Size(598, 169);
|
||||
table_base.TabIndex = 22;
|
||||
table_base.Text = "table1";
|
||||
//
|
||||
// buttonADD
|
||||
//
|
||||
buttonADD.Location = new Point(3, 28);
|
||||
buttonADD.Name = "buttonADD";
|
||||
buttonADD.Size = new Size(84, 34);
|
||||
buttonADD.TabIndex = 23;
|
||||
buttonADD.Text = "新增";
|
||||
//
|
||||
// DetectConfigControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "DetectConfigControl";
|
||||
Size = new Size(600, 445);
|
||||
panel1.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Panel panel1;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.Button btnPreOpen;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.Switch sthPic;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.Switch switchEnable;
|
||||
private AntdUI.Label label10;
|
||||
private AntdUI.Switch sthSaveNGPic;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.Switch swSaveOKPic;
|
||||
private Panel panel2;
|
||||
private AntdUI.Button buttonDEL;
|
||||
private AntdUI.Table table_base;
|
||||
private AntdUI.Button buttonADD;
|
||||
private AntdUI.Button button3;
|
||||
private AntdUI.Input tbDetectName;
|
||||
private AntdUI.Input tbModelpath;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Select cbxDetectType;
|
||||
private Panel panel3;
|
||||
}
|
||||
}
|
@ -1,459 +0,0 @@
|
||||
using AntdUI;
|
||||
using AntdUIDemo.Views.Table;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Vision;
|
||||
using DHSoftware.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using DH.Devices.Vision;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class DetectConfigControl : UserControl
|
||||
{
|
||||
|
||||
private DetectionConfig _currentConfig = new DetectionConfig();
|
||||
private readonly string _configName;
|
||||
List<KeyValuePair<string, int>> MLModelTypes = GetFilteredEnumDescriptionsAndValues<MLModelType>();
|
||||
|
||||
public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValues<T>() where T : Enum
|
||||
{
|
||||
return Enum.GetValues(typeof(T))
|
||||
.Cast<T>()
|
||||
.Select(e =>
|
||||
{
|
||||
// 获取枚举的 Description 属性,如果没有,则使用枚举的名称
|
||||
var description = e.GetType()
|
||||
.GetField(e.ToString())
|
||||
?.GetCustomAttribute<DescriptionAttribute>()
|
||||
?.Description ?? e.ToString();
|
||||
|
||||
// 返回枚举的描述和对应的整数值
|
||||
return new KeyValuePair<string, int>(description, Convert.ToInt32(e));
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
|
||||
List<KeyValuePair<string, int>> resultStates = GetFilteredEnumDescriptionsAndValues<ResultState>();
|
||||
// 获取枚举的描述和对应的值,只筛选出 OK 和 NG
|
||||
public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValuesres<T>() where T : Enum
|
||||
{
|
||||
return Enum.GetValues(typeof(T))
|
||||
.Cast<T>()
|
||||
.Where(e => e.Equals(ResultState.OK) || e.Equals(ResultState.DetectNG)) // 只保留 OK 和 NG
|
||||
.Select(e =>
|
||||
{
|
||||
// 通过反射获取 DescriptionAttribute 描述,如果没有描述,则使用枚举项名称
|
||||
var description = e.GetType()
|
||||
.GetField(e.ToString())
|
||||
?.GetCustomAttribute<DescriptionAttribute>()
|
||||
?.Description ?? e.ToString(); // 如果没有 DescriptionAttribute,则使用枚举名称
|
||||
|
||||
// 返回描述和值的键值对
|
||||
return new KeyValuePair<string, int>(description, Convert.ToInt32(e));
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
DetectionConfig Detection = new DetectionConfig();
|
||||
AntList<DefectRow> antList;
|
||||
public AntdUI.Window _window;
|
||||
DefectRow curUser;
|
||||
public DetectConfigControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitTableColumns();
|
||||
InitData();
|
||||
BindEventHandler();
|
||||
foreach (var item in MLModelTypes)
|
||||
{
|
||||
cbxDetectType.Items.Add(item.Key);
|
||||
}
|
||||
cbxDetectType.SelectedIndex = (int)Detection.ModelType - 1;
|
||||
tbDetectName.Text = Detection.Name;
|
||||
|
||||
}
|
||||
|
||||
public bool IsEnabled
|
||||
{
|
||||
get => switchEnable.AutoCheck;
|
||||
set => switchEnable.AutoCheck = value;
|
||||
}
|
||||
// 模型路径属性
|
||||
public string ModelPath
|
||||
{
|
||||
get => Detection.ModelPath;
|
||||
set
|
||||
{
|
||||
Detection.ModelPath = value;
|
||||
tbModelpath.Text = value; // 更新到文本框
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public bool IsPicNGEnable
|
||||
{
|
||||
|
||||
get => sthSaveNGPic.AutoCheck;
|
||||
set => sthSaveNGPic.AutoCheck = value;
|
||||
}
|
||||
public bool IsPicEnable
|
||||
{
|
||||
|
||||
get => sthPic.AutoCheck;
|
||||
set => sthPic.AutoCheck = value;
|
||||
}
|
||||
//public MLModelType LModelType
|
||||
//{
|
||||
|
||||
//}
|
||||
|
||||
private string _picTag;
|
||||
|
||||
public string picTag
|
||||
{
|
||||
get => _picTag;
|
||||
set
|
||||
{
|
||||
_picTag = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private string _afterTag;
|
||||
|
||||
public string afterTag
|
||||
{
|
||||
get => _afterTag;
|
||||
set
|
||||
{
|
||||
_afterTag = value;
|
||||
}
|
||||
}
|
||||
private void InitTableColumns()
|
||||
{
|
||||
table_base.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("LabelDescription", "标签名", ColumnAlign.Center)
|
||||
{
|
||||
Width="120",
|
||||
//设置树节点,名称需和User里的User[]名称保持一致
|
||||
KeyTree = "Users"
|
||||
},
|
||||
new ColumnSwitch("IsEnable", "是否启用", ColumnAlign.Center){
|
||||
//支持点击回调
|
||||
//Call= (value,record, i_row, i_col) =>{
|
||||
// //执行耗时操作
|
||||
// Thread.Sleep(10);
|
||||
// // AntdUI.Message.info(window, value.ToString(),autoClose:1);
|
||||
// return value;
|
||||
//}
|
||||
},
|
||||
new Column("ScoreMinValue", "最小得分",ColumnAlign.Center),
|
||||
new Column("ScoreMaxValue", "最大得分",ColumnAlign.Center),
|
||||
|
||||
new Column("AreaMinValue", "最小面积",ColumnAlign.Center),
|
||||
new Column("AreaMaxValue", "最大面积",ColumnAlign.Center),
|
||||
//new Column("CellBadge", "徽标",ColumnAlign.Center),
|
||||
//new Column("CellText", "富文本")
|
||||
//{
|
||||
// ColAlign = ColumnAlign.Center,//支持表头位置单独设置
|
||||
//},
|
||||
//new Column("CellProgress", "进度条",ColumnAlign.Center),
|
||||
//new Column("CellDivider", "分割线",ColumnAlign.Center),
|
||||
//new Column("CellLinks", "链接", ColumnAlign.Center)
|
||||
//{
|
||||
// Fixed = true,//冻结列
|
||||
//},
|
||||
};
|
||||
}
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
antList = new AntList<DefectRow>();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
antList.Add(new DefectRow
|
||||
{
|
||||
LabelDescription = "张三",
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
table_base.Binding(antList);
|
||||
|
||||
//设置行禁用
|
||||
// table_base.SetRowEnable(0, false, true);
|
||||
}
|
||||
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
buttonADD.Click += ButtonADD_Click;
|
||||
buttonDEL.Click += ButtonDEL_Click;
|
||||
|
||||
|
||||
table_base.CellClick += Table_base_CellClick;
|
||||
table_base.CellButtonClick += Table_base_CellButtonClick;
|
||||
}
|
||||
|
||||
|
||||
private AntdUI.Table.CellStyleInfo Table_base_SetRowStyle(object sender, TableSetRowStyleEventArgs e)
|
||||
{
|
||||
if (e.RowIndex % 2 == 0)
|
||||
{
|
||||
return new AntdUI.Table.CellStyleInfo
|
||||
{
|
||||
BackColor = AntdUI.Style.Db.ErrorBg,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void ButtonADD_Click(object sender, EventArgs e)
|
||||
{
|
||||
DefectRow useradd = new DefectRow()
|
||||
{
|
||||
LabelDescription="xinquexian",
|
||||
IsEnable=true,
|
||||
ScoreMinValue=0.3,
|
||||
ScoreMaxValue=1,
|
||||
AreaMinValue=1,
|
||||
AreaMaxValue=999999999,
|
||||
|
||||
};
|
||||
var form = new DefectRowEdit(_window, useradd) { Size = new Size(700, 500) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(_window, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
antList.Add(useradd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void Table_base_CellClick(object sender, TableClickEventArgs e)
|
||||
{
|
||||
var record = e.Record;
|
||||
if (record is DefectRow user)
|
||||
{
|
||||
curUser = user;
|
||||
//判断是否右键
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
if (antList.Count == 0) return;
|
||||
AntdUI.ContextMenuStrip.open(new AntdUI.ContextMenuStrip.Config(table_base,
|
||||
(item) =>
|
||||
{
|
||||
if (item.Text == "开启")
|
||||
{
|
||||
user.IsEnable = true;
|
||||
}
|
||||
else if (item.Text == "关闭")
|
||||
{
|
||||
user.IsEnable = false;
|
||||
}
|
||||
else if (item.Text == "编辑")
|
||||
{
|
||||
var form = new DefectRowEdit(_window, user) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(_window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(_window, "进入编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(_window, "结束编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (item.Text == "删除")
|
||||
{
|
||||
var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
//父元素没有勾选或者子元素也没有勾选,则删除当前行
|
||||
bool delCurrent = !antList.Any(x => x.Selected /*|| (x.?.Any(u => u.Selected) ?? false)*/);
|
||||
|
||||
if (delCurrent)
|
||||
{
|
||||
//删除当前行,先判断是否父元素,再判断是否子元素,只支持一层子元素,需实现嵌套查询
|
||||
for (int i = 0; i < antList.Count; i++)
|
||||
{
|
||||
if (antList[i] == user)
|
||||
{
|
||||
antList.RemoveAt(i);
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// antList[i].Users = antList[i].Users?.Where(x => x != user).ToArray();
|
||||
//}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = antList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 1.删除选中的主列表项
|
||||
if (antList[i].Selected)
|
||||
{
|
||||
antList.RemoveAt(i);
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// // 删除子列表中选中的项
|
||||
// antList[i].Users = antList[i].Users?.Where(childUser => !childUser.Selected).ToArray();
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (item.Text == "查看图片")
|
||||
{
|
||||
//查看其他来源的高清图片
|
||||
Preview.open(new Preview.Config(_window, Properties.Resources.head2));
|
||||
}
|
||||
else
|
||||
AntdUI.Message.info(_window, item.Text, autoClose: 1);
|
||||
},
|
||||
new IContextMenuStripItem[] {
|
||||
//根据行数据动态修改右键菜单
|
||||
user.IsEnable? new ContextMenuStripItem("关闭")
|
||||
{
|
||||
IconSvg = "CloseOutlined"
|
||||
}:new ContextMenuStripItem("开启")
|
||||
{
|
||||
IconSvg = "CheckOutlined"
|
||||
},
|
||||
new AntdUI.ContextMenuStripItem("编辑"){
|
||||
IconSvg = "EditOutlined",
|
||||
},
|
||||
new AntdUI.ContextMenuStripItem("删除"){
|
||||
IconSvg = "DeleteOutlined"
|
||||
},
|
||||
new ContextMenuStripItem("查看图片")
|
||||
{
|
||||
IconSvg = "FundViewOutlined"
|
||||
},
|
||||
new ContextMenuStripItemDivider(),
|
||||
new AntdUI.ContextMenuStripItem("详情"){
|
||||
Sub = new IContextMenuStripItem[]{ new AntdUI.ContextMenuStripItem("打印", "Ctrl + P") { },
|
||||
new AntdUI.ContextMenuStripItem("另存为", "Ctrl + S") { } },
|
||||
IconSvg = "<svg t=\"1725101601993\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1414\" width=\"200\" height=\"200\"><path d=\"M450.23 831.7c-164.87 0-316.85-108.51-366.94-269.68-30.4-97.82-20.9-201.62 26.76-292.29s127.79-157.35 225.6-187.75c97.83-30.42 201.61-20.9 292.29 26.76 90.67 47.67 157.35 127.79 187.75 225.61 35.78 115.12 16.24 237.58-53.6 335.99a383.494 383.494 0 0 1-43 50.66c-15.04 14.89-39.34 14.78-54.23-0.29-14.9-15.05-14.77-39.34 0.29-54.23a307.844 307.844 0 0 0 34.39-40.52c55.9-78.76 71.54-176.75 42.92-268.84-50.21-161.54-222.49-252.1-384.03-201.9-78.26 24.32-142.35 77.67-180.48 150.2-38.14 72.53-45.74 155.57-21.42 233.83 44.58 143.44 190.03 234.7 338.26 212.42 20.98-3.14 40.48 11.26 43.64 32.2 3.16 20.95-11.26 40.48-32.2 43.64a377.753 377.753 0 0 1-56 4.19z\" p-id=\"1415\"></path><path d=\"M919.84 959.5c-9.81 0-19.63-3.74-27.11-11.24L666.75 722.29c-14.98-14.97-14.98-39.25 0-54.23 14.97-14.98 39.26-14.98 54.23 0l225.97 225.97c14.98 14.97 14.98 39.25 0 54.23-7.48 7.5-17.3 11.24-27.11 11.24z\" p-id=\"1416\"></path></svg>",
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//表格内部按钮事件
|
||||
private void Table_base_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is DefectRow user)
|
||||
{
|
||||
curUser = user;
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new DefectRowEdit(_window, user) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(_window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(_window, "进入编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(_window, "结束编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "删除":
|
||||
var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
antList.Remove(user);
|
||||
break;
|
||||
case "AntdUI":
|
||||
//超链接内容
|
||||
// AntdUI.Message.info(_window, user.CellLinks.FirstOrDefault().Id, autoClose: 1);
|
||||
break;
|
||||
case "查看图片":
|
||||
//使用clone可以防止table中的image被修改
|
||||
// Preview.open(new Preview.Config(window, (Image)curUser.CellImages[0].Image.Clone()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonDEL_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (antList.Count == 0 || !antList.Any(x => x.Selected))
|
||||
{
|
||||
bool isSubSelected = false;
|
||||
//// 判断子元素是否勾选
|
||||
//for (int i = 0; i < antList.Count; i++)
|
||||
//{
|
||||
// if (antList[i].Users != null && antList[i].Users.Any(x => x.Selected))
|
||||
// {
|
||||
// isSubSelected = true;
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
if (!isSubSelected)
|
||||
{
|
||||
AntdUI.Message.warn(_window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = antList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (antList[i].Selected)
|
||||
{
|
||||
antList.RemoveAt(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 删除子列表中选中的项
|
||||
// antList[i].Users = antList[i].Users?.Where(user => !user.Selected).ToArray();
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
// AntdUI.Message.success(this.w, "删除成功!", autoClose: 3);
|
||||
MessageBox.Show("删除成功!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
263
DHSoftware/Views/DetectControl.Designer.cs
generated
263
DHSoftware/Views/DetectControl.Designer.cs
generated
@ -40,8 +40,8 @@
|
||||
btnPreAdd = new AntdUI.Button();
|
||||
preTable = new AntdUI.Table();
|
||||
label3 = new AntdUI.Label();
|
||||
btnPath = new AntdUI.Button();
|
||||
swtPre = new AntdUI.Switch();
|
||||
btnPrePath = new AntdUI.Button();
|
||||
sthPreStatus = new AntdUI.Switch();
|
||||
label2 = new AntdUI.Label();
|
||||
iptPrePath = new AntdUI.Input();
|
||||
label1 = new AntdUI.Label();
|
||||
@ -51,34 +51,33 @@
|
||||
lableTable = new AntdUI.Table();
|
||||
label15 = new AntdUI.Label();
|
||||
btnPic = new AntdUI.Button();
|
||||
switch6 = new AntdUI.Switch();
|
||||
sthDetectNG = new AntdUI.Switch();
|
||||
label13 = new AntdUI.Label();
|
||||
switch7 = new AntdUI.Switch();
|
||||
sthOKDetect = new AntdUI.Switch();
|
||||
label14 = new AntdUI.Label();
|
||||
switch4 = new AntdUI.Switch();
|
||||
sthNGOriginal = new AntdUI.Switch();
|
||||
label6 = new AntdUI.Label();
|
||||
switch5 = new AntdUI.Switch();
|
||||
sthOKOriginal = new AntdUI.Switch();
|
||||
label12 = new AntdUI.Label();
|
||||
iptScore = new AntdUI.Input();
|
||||
iptConfidence = new AntdUI.Input();
|
||||
label5 = new AntdUI.Label();
|
||||
flowPanel1 = new AntdUI.FlowPanel();
|
||||
flowCameraPanel = new AntdUI.FlowPanel();
|
||||
label11 = new AntdUI.Label();
|
||||
swIsAddStation = new AntdUI.Switch();
|
||||
sthStation = new AntdUI.Switch();
|
||||
label10 = new AntdUI.Label();
|
||||
stDetectType = new AntdUI.Select();
|
||||
label9 = new AntdUI.Label();
|
||||
btnCorrelatedCamera = new AntdUI.Button();
|
||||
btnPath2 = new AntdUI.Button();
|
||||
swIsEnabled = new AntdUI.Switch();
|
||||
sthDetectStatus = new AntdUI.Switch();
|
||||
label7 = new AntdUI.Label();
|
||||
iptModelPath = new AntdUI.Input();
|
||||
iptDetectPath = new AntdUI.Input();
|
||||
label8 = new AntdUI.Label();
|
||||
tabPage3 = new AntdUI.TabPage();
|
||||
tabPage4 = new AntdUI.TabPage();
|
||||
btnSizeDel = new AntdUI.Button();
|
||||
btnSizeAdd = new AntdUI.Button();
|
||||
SizeTable = new AntdUI.Table();
|
||||
label17 = new AntdUI.Label();
|
||||
tabs1.SuspendLayout();
|
||||
tabPage1.SuspendLayout();
|
||||
tabPage2.SuspendLayout();
|
||||
@ -96,6 +95,7 @@
|
||||
tabs1.Pages.Add(tabPage1);
|
||||
tabs1.Pages.Add(tabPage2);
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.SelectedIndex = 1;
|
||||
tabs1.Size = new Size(915, 609);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 1;
|
||||
@ -111,8 +111,8 @@
|
||||
tabPage1.Controls.Add(btnPreAdd);
|
||||
tabPage1.Controls.Add(preTable);
|
||||
tabPage1.Controls.Add(label3);
|
||||
tabPage1.Controls.Add(btnPath);
|
||||
tabPage1.Controls.Add(swtPre);
|
||||
tabPage1.Controls.Add(btnPrePath);
|
||||
tabPage1.Controls.Add(sthPreStatus);
|
||||
tabPage1.Controls.Add(label2);
|
||||
tabPage1.Controls.Add(iptPrePath);
|
||||
tabPage1.Controls.Add(label1);
|
||||
@ -158,6 +158,8 @@
|
||||
//
|
||||
// PreOutTable
|
||||
//
|
||||
PreOutTable.EmptyHeader = true;
|
||||
PreOutTable.EnableHeaderResizing = true;
|
||||
PreOutTable.Location = new Point(191, 355);
|
||||
PreOutTable.Name = "PreOutTable";
|
||||
PreOutTable.Size = new Size(423, 181);
|
||||
@ -192,6 +194,8 @@
|
||||
//
|
||||
// preTable
|
||||
//
|
||||
preTable.EmptyHeader = true;
|
||||
preTable.EnableHeaderResizing = true;
|
||||
preTable.Location = new Point(191, 148);
|
||||
preTable.Name = "preTable";
|
||||
preTable.Size = new Size(423, 181);
|
||||
@ -206,27 +210,27 @@
|
||||
label3.TabIndex = 1;
|
||||
label3.Text = "输入参数";
|
||||
//
|
||||
// btnPath
|
||||
// btnPrePath
|
||||
//
|
||||
btnPath.BorderWidth = 2F;
|
||||
btnPath.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnPath.Ghost = true;
|
||||
btnPath.IconRatio = 0.8F;
|
||||
btnPath.IconSvg = resources.GetString("btnPath.IconSvg");
|
||||
btnPath.Location = new Point(620, 79);
|
||||
btnPath.Name = "btnPath";
|
||||
btnPath.Size = new Size(80, 38);
|
||||
btnPath.TabIndex = 7;
|
||||
btnPath.Text = "打开";
|
||||
btnPrePath.BorderWidth = 2F;
|
||||
btnPrePath.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnPrePath.Ghost = true;
|
||||
btnPrePath.IconRatio = 0.8F;
|
||||
btnPrePath.IconSvg = resources.GetString("btnPrePath.IconSvg");
|
||||
btnPrePath.Location = new Point(620, 79);
|
||||
btnPrePath.Name = "btnPrePath";
|
||||
btnPrePath.Size = new Size(80, 38);
|
||||
btnPrePath.TabIndex = 7;
|
||||
btnPrePath.Text = "打开";
|
||||
//
|
||||
// swtPre
|
||||
// sthPreStatus
|
||||
//
|
||||
swtPre.CheckedText = "启用";
|
||||
swtPre.Location = new Point(207, 33);
|
||||
swtPre.Name = "swtPre";
|
||||
swtPre.Size = new Size(82, 33);
|
||||
swtPre.TabIndex = 4;
|
||||
swtPre.UnCheckedText = "关闭";
|
||||
sthPreStatus.CheckedText = "启用";
|
||||
sthPreStatus.Location = new Point(207, 33);
|
||||
sthPreStatus.Name = "sthPreStatus";
|
||||
sthPreStatus.Size = new Size(82, 33);
|
||||
sthPreStatus.TabIndex = 4;
|
||||
sthPreStatus.UnCheckedText = "关闭";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
@ -240,7 +244,7 @@
|
||||
//
|
||||
iptPrePath.Location = new Point(191, 79);
|
||||
iptPrePath.Name = "iptPrePath";
|
||||
iptPrePath.PlaceholderText = "请点击打开按钮选择预处理路径";
|
||||
iptPrePath.PlaceholderText = "请点击打开按钮选择模型路径";
|
||||
iptPrePath.ReadOnly = true;
|
||||
iptPrePath.Size = new Size(423, 42);
|
||||
iptPrePath.TabIndex = 1;
|
||||
@ -260,34 +264,33 @@
|
||||
tabPage2.Controls.Add(lableTable);
|
||||
tabPage2.Controls.Add(label15);
|
||||
tabPage2.Controls.Add(btnPic);
|
||||
tabPage2.Controls.Add(switch6);
|
||||
tabPage2.Controls.Add(sthDetectNG);
|
||||
tabPage2.Controls.Add(label13);
|
||||
tabPage2.Controls.Add(switch7);
|
||||
tabPage2.Controls.Add(sthOKDetect);
|
||||
tabPage2.Controls.Add(label14);
|
||||
tabPage2.Controls.Add(switch4);
|
||||
tabPage2.Controls.Add(sthNGOriginal);
|
||||
tabPage2.Controls.Add(label6);
|
||||
tabPage2.Controls.Add(switch5);
|
||||
tabPage2.Controls.Add(sthOKOriginal);
|
||||
tabPage2.Controls.Add(label12);
|
||||
tabPage2.Controls.Add(iptScore);
|
||||
tabPage2.Controls.Add(iptConfidence);
|
||||
tabPage2.Controls.Add(label5);
|
||||
tabPage2.Controls.Add(flowPanel1);
|
||||
tabPage2.Controls.Add(flowCameraPanel);
|
||||
tabPage2.Controls.Add(label11);
|
||||
tabPage2.Controls.Add(swIsAddStation);
|
||||
tabPage2.Controls.Add(sthStation);
|
||||
tabPage2.Controls.Add(label10);
|
||||
tabPage2.Controls.Add(stDetectType);
|
||||
tabPage2.Controls.Add(label9);
|
||||
tabPage2.Controls.Add(btnCorrelatedCamera);
|
||||
tabPage2.Controls.Add(btnPath2);
|
||||
tabPage2.Controls.Add(swIsEnabled);
|
||||
tabPage2.Controls.Add(sthDetectStatus);
|
||||
tabPage2.Controls.Add(label7);
|
||||
tabPage2.Controls.Add(iptModelPath);
|
||||
tabPage2.Controls.Add(iptDetectPath);
|
||||
tabPage2.Controls.Add(label8);
|
||||
tabPage2.Location = new Point(-909, -575);
|
||||
tabPage2.Location = new Point(3, 31);
|
||||
tabPage2.Name = "tabPage2";
|
||||
tabPage2.Size = new Size(909, 575);
|
||||
tabPage2.TabIndex = 1;
|
||||
tabPage2.Text = "模型检测";
|
||||
tabPage2.Click += tabPage2_Click;
|
||||
//
|
||||
// btnLableDelete
|
||||
//
|
||||
@ -317,7 +320,8 @@
|
||||
//
|
||||
// lableTable
|
||||
//
|
||||
lableTable.BackColor = SystemColors.ControlLight;
|
||||
lableTable.BackColor = SystemColors.Window;
|
||||
lableTable.EmptyHeader = true;
|
||||
lableTable.Location = new Point(110, 252);
|
||||
lableTable.Name = "lableTable";
|
||||
lableTable.Size = new Size(656, 288);
|
||||
@ -345,14 +349,14 @@
|
||||
btnPic.TabIndex = 44;
|
||||
btnPic.Text = "查看图片";
|
||||
//
|
||||
// switch6
|
||||
// sthDetectNG
|
||||
//
|
||||
switch6.CheckedText = "启用";
|
||||
switch6.Location = new Point(607, 194);
|
||||
switch6.Name = "switch6";
|
||||
switch6.Size = new Size(82, 33);
|
||||
switch6.TabIndex = 43;
|
||||
switch6.UnCheckedText = "关闭";
|
||||
sthDetectNG.CheckedText = "启用";
|
||||
sthDetectNG.Location = new Point(607, 194);
|
||||
sthDetectNG.Name = "sthDetectNG";
|
||||
sthDetectNG.Size = new Size(82, 33);
|
||||
sthDetectNG.TabIndex = 43;
|
||||
sthDetectNG.UnCheckedText = "关闭";
|
||||
//
|
||||
// label13
|
||||
//
|
||||
@ -362,14 +366,14 @@
|
||||
label13.TabIndex = 42;
|
||||
label13.Text = "NG检测图";
|
||||
//
|
||||
// switch7
|
||||
// sthOKDetect
|
||||
//
|
||||
switch7.CheckedText = "启用";
|
||||
switch7.Location = new Point(438, 194);
|
||||
switch7.Name = "switch7";
|
||||
switch7.Size = new Size(82, 33);
|
||||
switch7.TabIndex = 41;
|
||||
switch7.UnCheckedText = "关闭";
|
||||
sthOKDetect.CheckedText = "启用";
|
||||
sthOKDetect.Location = new Point(438, 194);
|
||||
sthOKDetect.Name = "sthOKDetect";
|
||||
sthOKDetect.Size = new Size(82, 33);
|
||||
sthOKDetect.TabIndex = 41;
|
||||
sthOKDetect.UnCheckedText = "关闭";
|
||||
//
|
||||
// label14
|
||||
//
|
||||
@ -379,14 +383,14 @@
|
||||
label14.TabIndex = 40;
|
||||
label14.Text = "OK检测图";
|
||||
//
|
||||
// switch4
|
||||
// sthNGOriginal
|
||||
//
|
||||
switch4.CheckedText = "启用";
|
||||
switch4.Location = new Point(270, 194);
|
||||
switch4.Name = "switch4";
|
||||
switch4.Size = new Size(82, 33);
|
||||
switch4.TabIndex = 39;
|
||||
switch4.UnCheckedText = "关闭";
|
||||
sthNGOriginal.CheckedText = "启用";
|
||||
sthNGOriginal.Location = new Point(270, 194);
|
||||
sthNGOriginal.Name = "sthNGOriginal";
|
||||
sthNGOriginal.Size = new Size(82, 33);
|
||||
sthNGOriginal.TabIndex = 39;
|
||||
sthNGOriginal.UnCheckedText = "关闭";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
@ -396,14 +400,14 @@
|
||||
label6.TabIndex = 38;
|
||||
label6.Text = "NG原图";
|
||||
//
|
||||
// switch5
|
||||
// sthOKOriginal
|
||||
//
|
||||
switch5.CheckedText = "启用";
|
||||
switch5.Location = new Point(110, 194);
|
||||
switch5.Name = "switch5";
|
||||
switch5.Size = new Size(82, 33);
|
||||
switch5.TabIndex = 37;
|
||||
switch5.UnCheckedText = "关闭";
|
||||
sthOKOriginal.CheckedText = "启用";
|
||||
sthOKOriginal.Location = new Point(110, 194);
|
||||
sthOKOriginal.Name = "sthOKOriginal";
|
||||
sthOKOriginal.Size = new Size(82, 33);
|
||||
sthOKOriginal.TabIndex = 37;
|
||||
sthOKOriginal.UnCheckedText = "关闭";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
@ -413,13 +417,14 @@
|
||||
label12.TabIndex = 36;
|
||||
label12.Text = "OK原图";
|
||||
//
|
||||
// iptScore
|
||||
// iptConfidence
|
||||
//
|
||||
iptScore.Location = new Point(649, 24);
|
||||
iptScore.Name = "iptScore";
|
||||
iptScore.PlaceholderText = "";
|
||||
iptScore.Size = new Size(117, 42);
|
||||
iptScore.TabIndex = 35;
|
||||
iptConfidence.Location = new Point(649, 24);
|
||||
iptConfidence.Name = "iptConfidence";
|
||||
iptConfidence.PlaceholderText = "";
|
||||
iptConfidence.ReadOnly = true;
|
||||
iptConfidence.Size = new Size(117, 42);
|
||||
iptConfidence.TabIndex = 35;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
@ -429,15 +434,15 @@
|
||||
label5.TabIndex = 34;
|
||||
label5.Text = "置信度";
|
||||
//
|
||||
// flowPanel1
|
||||
// flowCameraPanel
|
||||
//
|
||||
flowPanel1.AutoScroll = true;
|
||||
flowPanel1.BackColor = SystemColors.ControlLight;
|
||||
flowPanel1.Location = new Point(110, 136);
|
||||
flowPanel1.Name = "flowPanel1";
|
||||
flowPanel1.Size = new Size(656, 49);
|
||||
flowPanel1.TabIndex = 33;
|
||||
flowPanel1.Text = "flowPanel1";
|
||||
flowCameraPanel.AutoScroll = true;
|
||||
flowCameraPanel.BackColor = SystemColors.Window;
|
||||
flowCameraPanel.Location = new Point(110, 136);
|
||||
flowCameraPanel.Name = "flowCameraPanel";
|
||||
flowCameraPanel.Size = new Size(656, 49);
|
||||
flowCameraPanel.TabIndex = 33;
|
||||
flowCameraPanel.Text = "flowPanel1";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
@ -447,14 +452,14 @@
|
||||
label11.TabIndex = 32;
|
||||
label11.Text = "关联相机";
|
||||
//
|
||||
// swIsAddStation
|
||||
// sthStation
|
||||
//
|
||||
swIsAddStation.CheckedText = "启用";
|
||||
swIsAddStation.Location = new Point(270, 26);
|
||||
swIsAddStation.Name = "swIsAddStation";
|
||||
swIsAddStation.Size = new Size(82, 33);
|
||||
swIsAddStation.TabIndex = 31;
|
||||
swIsAddStation.UnCheckedText = "关闭";
|
||||
sthStation.CheckedText = "启用";
|
||||
sthStation.Location = new Point(270, 26);
|
||||
sthStation.Name = "sthStation";
|
||||
sthStation.Size = new Size(82, 33);
|
||||
sthStation.TabIndex = 31;
|
||||
sthStation.UnCheckedText = "关闭";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
@ -508,14 +513,14 @@
|
||||
btnPath2.TabIndex = 20;
|
||||
btnPath2.Text = "打开";
|
||||
//
|
||||
// swIsEnabled
|
||||
// sthDetectStatus
|
||||
//
|
||||
swIsEnabled.CheckedText = "启用";
|
||||
swIsEnabled.Location = new Point(110, 26);
|
||||
swIsEnabled.Name = "swIsEnabled";
|
||||
swIsEnabled.Size = new Size(82, 33);
|
||||
swIsEnabled.TabIndex = 19;
|
||||
swIsEnabled.UnCheckedText = "关闭";
|
||||
sthDetectStatus.CheckedText = "启用";
|
||||
sthDetectStatus.Location = new Point(110, 26);
|
||||
sthDetectStatus.Name = "sthDetectStatus";
|
||||
sthDetectStatus.Size = new Size(82, 33);
|
||||
sthDetectStatus.TabIndex = 19;
|
||||
sthDetectStatus.UnCheckedText = "关闭";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
@ -525,14 +530,14 @@
|
||||
label7.TabIndex = 18;
|
||||
label7.Text = "状 态";
|
||||
//
|
||||
// iptModelPath
|
||||
// iptDetectPath
|
||||
//
|
||||
iptModelPath.Location = new Point(110, 75);
|
||||
iptModelPath.Name = "iptModelPath";
|
||||
iptModelPath.PlaceholderText = "请点击打开按钮选择模型路径";
|
||||
iptModelPath.ReadOnly = true;
|
||||
iptModelPath.Size = new Size(656, 42);
|
||||
iptModelPath.TabIndex = 17;
|
||||
iptDetectPath.Location = new Point(110, 75);
|
||||
iptDetectPath.Name = "iptDetectPath";
|
||||
iptDetectPath.PlaceholderText = "请点击打开按钮选择模型路径";
|
||||
iptDetectPath.ReadOnly = true;
|
||||
iptDetectPath.Size = new Size(656, 42);
|
||||
iptDetectPath.TabIndex = 17;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
@ -556,7 +561,6 @@
|
||||
tabPage4.Controls.Add(btnSizeDel);
|
||||
tabPage4.Controls.Add(btnSizeAdd);
|
||||
tabPage4.Controls.Add(SizeTable);
|
||||
tabPage4.Controls.Add(label17);
|
||||
tabPage4.Location = new Point(8, 8);
|
||||
tabPage4.Name = "tabPage4";
|
||||
tabPage4.Size = new Size(909, 575);
|
||||
@ -570,7 +574,7 @@
|
||||
btnSizeDel.Ghost = true;
|
||||
btnSizeDel.IconRatio = 0.8F;
|
||||
btnSizeDel.IconSvg = resources.GetString("btnSizeDel.IconSvg");
|
||||
btnSizeDel.Location = new Point(775, 192);
|
||||
btnSizeDel.Location = new Point(745, 147);
|
||||
btnSizeDel.Name = "btnSizeDel";
|
||||
btnSizeDel.Size = new Size(80, 38);
|
||||
btnSizeDel.TabIndex = 10;
|
||||
@ -583,7 +587,7 @@
|
||||
btnSizeAdd.Ghost = true;
|
||||
btnSizeAdd.IconRatio = 0.8F;
|
||||
btnSizeAdd.IconSvg = resources.GetString("btnSizeAdd.IconSvg");
|
||||
btnSizeAdd.Location = new Point(775, 148);
|
||||
btnSizeAdd.Location = new Point(745, 103);
|
||||
btnSizeAdd.Name = "btnSizeAdd";
|
||||
btnSizeAdd.Size = new Size(80, 38);
|
||||
btnSizeAdd.TabIndex = 9;
|
||||
@ -591,21 +595,13 @@
|
||||
//
|
||||
// SizeTable
|
||||
//
|
||||
SizeTable.AutoSizeColumnsMode = AntdUI.ColumnsMode.Fill;
|
||||
SizeTable.Location = new Point(38, 65);
|
||||
SizeTable.EmptyHeader = true;
|
||||
SizeTable.Location = new Point(20, 52);
|
||||
SizeTable.Name = "SizeTable";
|
||||
SizeTable.Size = new Size(705, 455);
|
||||
SizeTable.Size = new Size(706, 402);
|
||||
SizeTable.TabIndex = 8;
|
||||
SizeTable.Text = "table1";
|
||||
//
|
||||
// label17
|
||||
//
|
||||
label17.Location = new Point(38, 24);
|
||||
label17.Name = "label17";
|
||||
label17.Size = new Size(91, 23);
|
||||
label17.TabIndex = 1;
|
||||
label17.Text = "配 置";
|
||||
//
|
||||
// DetectControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
@ -631,8 +627,8 @@
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Input iptPrePath;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Switch swtPre;
|
||||
private AntdUI.Button btnPath;
|
||||
private AntdUI.Switch sthPreStatus;
|
||||
private AntdUI.Button btnPrePath;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Button btnPreDelete;
|
||||
private AntdUI.Button btnPreAdd;
|
||||
@ -643,25 +639,25 @@
|
||||
private AntdUI.Table PreOutTable;
|
||||
private AntdUI.Button btnCorrelatedCamera;
|
||||
private AntdUI.Button btnPath2;
|
||||
private AntdUI.Switch swIsEnabled;
|
||||
private AntdUI.Switch sthDetectStatus;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.Input iptModelPath;
|
||||
private AntdUI.Input iptDetectPath;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.Select stDetectType;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.Switch swIsAddStation;
|
||||
private AntdUI.Switch sthStation;
|
||||
private AntdUI.Label label10;
|
||||
private AntdUI.Label label11;
|
||||
private AntdUI.FlowPanel flowPanel1;
|
||||
private AntdUI.FlowPanel flowCameraPanel;
|
||||
private AntdUI.Label label5;
|
||||
private AntdUI.Input iptScore;
|
||||
private AntdUI.Switch switch4;
|
||||
private AntdUI.Input iptConfidence;
|
||||
private AntdUI.Switch sthNGOriginal;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.Switch switch5;
|
||||
private AntdUI.Switch sthOKOriginal;
|
||||
private AntdUI.Label label12;
|
||||
private AntdUI.Switch switch6;
|
||||
private AntdUI.Switch sthDetectNG;
|
||||
private AntdUI.Label label13;
|
||||
private AntdUI.Switch switch7;
|
||||
private AntdUI.Switch sthOKDetect;
|
||||
private AntdUI.Label label14;
|
||||
private AntdUI.Button btnPic;
|
||||
private AntdUI.Label label15;
|
||||
@ -672,6 +668,5 @@
|
||||
private AntdUI.Button btnSizeDel;
|
||||
private AntdUI.Button btnSizeAdd;
|
||||
private AntdUI.Table SizeTable;
|
||||
private AntdUI.Label label17;
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml.Linq;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Vision;
|
||||
using DH.Devices.PLC;
|
||||
using XKRS.CanFly;
|
||||
using static AntdUI.Table;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
@ -21,88 +14,11 @@ namespace DHSoftware.Views
|
||||
public partial class DetectControl : UserControl
|
||||
{
|
||||
Window window;
|
||||
// DetectionConfig detectionConfig;
|
||||
private DetectionConfig _config;
|
||||
List<RelatedCamera> relatedCameras = new List<RelatedCamera>();
|
||||
|
||||
AntList<PreTreatParam> PreTreatList;
|
||||
AntList<PreTreatParam> PreOutTreatList;
|
||||
AntList<DetectionLable> DetectionLableList;
|
||||
AntList<SizeTreatParam> SizeLableList;
|
||||
PreTreatParam curPreTreat;
|
||||
PreTreatParam curPreOutTreat;
|
||||
DetectionLable curDetectionLable;
|
||||
SizeTreatParam SizeParamLable;
|
||||
public DetectionConfig detectionConfig
|
||||
{
|
||||
get => _config;
|
||||
set
|
||||
{
|
||||
if (_config != null)
|
||||
{
|
||||
_config.PropertyChanged -= Config_PropertyChanged; // 解绑旧的
|
||||
}
|
||||
|
||||
_config = value;
|
||||
|
||||
if (_config != null)
|
||||
{
|
||||
_config.PropertyChanged += Config_PropertyChanged; // 绑定新的
|
||||
UpdateUI(); // 初始化 UI
|
||||
}
|
||||
}
|
||||
}
|
||||
private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
// 监听所有属性变化
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof(DetectionConfig.IsAddStation):
|
||||
swIsAddStation.Checked = _config.IsAddStation;
|
||||
break;
|
||||
case nameof(DetectionConfig.IsEnabled):
|
||||
swIsEnabled.Checked = _config.IsEnabled;
|
||||
break;
|
||||
case nameof(DetectionConfig.ModelType):
|
||||
stDetectType.SelectedIndex = (int)_config.ModelType-1;
|
||||
break;
|
||||
case nameof(DetectionConfig.ModelconfThreshold):
|
||||
if (iptScore.InvokeRequired)
|
||||
{
|
||||
iptScore.Invoke(() => iptScore.Text = _config.ModelconfThreshold.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
iptScore.Text = _config.ModelconfThreshold.ToString();
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case nameof(DetectionConfig.PreTreatCollects):
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void UpdateUI()
|
||||
{
|
||||
if (_config == null) return;
|
||||
|
||||
swIsAddStation.Checked = _config.IsAddStation;
|
||||
swIsEnabled.Checked = _config.IsEnabled;
|
||||
stDetectType.SelectedIndex = (int)_config.ModelType - 1;
|
||||
iptScore.Text = _config.ModelconfThreshold.ToString();
|
||||
iptModelPath.Text = _config.ModelPath;
|
||||
swtPre.Checked = _config.IsPreEnabled;
|
||||
iptPrePath.Text = _config.HalconAlgorithemPath_Pre;
|
||||
// textBoxName.Text = _config.Name;
|
||||
// checkBoxEnableGPU.Checked = _config.IsEnableGPU;
|
||||
}
|
||||
public DetectControl(Window _window)
|
||||
DetectionConfig detectionConfig;
|
||||
public DetectControl(Window _window, DetectionConfig _detection)
|
||||
{
|
||||
window = _window;
|
||||
detectionConfig = _detection;
|
||||
InitializeComponent();
|
||||
//this.detectionConfig = detectionConfig;
|
||||
//初始化表格列头
|
||||
@ -216,7 +132,7 @@ namespace DHSoftware.Views
|
||||
private void BindEventHandler()
|
||||
{
|
||||
//预处理
|
||||
btnPath.Click += btnPath_Click;
|
||||
btnPrePath.Click += btnPath_Click;
|
||||
btnPreAdd.Click += BtnPreAdd_Click; ;
|
||||
btnPreDelete.Click += BtnPreDelete_Click; ;
|
||||
preTable.CellClick += PreTable_CellClick; ;
|
||||
@ -248,12 +164,11 @@ namespace DHSoftware.Views
|
||||
|
||||
if (e.Record is DetectionLable DetectionLable)
|
||||
{
|
||||
curDetectionLable = DetectionLable;
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new DetectionLableEdit(window, curDetectionLable) { Size = new Size(500, 300) };
|
||||
var form = new DetectionLableEdit(window, DetectionLable) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
@ -269,7 +184,7 @@ namespace DHSoftware.Views
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
DetectionLableList.Remove(DetectionLable);
|
||||
detectionConfig.DetectionLableList.Remove(DetectionLable);
|
||||
break;
|
||||
|
||||
}
|
||||
@ -283,12 +198,11 @@ namespace DHSoftware.Views
|
||||
|
||||
if (e.Record is SizeTreatParam sizeTreat)
|
||||
{
|
||||
SizeParamLable = sizeTreat;
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new SizeLabelEdit(window, SizeParamLable) { Size = new Size(500, 300) };
|
||||
var form = new SizeLabelEdit(window, sizeTreat) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
@ -306,11 +220,10 @@ namespace DHSoftware.Views
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
SizeLableList.Remove(sizeTreat);
|
||||
UpdatePreTreatCollectsFromSizeTable();
|
||||
detectionConfig.SizeTreatParamList.Remove(sizeTreat);
|
||||
break;
|
||||
case "进行测量":
|
||||
var sizeType = ((int)SizeParamLable.PreType).ToString();
|
||||
var sizeType = ((int)sizeTreat.PreType).ToString();
|
||||
|
||||
// 根据测量类型打开不同的窗口
|
||||
switch (sizeType)
|
||||
@ -350,7 +263,7 @@ namespace DHSoftware.Views
|
||||
|
||||
private void BtnLableDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (DetectionLableList.Count == 0 || !DetectionLableList.Any(x => x.Selected))
|
||||
if (detectionConfig.DetectionLableList.Count == 0 || !detectionConfig.DetectionLableList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
@ -360,12 +273,12 @@ namespace DHSoftware.Views
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = DetectionLableList.Count - 1; i >= 0; i--)
|
||||
for (int i = detectionConfig.DetectionLableList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (DetectionLableList[i].Selected)
|
||||
if (detectionConfig.DetectionLableList[i].Selected)
|
||||
{
|
||||
DetectionLableList.RemoveAt(i);
|
||||
detectionConfig.DetectionLableList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
@ -389,13 +302,13 @@ namespace DHSoftware.Views
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
DetectionLableList.Add(detectionLable);
|
||||
detectionConfig.DetectionLableList.Add(detectionLable);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSizeDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (SizeLableList.Count == 0 || !SizeLableList.Any(x => x.Selected))
|
||||
if (detectionConfig.SizeTreatParamList.Count == 0 || !detectionConfig.SizeTreatParamList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
@ -405,12 +318,12 @@ namespace DHSoftware.Views
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = SizeLableList.Count - 1; i >= 0; i--)
|
||||
for (int i = detectionConfig.SizeTreatParamList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (SizeLableList[i].Selected)
|
||||
if (detectionConfig.SizeTreatParamList[i].Selected)
|
||||
{
|
||||
SizeLableList.RemoveAt(i);
|
||||
detectionConfig.SizeTreatParamList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
@ -439,7 +352,7 @@ namespace DHSoftware.Views
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
SizeLableList.Add(SizeParamLable);
|
||||
detectionConfig.SizeTreatParamList.Add(SizeParamLable);
|
||||
}
|
||||
}
|
||||
|
||||
@ -448,22 +361,48 @@ namespace DHSoftware.Views
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void BtnCorrelatedCamera_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
|
||||
|
||||
var form = new CorrelatedCameraEdit(window, relatedCameras) { Size = new Size(500, 400) };
|
||||
var form = new CorrelatedCameraEdit(window, detectionConfig.CameraCollects) { Size = new Size(500, 400) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
flowPanel1.Controls.Clear();
|
||||
InitRelatedCamera();
|
||||
detectionConfig.CameraCollects=relatedCameras;
|
||||
flowCameraPanel.Controls.Clear();
|
||||
if (detectionConfig.CameraCollects.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
control.CloseChanged += (sender, e) =>
|
||||
{
|
||||
var tag = sender as Tag;
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
if (item.CameraSourceId.Equals(tag.Text))
|
||||
{
|
||||
detectionConfig.CameraCollects.Remove(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
};
|
||||
// 通过主窗口设置DPI控制添加控件保持缩放比例
|
||||
window.AutoDpi(control);
|
||||
flowCameraPanel.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -488,8 +427,8 @@ namespace DHSoftware.Views
|
||||
{
|
||||
string filePath = openFileDialog.FileName;
|
||||
|
||||
iptModelPath.Text = filePath;
|
||||
_config.ModelPath = filePath;
|
||||
iptDetectPath.Text = filePath;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -500,12 +439,11 @@ namespace DHSoftware.Views
|
||||
|
||||
if (e.Record is PreTreatParam PreTreat)
|
||||
{
|
||||
curPreOutTreat = PreTreat;
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new PreTreatEdit(window, curPreOutTreat) { Size = new Size(500, 300) };
|
||||
var form = new PreTreatEdit(window, PreTreat) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
@ -521,7 +459,7 @@ namespace DHSoftware.Views
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
PreOutTreatList.Remove(PreTreat);
|
||||
detectionConfig.OUTPreTreatParams.Remove(PreTreat);
|
||||
break;
|
||||
|
||||
}
|
||||
@ -530,7 +468,7 @@ namespace DHSoftware.Views
|
||||
|
||||
private void BtnOutDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (PreOutTreatList.Count == 0 || !PreOutTreatList.Any(x => x.Selected))
|
||||
if (detectionConfig.OUTPreTreatParams.Count == 0 || !detectionConfig.OUTPreTreatParams.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
@ -540,12 +478,12 @@ namespace DHSoftware.Views
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = PreOutTreatList.Count - 1; i >= 0; i--)
|
||||
for (int i = detectionConfig.OUTPreTreatParams.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (PreOutTreatList[i].Selected)
|
||||
if (detectionConfig.OUTPreTreatParams[i].Selected)
|
||||
{
|
||||
PreOutTreatList.RemoveAt(i);
|
||||
detectionConfig.OUTPreTreatParams.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
@ -570,7 +508,7 @@ namespace DHSoftware.Views
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
PreOutTreatList.Add(preParam);
|
||||
detectionConfig.OUTPreTreatParams.Add(preParam);
|
||||
}
|
||||
}
|
||||
|
||||
@ -580,12 +518,11 @@ namespace DHSoftware.Views
|
||||
|
||||
if (e.Record is PreTreatParam PreTreat)
|
||||
{
|
||||
curPreTreat = PreTreat;
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new PreTreatEdit(window, curPreTreat) { Size = new Size(500, 300) };
|
||||
var form = new PreTreatEdit(window, PreTreat) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
@ -601,7 +538,7 @@ namespace DHSoftware.Views
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
PreTreatList.Remove(PreTreat);
|
||||
detectionConfig.PreTreatParams.Remove(PreTreat);
|
||||
break;
|
||||
|
||||
}
|
||||
@ -616,7 +553,7 @@ namespace DHSoftware.Views
|
||||
|
||||
private void BtnPreDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (PreTreatList.Count == 0 || !PreTreatList.Any(x => x.Selected))
|
||||
if (detectionConfig.PreTreatParams.Count == 0 || !detectionConfig.PreTreatParams.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
@ -626,12 +563,12 @@ namespace DHSoftware.Views
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = PreTreatList.Count - 1; i >= 0; i--)
|
||||
for (int i = detectionConfig.PreTreatParams.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (PreTreatList[i].Selected)
|
||||
if (detectionConfig.PreTreatParams[i].Selected)
|
||||
{
|
||||
PreTreatList.RemoveAt(i);
|
||||
detectionConfig.PreTreatParams.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
@ -655,7 +592,7 @@ namespace DHSoftware.Views
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
PreTreatList.Add(preParam);
|
||||
detectionConfig.PreTreatParams.Add(preParam);
|
||||
}
|
||||
}
|
||||
|
||||
@ -697,74 +634,98 @@ namespace DHSoftware.Views
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
relatedCameras = detectionConfig.CameraCollects;
|
||||
InitRelatedCamera();
|
||||
|
||||
// swIsAddStation. = detectionConfig.IsAddStation;
|
||||
PreTreatList = new AntList<PreTreatParam>();
|
||||
foreach (var item in detectionConfig.PreTreatParams)
|
||||
stDetectType.Items.Clear();
|
||||
foreach (ModelType value in Enum.GetValues(typeof(ModelType)))
|
||||
{
|
||||
PreTreatParam lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
PreTreatList.Add(lable);
|
||||
stDetectType.Items.Add(value.ToString());
|
||||
}
|
||||
preTable.Binding(PreTreatList);
|
||||
preTable.Binding(detectionConfig.PreTreatParams);
|
||||
PreOutTable.Binding(detectionConfig.OUTPreTreatParams);
|
||||
lableTable.Binding(detectionConfig.DetectionLableList);
|
||||
SizeTable.Binding(detectionConfig.SizeTreatParamList);
|
||||
|
||||
PreOutTreatList = new AntList<PreTreatParam>();
|
||||
foreach (var item in detectionConfig.OUTPreTreatParams)
|
||||
|
||||
if (detectionConfig.PreTreatParams.Count > 0)
|
||||
{
|
||||
PreTreatParam lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
PreOutTreatList.Add(lable);
|
||||
foreach (var item in detectionConfig.PreTreatParams)
|
||||
{
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
PreOutTable.Binding(PreOutTreatList);
|
||||
|
||||
|
||||
|
||||
|
||||
DetectionLableList = new AntList<DetectionLable>();
|
||||
foreach (var item in detectionConfig.DetectionLableList)
|
||||
if (detectionConfig.OUTPreTreatParams.Count > 0)
|
||||
{
|
||||
DetectionLable lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
DetectionLableList.Add(lable);
|
||||
foreach (var item in detectionConfig.OUTPreTreatParams)
|
||||
{
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
lableTable.Binding(DetectionLableList);
|
||||
|
||||
// SizeLableList = new AntList<SizeTreatParam>(_config.PreTreatCollects);
|
||||
foreach (var item in _config.PreTreatCollects)
|
||||
if (detectionConfig.DetectionLableList.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.DetectionLableList)
|
||||
{
|
||||
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
};
|
||||
// SizeLableList.Add(item);
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
// 将 List<PreTreatCollect> 转换为 AntList<PreTreatCollect>
|
||||
SizeLableList = new AntList<SizeTreatParam>(_config.PreTreatCollects);
|
||||
if (detectionConfig.SizeTreatParamList.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.SizeTreatParamList)
|
||||
{
|
||||
|
||||
// 绑定转换后的数据到 SizeTable
|
||||
SizeTable.Binding(SizeLableList);
|
||||
//SizeTable.Binding(_config.PreTreatCollects);
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
};
|
||||
}
|
||||
}
|
||||
if (detectionConfig.CameraCollects.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
window.AutoDpi(control);
|
||||
flowCameraPanel.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
//1
|
||||
sthPreStatus.DataBindings.Add("Checked", detectionConfig, "IsPreEnabled", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptPrePath.DataBindings.Add("Text", detectionConfig, "HalconAlgorithemPath_Pre", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
|
||||
//2
|
||||
sthDetectStatus.DataBindings.Add("Checked", detectionConfig, "IsEnabled", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthStation.DataBindings.Add("Checked", detectionConfig, "IsAddStation", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
stDetectType.DataBindings.Add("Text", detectionConfig, "ModelType", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptConfidence.DataBindings.Add("Text", detectionConfig, "ModelconfThreshold", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptDetectPath.DataBindings.Add("Text", detectionConfig, "ModelPath", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthOKOriginal.DataBindings.Add("Checked", detectionConfig, "SaveOKOriginal", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthNGOriginal.DataBindings.Add("Checked", detectionConfig, "SaveNGOriginal", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthOKDetect.DataBindings.Add("Checked", detectionConfig, "SaveOKDetect", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthDetectNG.DataBindings.Add("Checked", detectionConfig, "SaveNGDetect", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
|
||||
}
|
||||
|
||||
@ -788,9 +749,9 @@ namespace DHSoftware.Views
|
||||
lableTable.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("LabelName", "名称", ColumnAlign.Center),
|
||||
new Column("MinSource", "最小得分",ColumnAlign.Center),
|
||||
new Column("MaxArea", "最大得分", ColumnAlign.Center),
|
||||
new Column("MinSource", "最小面积",ColumnAlign.Center),
|
||||
new Column("MinScore", "最小得分",ColumnAlign.Center),
|
||||
new Column("MaxScore", "最大得分", ColumnAlign.Center),
|
||||
new Column("MinArea", "最小面积",ColumnAlign.Center),
|
||||
new Column("MaxArea", "最大面积", ColumnAlign.Center),
|
||||
new Column("ResultState", "结果", ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
@ -831,42 +792,6 @@ namespace DHSoftware.Views
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List<KeyValuePair<string, int>> MLModelTypes = GetFilteredEnumDescriptionsAndValues<MLModelType>();
|
||||
List<KeyValuePair<string, int>> SizeEnum = GetFilteredEnumDescriptionsAndValues<SizeEnum>();
|
||||
|
||||
private void tabPage2_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void DetectControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
InitData();
|
||||
|
||||
}
|
||||
|
||||
public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValues<T>() where T : Enum
|
||||
{
|
||||
return Enum.GetValues(typeof(T))
|
||||
.Cast<T>()
|
||||
.Select(e =>
|
||||
{
|
||||
// 获取枚举的 Description 属性,如果没有,则使用枚举的名称
|
||||
var description = e.GetType()
|
||||
.GetField(e.ToString())
|
||||
?.GetCustomAttribute<DescriptionAttribute>()
|
||||
?.Description ?? e.ToString();
|
||||
|
||||
// 返回枚举的描述和对应的整数值
|
||||
return new KeyValuePair<string, int>(description, Convert.ToInt32(e));
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -129,7 +129,7 @@
|
||||
<data name="btnPreAdd.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
<data name="btnPath.IconSvg" xml:space="preserve">
|
||||
<data name="btnPrePath.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
<data name="btnLableDelete.IconSvg" xml:space="preserve">
|
||||
|
@ -3,6 +3,7 @@
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Vision;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
@ -48,8 +49,8 @@ namespace DHSoftware.Views
|
||||
return;
|
||||
}
|
||||
detectionLable.LabelName = iptName.Text;
|
||||
detectionLable.MinSource=Convert.ToDouble(iptMinSource.Text);
|
||||
detectionLable.MaxSource = Convert.ToDouble(iptMaxSource.Text);
|
||||
detectionLable.MinScore=Convert.ToDouble(iptMinSource.Text);
|
||||
detectionLable.MaxScore = Convert.ToDouble(iptMaxSource.Text);
|
||||
detectionLable.MinArea = Convert.ToDouble(iptMinArea.Text);
|
||||
detectionLable.MaxArea = Convert.ToDouble(iptMaxArea.Text);
|
||||
ResultState state = EnumHelper.GetEnumFromDescription<ResultState>(sltResultState.Text);
|
||||
@ -83,8 +84,8 @@ namespace DHSoftware.Views
|
||||
else
|
||||
{
|
||||
iptName.Text = detectionLable.LabelName;
|
||||
iptMinSource.Text = detectionLable.MinSource.ToString();
|
||||
iptMaxSource.Text = detectionLable.MaxSource.ToString();
|
||||
iptMinSource.Text = detectionLable.MinScore.ToString();
|
||||
iptMaxSource.Text = detectionLable.MaxScore.ToString();
|
||||
iptMinArea.Text = detectionLable.MinArea.ToString();
|
||||
iptMaxArea.Text = detectionLable.MaxArea.ToString();
|
||||
sltResultState.Text= EnumHelper.GetEnumDescription(detectionLable.ResultState);
|
||||
|
148
DHSoftware/Views/FrmLog.Designer.cs
generated
Normal file
148
DHSoftware/Views/FrmLog.Designer.cs
generated
Normal file
@ -0,0 +1,148 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class FrmLog
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.tsmiClearLog = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
this.tsmiLogLevels = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsmiLogSources = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsmiClearLog2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.lvLog = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsmiClearLog});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(125, 26);
|
||||
//
|
||||
// tsmiClearLog
|
||||
//
|
||||
this.tsmiClearLog.Name = "tsmiClearLog";
|
||||
this.tsmiClearLog.Size = new System.Drawing.Size(124, 22);
|
||||
this.tsmiClearLog.Text = "清空日志";
|
||||
// this.tsmiClearLog.Click += new System.EventHandler(this.tsmiClearLog_Click);
|
||||
//
|
||||
// menuStrip1
|
||||
//
|
||||
this.menuStrip1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsmiLogLevels,
|
||||
this.tsmiLogSources,
|
||||
this.tsmiClearLog2});
|
||||
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
this.menuStrip1.Size = new System.Drawing.Size(800, 25);
|
||||
this.menuStrip1.TabIndex = 3;
|
||||
this.menuStrip1.Text = "menuStrip1";
|
||||
//
|
||||
// tsmiLogLevels
|
||||
//
|
||||
this.tsmiLogLevels.Name = "tsmiLogLevels";
|
||||
this.tsmiLogLevels.Size = new System.Drawing.Size(68, 21);
|
||||
this.tsmiLogLevels.Text = "日志级别";
|
||||
//
|
||||
// tsmiLogSources
|
||||
//
|
||||
this.tsmiLogSources.Name = "tsmiLogSources";
|
||||
this.tsmiLogSources.Size = new System.Drawing.Size(68, 21);
|
||||
this.tsmiLogSources.Text = "日志来源";
|
||||
//
|
||||
// tsmiClearLog2
|
||||
//
|
||||
this.tsmiClearLog2.Name = "tsmiClearLog2";
|
||||
this.tsmiClearLog2.Size = new System.Drawing.Size(68, 21);
|
||||
this.tsmiClearLog2.Text = "清空日志";
|
||||
// this.tsmiClearLog2.Click += new System.EventHandler(this.tsmiClearLog2_Click);
|
||||
//
|
||||
// lvLog
|
||||
//
|
||||
this.lvLog.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.lvLog.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.lvLog.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.columnHeader3});
|
||||
this.lvLog.ContextMenuStrip = this.contextMenuStrip1;
|
||||
this.lvLog.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lvLog.FullRowSelect = true;
|
||||
this.lvLog.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
|
||||
this.lvLog.HideSelection = false;
|
||||
this.lvLog.Location = new System.Drawing.Point(0, 25);
|
||||
this.lvLog.MultiSelect = false;
|
||||
this.lvLog.Name = "lvLog";
|
||||
this.lvLog.Size = new System.Drawing.Size(800, 463);
|
||||
this.lvLog.TabIndex = 5;
|
||||
this.lvLog.UseCompatibleStateImageBehavior = false;
|
||||
this.lvLog.View = System.Windows.Forms.View.Details;
|
||||
this.lvLog.SizeChanged += new System.EventHandler(this.lvLog_SizeChanged);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
this.columnHeader1.Width = 80;
|
||||
//
|
||||
// FrmLog
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
|
||||
this.ClientSize = new System.Drawing.Size(800, 488);
|
||||
this.Controls.Add(this.lvLog);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
//this.MainMenuStrip = this.menuStrip1;
|
||||
this.Name = "FrmLog";
|
||||
this.Text = "日志";
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsmiClearLog;
|
||||
private System.Windows.Forms.MenuStrip menuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsmiLogLevels;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsmiLogSources;
|
||||
private System.Windows.Forms.ListView lvLog;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsmiClearLog2;
|
||||
//private System.Windows.Forms.ToolStripMenuItem testToolStripMenuItem;
|
||||
}
|
||||
}
|
553
DHSoftware/Views/FrmLog.cs
Normal file
553
DHSoftware/Views/FrmLog.cs
Normal file
@ -0,0 +1,553 @@
|
||||
|
||||
using XKRS.UI.Model.Winform;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
using DH.Commons.Enums;
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class FrmLog : UserControl
|
||||
{
|
||||
#region Win32 API双缓冲处理
|
||||
private const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
|
||||
private const int LVS_EX_DOUBLEBUFFER = 0x00010000;
|
||||
|
||||
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||
private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
|
||||
#endregion
|
||||
|
||||
#region 常量配置
|
||||
private const string SOURCE_PROCESS = "流程";
|
||||
private const int LOG_NUM_LIMIT = 2000;
|
||||
// private const int BATCH_SIZE = 50;
|
||||
// 调整常量配置
|
||||
private const int BATCH_SIZE = 100; // 从50提升到100
|
||||
private const int PROCESS_INTERVAL = 200; // 从100ms调整到200ms
|
||||
// private const int PROCESS_INTERVAL = 100;
|
||||
private const int FIRST_COL_WIDTH = 120;
|
||||
#endregion
|
||||
|
||||
#region 控件状态
|
||||
private readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
|
||||
private List<LogMsg> _logBuffer = new List<LogMsg>();
|
||||
private List<LogLevel> _showLevels = new List<LogLevel>();
|
||||
private List<string> _showSources = new List<string>();
|
||||
private Task _logTask;
|
||||
private static readonly object _logLock = new object();
|
||||
#endregion
|
||||
|
||||
public FrmLog()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitializeCustomComponents();
|
||||
}
|
||||
|
||||
private void InitializeCustomComponents()
|
||||
{
|
||||
// 启用双缓冲
|
||||
SendMessage(lvLog.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE,
|
||||
LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);
|
||||
|
||||
lvLog.ShowItemToolTips = true;
|
||||
lvLog.FullRowSelect = true;
|
||||
lvLog.View = View.Details;
|
||||
// 启用自定义绘制
|
||||
//lvLog.OwnerDraw = true;
|
||||
//lvLog.DrawColumnHeader += LvLog_DrawColumnHeader;
|
||||
//lvLog.DrawSubItem += LvLog_DrawSubItem;
|
||||
//lvLog.DrawItem += LvLog_DrawItem;
|
||||
|
||||
// 初始化列头
|
||||
lvLog.Columns.Add("时间", FIRST_COL_WIDTH);
|
||||
lvLog.Columns.Add("来源", 150);
|
||||
lvLog.Columns.Add("内容", 400);
|
||||
|
||||
InitializeLevelFilter();
|
||||
StartProcessingTask();
|
||||
}
|
||||
|
||||
private void InitializeLevelFilter()
|
||||
{
|
||||
_showLevels.Clear();
|
||||
tsmiLogLevels.DropDownItems.Clear();
|
||||
|
||||
foreach (LogLevel level in Enum.GetValues(typeof(LogLevel)))
|
||||
{
|
||||
var item = new ToolStripMenuItem(level.GetEnumDescription())
|
||||
{
|
||||
CheckOnClick = true,
|
||||
Checked = true,
|
||||
Tag = level,
|
||||
BackColor = level.GetEnumSelectedColor(),
|
||||
ForeColor = level.GetEnumSelectedFontColor()
|
||||
};
|
||||
item.CheckedChanged += LevelItem_CheckedChanged;
|
||||
tsmiLogLevels.DropDownItems.Add(item);
|
||||
_showLevels.Add(level);
|
||||
}
|
||||
}
|
||||
#region 自定义绘制方法
|
||||
private void LvLog_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
|
||||
{
|
||||
e.DrawDefault = true;
|
||||
}
|
||||
|
||||
private void LvLog_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
|
||||
{
|
||||
var item = e.Item;
|
||||
var log = item.Tag as LogMsg;
|
||||
|
||||
// 设置背景色
|
||||
e.Graphics.FillRectangle(new SolidBrush(log.LogLevel.GetEnumSelectedColor()), e.Bounds);
|
||||
|
||||
// 设置文字颜色
|
||||
TextRenderer.DrawText(e.Graphics, e.SubItem.Text, lvLog.Font,
|
||||
e.Bounds, log.LogLevel.GetEnumSelectedFontColor(), TextFormatFlags.Left);
|
||||
}
|
||||
//private ListViewItem CreateLogItem(LogMsg log)
|
||||
//{
|
||||
// var item = new ListViewItem(log.LogTime.ToString("HH:mm:ss.fff"));
|
||||
// item.SubItems.Add(FormatSource(log));
|
||||
// item.SubItems.Add(log.Msg);
|
||||
// item.Tag = log; // 重要:将日志对象绑定到Tag
|
||||
// return item;
|
||||
//}
|
||||
private void LvLog_DrawItem(object sender, DrawListViewItemEventArgs e)
|
||||
{
|
||||
e.DrawDefault = false; // 禁用默认绘制
|
||||
}
|
||||
#endregion
|
||||
private void StartProcessingTask()
|
||||
{
|
||||
lock (_logLock)
|
||||
{
|
||||
if (_logTask == null || _logTask.IsCompleted)
|
||||
{
|
||||
_logTask = Task.Run(ProcessLogs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ProcessLogs()
|
||||
{
|
||||
while (!IsDisposed)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(PROCESS_INTERVAL);
|
||||
ProcessBatch(BATCH_SIZE);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DebugWrite($"日志处理异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessBatch(int batchSize)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
{
|
||||
BeginInvoke(new Action(() => ProcessBatch(batchSize)));
|
||||
return;
|
||||
}
|
||||
|
||||
lvLog.BeginUpdate();
|
||||
try
|
||||
{
|
||||
var items = new List<ListViewItem>();
|
||||
int processed = 0;
|
||||
|
||||
while (processed < batchSize && _logQueue.TryDequeue(out var log))
|
||||
{
|
||||
_logBuffer.Add(log);
|
||||
if (ShouldShow(log))
|
||||
{
|
||||
items.Add(CreateLogItem(log));
|
||||
processed++;
|
||||
}
|
||||
}
|
||||
|
||||
if (items.Count > 0)
|
||||
{
|
||||
lvLog.Items.AddRange(items.ToArray());
|
||||
MaintainBuffer();
|
||||
AutoScrollIfNeeded();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
lvLog.EndUpdate();
|
||||
UpdateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldShow(LogMsg log)
|
||||
{
|
||||
return _showLevels.Contains(log.LogLevel) &&
|
||||
(_showSources.Count == 0 ||
|
||||
(string.IsNullOrEmpty(log.MsgSource) ?
|
||||
_showSources.Contains(SOURCE_PROCESS) :
|
||||
_showSources.Contains(log.MsgSource)));
|
||||
}
|
||||
|
||||
private ListViewItem CreateLogItem(LogMsg log)
|
||||
{
|
||||
var item = new ListViewItem(log.LogTime.ToString("HH:mm:ss.fff"));
|
||||
item.SubItems.Add(FormatSource(log));
|
||||
item.SubItems.Add(log.Msg);
|
||||
item.ToolTipText = log.Msg;
|
||||
item.BackColor = log.LogLevel.GetEnumSelectedColor();
|
||||
item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
|
||||
return item;
|
||||
}
|
||||
|
||||
private string FormatSource(LogMsg log)
|
||||
{
|
||||
return string.IsNullOrEmpty(log.MsgSource) ?
|
||||
SOURCE_PROCESS :
|
||||
$"{log.MsgSource}[{log.ThreadId}]";
|
||||
}
|
||||
|
||||
private void MaintainBuffer()
|
||||
{
|
||||
if (_logBuffer.Count > LOG_NUM_LIMIT * 2)
|
||||
{
|
||||
_logBuffer = _logBuffer
|
||||
.Skip(_logBuffer.Count - LOG_NUM_LIMIT)
|
||||
.ToList();
|
||||
RefreshLogs();
|
||||
}
|
||||
}
|
||||
|
||||
public void AddLog(LogMsg log)
|
||||
{
|
||||
_logQueue.Enqueue(log);
|
||||
}
|
||||
|
||||
private void RefreshLogs()
|
||||
{
|
||||
lvLog.BeginUpdate();
|
||||
try
|
||||
{
|
||||
lvLog.Items.Clear();
|
||||
var items = _logBuffer
|
||||
.Where(ShouldShow)
|
||||
.Select(CreateLogItem);
|
||||
lvLog.Items.AddRange(items.ToArray());
|
||||
}
|
||||
finally
|
||||
{
|
||||
lvLog.EndUpdate();
|
||||
UpdateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
private void AutoScrollIfNeeded()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (lvLog.Items.Count > 0 /*&& chkAutoScroll.Checked*/)
|
||||
{
|
||||
lvLog.EnsureVisible(lvLog.Items.Count - 1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void UpdateLayout()
|
||||
{
|
||||
if (lvLog.Columns.Count < 3) return;
|
||||
|
||||
// 动态调整列宽
|
||||
lvLog.Columns[0].Width = FIRST_COL_WIDTH;
|
||||
lvLog.Columns[1].Width = lvLog.Width > 600 ? 150 : 0;
|
||||
lvLog.Columns[2].Width = lvLog.ClientSize.Width -
|
||||
lvLog.Columns[0].Width -
|
||||
lvLog.Columns[1].Width -
|
||||
SystemInformation.VerticalScrollBarWidth;
|
||||
}
|
||||
|
||||
#region 事件处理
|
||||
private void LevelItem_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
_showLevels = tsmiLogLevels.DropDownItems
|
||||
.Cast<ToolStripMenuItem>()
|
||||
.Where(i => i.Checked)
|
||||
.Select(i => (LogLevel)i.Tag)
|
||||
.ToList();
|
||||
|
||||
RefreshLogs();
|
||||
}
|
||||
|
||||
private void SourceItem_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
_showSources = tsmiLogSources.DropDownItems
|
||||
.Cast<ToolStripMenuItem>()
|
||||
.Where(i => i.Checked)
|
||||
.Select(i => i.Text)
|
||||
.ToList();
|
||||
|
||||
RefreshLogs();
|
||||
}
|
||||
|
||||
private void tsmiClearLog_Click(object sender, EventArgs e)
|
||||
{
|
||||
lvLog.Items.Clear();
|
||||
_logBuffer.Clear();
|
||||
}
|
||||
|
||||
private void lvLog_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateLayout();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 辅助方法
|
||||
private void DebugWrite(string message)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] {message}");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
//public partial class FrmLog1 : UserControl
|
||||
//{
|
||||
// // 添加双缓冲字段
|
||||
// private const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
|
||||
// private const int LVS_EX_DOUBLEBUFFER = 0x00010000;
|
||||
|
||||
// [System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||
// private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
|
||||
|
||||
// public FrmLog()
|
||||
// {
|
||||
// InitializeComponent();
|
||||
// // 启用双缓冲
|
||||
// SendMessage(lvLog.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);
|
||||
// lvLog.ShowItemToolTips = true;
|
||||
|
||||
// this.Load += (s, e) =>
|
||||
// {
|
||||
// _showLevels.Clear();
|
||||
// tsmiLogLevels.DropDownItems.Clear();
|
||||
// JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(EnumHelper.GetEnumListByType(typeof(LogLevel)))).ForEach(d =>
|
||||
// {
|
||||
// LogLevel lvl = (LogLevel)((int)d.Value);
|
||||
// ToolStripMenuItem item = new ToolStripMenuItem(d.Desc.ToString());
|
||||
// item.CheckOnClick = true;
|
||||
// item.Checked = true;
|
||||
// item.Tag = lvl;
|
||||
// item.CheckedChanged += LevelItem_CheckedChanged;
|
||||
|
||||
// item.BackColor = lvl.GetEnumSelectedColor();
|
||||
// item.ForeColor = lvl.GetEnumSelectedFontColor();
|
||||
// tsmiLogLevels.DropDownItems.Add(item);
|
||||
// _showLevels.Add(lvl);
|
||||
// });
|
||||
// };
|
||||
// }
|
||||
|
||||
// //public override void OnProcessUpdated()
|
||||
// //{
|
||||
|
||||
|
||||
// // Invoke(new Action(() =>
|
||||
// // {
|
||||
// // _showDevice.Clear();
|
||||
// // tsmiLogSources.DropDownItems.Clear();
|
||||
// // ToolStripMenuItem processItem = new ToolStripMenuItem(SOURCE_PROCESS);
|
||||
// // processItem.CheckOnClick = true;
|
||||
// // processItem.Checked = true;
|
||||
// // processItem.CheckedChanged += SourceItem_CheckedChanged;
|
||||
// // tsmiLogSources.DropDownItems.Add(processItem);
|
||||
// // _showDevice.Add(SOURCE_PROCESS);
|
||||
|
||||
// // Process.DeviceCollection.ForEach(d =>
|
||||
// // {
|
||||
// // ToolStripMenuItem item = new ToolStripMenuItem(d.Name);
|
||||
// // item.CheckOnClick = true;
|
||||
// // item.Checked = true;
|
||||
// // item.CheckedChanged += SourceItem_CheckedChanged;
|
||||
// // tsmiLogSources.DropDownItems.Add(item);
|
||||
// // _showDevice.Add(d.Name);
|
||||
// // });
|
||||
// // }));
|
||||
// //}
|
||||
|
||||
// private void LevelItem_CheckedChanged(object sender, EventArgs e)
|
||||
// {
|
||||
// _showLevels.Clear();
|
||||
// foreach (ToolStripMenuItem item in tsmiLogLevels.DropDownItems)
|
||||
// {
|
||||
// if (item.Checked)
|
||||
// {
|
||||
// LogLevel lv = (LogLevel)Convert.ToInt32(item.Tag);
|
||||
// _showLevels.Add(lv);
|
||||
// }
|
||||
// }
|
||||
|
||||
// RefreshLogs();
|
||||
// }
|
||||
|
||||
// private void SourceItem_CheckedChanged(object sender, EventArgs e)
|
||||
// {
|
||||
// _showDevice.Clear();
|
||||
// foreach (ToolStripMenuItem item in tsmiLogSources.DropDownItems)
|
||||
// {
|
||||
// if (item.Checked)
|
||||
// {
|
||||
// _showDevice.Add(item.Text);
|
||||
// }
|
||||
// }
|
||||
// RefreshLogs();
|
||||
// }
|
||||
// //public TaskFactory _taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning);
|
||||
// readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
|
||||
// Task _logTask = null;
|
||||
// static readonly object _logLock = new object();
|
||||
|
||||
// List<LogMsg> _logBuffer = new List<LogMsg>();
|
||||
// List<LogLevel> _showLevels = new List<LogLevel>();
|
||||
// List<string> _showDevice = new List<string>();
|
||||
// const string SOURCE_PROCESS = "流程";
|
||||
// const int LOG_NUM_LIMIT = 20;
|
||||
|
||||
// public void LogDisplay(LogMsg msg)
|
||||
// {
|
||||
// _logQueue.Enqueue(msg);
|
||||
|
||||
// lock (_logLock)
|
||||
// {
|
||||
// if (_logTask == null)
|
||||
// {
|
||||
// _logTask = Task.Run(async () =>
|
||||
// {
|
||||
// while (true)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// Invoke(new Action(() =>
|
||||
// {
|
||||
// bool isNeedScroll = false;
|
||||
// while (_logQueue.TryDequeue(out LogMsg log))
|
||||
// {
|
||||
// _logBuffer.Add(log);
|
||||
|
||||
// if (_showLevels.Contains(log.LogLevel) && (_showDevice.Count == 0 || (string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
|
||||
// {
|
||||
// isNeedScroll = true;
|
||||
|
||||
// ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
|
||||
// item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
|
||||
// item.SubItems.Add(log.Msg);
|
||||
|
||||
// item.ToolTipText = log.Msg;
|
||||
// item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
|
||||
// item.BackColor = log.LogLevel.GetEnumSelectedColor();
|
||||
|
||||
// lvLog.Items.Add(item);
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (_logBuffer.Count > LOG_NUM_LIMIT * 2)
|
||||
// {
|
||||
// _logBuffer = _logBuffer.Skip(_logBuffer.Count - LOG_NUM_LIMIT).ToList();
|
||||
// RefreshLogs();
|
||||
// isNeedScroll = true;
|
||||
// }
|
||||
|
||||
// if (isNeedScroll && lvLog.Items.Count > 0)
|
||||
// {
|
||||
// RefreshLvLayout();
|
||||
// }
|
||||
// }));
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// }
|
||||
|
||||
// await Task.Delay(2000);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// private void RefreshLogs()
|
||||
// {
|
||||
// lvLog.Items.Clear();
|
||||
|
||||
// _logBuffer.ForEach(log =>
|
||||
// {
|
||||
// if (_showLevels.Contains(log.LogLevel) && ((string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
|
||||
// {
|
||||
// ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
|
||||
// item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
|
||||
// item.SubItems.Add(log.Msg);
|
||||
|
||||
// item.ToolTipText = log.Msg;
|
||||
// item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
|
||||
// item.BackColor = log.LogLevel.GetEnumSelectedColor();
|
||||
|
||||
// lvLog.Items.Add(item);
|
||||
// }
|
||||
// });
|
||||
|
||||
// RefreshLvLayout();
|
||||
// }
|
||||
|
||||
// private void lvLog_SizeChanged(object sender, EventArgs e)
|
||||
// {
|
||||
// RefreshLvLayout();
|
||||
// }
|
||||
|
||||
// int width_1stCol = 80;
|
||||
|
||||
// public event Action<LogMsg> OnLogMsgOutput;
|
||||
|
||||
// private void RefreshLvLayout()
|
||||
// {
|
||||
// if (lvLog.Columns.Count <= 0)
|
||||
// return;
|
||||
|
||||
// lvLog.Columns[0].Width = width_1stCol;
|
||||
// if (lvLog.Width <= lvLog.Height)
|
||||
// {
|
||||
// lvLog.Columns[1].Width = 0;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// lvLog.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
|
||||
// }
|
||||
// lvLog.Columns[2].Width = lvLog.Width - width_1stCol - lvLog.Columns[1].Width - 10;
|
||||
|
||||
// if (lvLog.Items.Count > 0)
|
||||
// lvLog.EnsureVisible(lvLog.Items.Count - 1);
|
||||
// }
|
||||
|
||||
// private void tsmiClearLog_Click(object sender, EventArgs e)
|
||||
// {
|
||||
// lvLog.Items.Clear();
|
||||
// }
|
||||
|
||||
// private void tsmiClearLog2_Click(object sender, EventArgs e)
|
||||
// {
|
||||
// lvLog.Items.Clear();
|
||||
// }
|
||||
//}
|
||||
}
|
126
DHSoftware/Views/FrmLog.resx
Normal file
126
DHSoftware/Views/FrmLog.resx
Normal file
@ -0,0 +1,126 @@
|
||||
<?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="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>182, 17</value>
|
||||
</metadata>
|
||||
</root>
|
526
DHSoftware/Views/GlobalControl.Designer.cs
generated
Normal file
526
DHSoftware/Views/GlobalControl.Designer.cs
generated
Normal file
@ -0,0 +1,526 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class GlobalControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleLine styleLine2 = new AntdUI.Tabs.StyleLine();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
tabPage6 = new AntdUI.TabPage();
|
||||
tabPage1 = new AntdUI.TabPage();
|
||||
TableInitProcess = new AntdUI.Table();
|
||||
panel1 = new AntdUI.Panel();
|
||||
btnAdd = new AntdUI.Button();
|
||||
btnDelete = new AntdUI.Button();
|
||||
tabPage2 = new AntdUI.TabPage();
|
||||
TableSartProcess = new AntdUI.Table();
|
||||
panel2 = new AntdUI.Panel();
|
||||
btnSartProcessDelete = new AntdUI.Button();
|
||||
btnSartProcessAdd = new AntdUI.Button();
|
||||
tabPage3 = new AntdUI.TabPage();
|
||||
TableStopProcess = new AntdUI.Table();
|
||||
panel3 = new AntdUI.Panel();
|
||||
btnStopProcessDelete = new AntdUI.Button();
|
||||
btnStopProcessAdd = new AntdUI.Button();
|
||||
tabPage4 = new AntdUI.TabPage();
|
||||
TableStartReset = new AntdUI.Table();
|
||||
panel4 = new AntdUI.Panel();
|
||||
btnStartResetDelete = new AntdUI.Button();
|
||||
btnStartResetAdd = new AntdUI.Button();
|
||||
tabPage5 = new AntdUI.TabPage();
|
||||
TableStopReset = new AntdUI.Table();
|
||||
panel5 = new AntdUI.Panel();
|
||||
btnStopResetDelete = new AntdUI.Button();
|
||||
btnStopResetAdd = new AntdUI.Button();
|
||||
panel6 = new AntdUI.Panel();
|
||||
panel7 = new AntdUI.Panel();
|
||||
uiLabel1 = new Sunny.UI.UILabel();
|
||||
swhEnableVibrator = new AntdUI.Switch();
|
||||
swhEnableBelt = new AntdUI.Switch();
|
||||
uiLabel2 = new Sunny.UI.UILabel();
|
||||
uiLabel3 = new Sunny.UI.UILabel();
|
||||
iptClearTime = new AntdUI.Input();
|
||||
tabs1.SuspendLayout();
|
||||
tabPage6.SuspendLayout();
|
||||
tabPage1.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
tabPage2.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
tabPage3.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
tabPage4.SuspendLayout();
|
||||
panel4.SuspendLayout();
|
||||
tabPage5.SuspendLayout();
|
||||
panel5.SuspendLayout();
|
||||
panel6.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Location = new Point(0, 0);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Pages.Add(tabPage6);
|
||||
tabs1.Pages.Add(tabPage1);
|
||||
tabs1.Pages.Add(tabPage2);
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.Pages.Add(tabPage4);
|
||||
tabs1.Pages.Add(tabPage5);
|
||||
tabs1.Size = new Size(898, 530);
|
||||
tabs1.Style = styleLine2;
|
||||
tabs1.TabIndex = 26;
|
||||
tabs1.Text = "tabs1";
|
||||
//
|
||||
// tabPage6
|
||||
//
|
||||
tabPage6.Controls.Add(panel7);
|
||||
tabPage6.Controls.Add(panel6);
|
||||
tabPage6.Location = new Point(3, 28);
|
||||
tabPage6.Name = "tabPage6";
|
||||
tabPage6.Size = new Size(892, 499);
|
||||
tabPage6.TabIndex = 5;
|
||||
tabPage6.Text = "全局配置";
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
tabPage1.Controls.Add(TableInitProcess);
|
||||
tabPage1.Controls.Add(panel1);
|
||||
tabPage1.Location = new Point(-892, -499);
|
||||
tabPage1.Name = "tabPage1";
|
||||
tabPage1.Size = new Size(892, 499);
|
||||
tabPage1.TabIndex = 0;
|
||||
tabPage1.Text = "流程加载操作";
|
||||
//
|
||||
// TableInitProcess
|
||||
//
|
||||
TableInitProcess.Dock = DockStyle.Fill;
|
||||
TableInitProcess.EmptyHeader = true;
|
||||
TableInitProcess.Location = new Point(0, 45);
|
||||
TableInitProcess.Name = "TableInitProcess";
|
||||
TableInitProcess.Padding = new Padding(5);
|
||||
TableInitProcess.Size = new Size(892, 454);
|
||||
TableInitProcess.TabIndex = 36;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Back = Color.Transparent;
|
||||
panel1.BackColor = SystemColors.Window;
|
||||
panel1.Controls.Add(btnAdd);
|
||||
panel1.Controls.Add(btnDelete);
|
||||
panel1.Dock = DockStyle.Top;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(892, 45);
|
||||
panel1.TabIndex = 35;
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnAdd.Location = new Point(13, 10);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Size = new Size(82, 32);
|
||||
btnAdd.TabIndex = 35;
|
||||
btnAdd.Text = "新增";
|
||||
btnAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnAdd.WaveSize = 0;
|
||||
//
|
||||
// btnDelete
|
||||
//
|
||||
btnDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnDelete.Location = new Point(110, 10);
|
||||
btnDelete.Name = "btnDelete";
|
||||
btnDelete.Size = new Size(74, 32);
|
||||
btnDelete.TabIndex = 36;
|
||||
btnDelete.Text = "删除";
|
||||
btnDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnDelete.WaveSize = 0;
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
tabPage2.Controls.Add(TableSartProcess);
|
||||
tabPage2.Controls.Add(panel2);
|
||||
tabPage2.Location = new Point(-669, -499);
|
||||
tabPage2.Name = "tabPage2";
|
||||
tabPage2.Size = new Size(669, 499);
|
||||
tabPage2.TabIndex = 1;
|
||||
tabPage2.Text = "流程启动操作";
|
||||
//
|
||||
// TableSartProcess
|
||||
//
|
||||
TableSartProcess.Dock = DockStyle.Fill;
|
||||
TableSartProcess.EmptyHeader = true;
|
||||
TableSartProcess.Location = new Point(0, 45);
|
||||
TableSartProcess.Name = "TableSartProcess";
|
||||
TableSartProcess.Padding = new Padding(5);
|
||||
TableSartProcess.Size = new Size(669, 454);
|
||||
TableSartProcess.TabIndex = 38;
|
||||
TableSartProcess.Text = "table1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Back = Color.Transparent;
|
||||
panel2.BackColor = SystemColors.Window;
|
||||
panel2.Controls.Add(btnSartProcessDelete);
|
||||
panel2.Controls.Add(btnSartProcessAdd);
|
||||
panel2.Dock = DockStyle.Top;
|
||||
panel2.Location = new Point(0, 0);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(669, 45);
|
||||
panel2.TabIndex = 37;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// btnSartProcessDelete
|
||||
//
|
||||
btnSartProcessDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSartProcessDelete.Location = new Point(110, 10);
|
||||
btnSartProcessDelete.Name = "btnSartProcessDelete";
|
||||
btnSartProcessDelete.Size = new Size(74, 32);
|
||||
btnSartProcessDelete.TabIndex = 36;
|
||||
btnSartProcessDelete.Text = "删除";
|
||||
btnSartProcessDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnSartProcessDelete.WaveSize = 0;
|
||||
//
|
||||
// btnSartProcessAdd
|
||||
//
|
||||
btnSartProcessAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSartProcessAdd.Location = new Point(13, 10);
|
||||
btnSartProcessAdd.Name = "btnSartProcessAdd";
|
||||
btnSartProcessAdd.Size = new Size(82, 32);
|
||||
btnSartProcessAdd.TabIndex = 35;
|
||||
btnSartProcessAdd.Text = "新增";
|
||||
btnSartProcessAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnSartProcessAdd.WaveSize = 0;
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
tabPage3.Controls.Add(TableStopProcess);
|
||||
tabPage3.Controls.Add(panel3);
|
||||
tabPage3.Location = new Point(-669, -499);
|
||||
tabPage3.Name = "tabPage3";
|
||||
tabPage3.Size = new Size(669, 499);
|
||||
tabPage3.TabIndex = 2;
|
||||
tabPage3.Text = "流程结束操作";
|
||||
//
|
||||
// TableStopProcess
|
||||
//
|
||||
TableStopProcess.Dock = DockStyle.Fill;
|
||||
TableStopProcess.EmptyHeader = true;
|
||||
TableStopProcess.Location = new Point(0, 45);
|
||||
TableStopProcess.Name = "TableStopProcess";
|
||||
TableStopProcess.Padding = new Padding(5);
|
||||
TableStopProcess.Size = new Size(669, 454);
|
||||
TableStopProcess.TabIndex = 38;
|
||||
TableStopProcess.Text = "table1";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Back = Color.Transparent;
|
||||
panel3.BackColor = SystemColors.Window;
|
||||
panel3.Controls.Add(btnStopProcessDelete);
|
||||
panel3.Controls.Add(btnStopProcessAdd);
|
||||
panel3.Dock = DockStyle.Top;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(669, 45);
|
||||
panel3.TabIndex = 37;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// btnStopProcessDelete
|
||||
//
|
||||
btnStopProcessDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStopProcessDelete.Location = new Point(110, 10);
|
||||
btnStopProcessDelete.Name = "btnStopProcessDelete";
|
||||
btnStopProcessDelete.Size = new Size(74, 32);
|
||||
btnStopProcessDelete.TabIndex = 36;
|
||||
btnStopProcessDelete.Text = "删除";
|
||||
btnStopProcessDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnStopProcessDelete.WaveSize = 0;
|
||||
//
|
||||
// btnStopProcessAdd
|
||||
//
|
||||
btnStopProcessAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStopProcessAdd.Location = new Point(13, 10);
|
||||
btnStopProcessAdd.Name = "btnStopProcessAdd";
|
||||
btnStopProcessAdd.Size = new Size(82, 32);
|
||||
btnStopProcessAdd.TabIndex = 35;
|
||||
btnStopProcessAdd.Text = "新增";
|
||||
btnStopProcessAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnStopProcessAdd.WaveSize = 0;
|
||||
//
|
||||
// tabPage4
|
||||
//
|
||||
tabPage4.Controls.Add(TableStartReset);
|
||||
tabPage4.Controls.Add(panel4);
|
||||
tabPage4.Location = new Point(-669, -499);
|
||||
tabPage4.Name = "tabPage4";
|
||||
tabPage4.Size = new Size(669, 499);
|
||||
tabPage4.TabIndex = 3;
|
||||
tabPage4.Text = "复位开始操作";
|
||||
//
|
||||
// TableStartReset
|
||||
//
|
||||
TableStartReset.Dock = DockStyle.Fill;
|
||||
TableStartReset.EmptyHeader = true;
|
||||
TableStartReset.Location = new Point(0, 45);
|
||||
TableStartReset.Name = "TableStartReset";
|
||||
TableStartReset.Padding = new Padding(5);
|
||||
TableStartReset.Size = new Size(669, 454);
|
||||
TableStartReset.TabIndex = 38;
|
||||
TableStartReset.Text = "table1";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
panel4.Back = Color.Transparent;
|
||||
panel4.BackColor = SystemColors.Window;
|
||||
panel4.Controls.Add(btnStartResetDelete);
|
||||
panel4.Controls.Add(btnStartResetAdd);
|
||||
panel4.Dock = DockStyle.Top;
|
||||
panel4.Location = new Point(0, 0);
|
||||
panel4.Name = "panel4";
|
||||
panel4.Size = new Size(669, 45);
|
||||
panel4.TabIndex = 37;
|
||||
panel4.Text = "panel4";
|
||||
//
|
||||
// btnStartResetDelete
|
||||
//
|
||||
btnStartResetDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStartResetDelete.Location = new Point(110, 10);
|
||||
btnStartResetDelete.Name = "btnStartResetDelete";
|
||||
btnStartResetDelete.Size = new Size(74, 32);
|
||||
btnStartResetDelete.TabIndex = 36;
|
||||
btnStartResetDelete.Text = "删除";
|
||||
btnStartResetDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnStartResetDelete.WaveSize = 0;
|
||||
//
|
||||
// btnStartResetAdd
|
||||
//
|
||||
btnStartResetAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStartResetAdd.Location = new Point(13, 10);
|
||||
btnStartResetAdd.Name = "btnStartResetAdd";
|
||||
btnStartResetAdd.Size = new Size(82, 32);
|
||||
btnStartResetAdd.TabIndex = 35;
|
||||
btnStartResetAdd.Text = "新增";
|
||||
btnStartResetAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnStartResetAdd.WaveSize = 0;
|
||||
//
|
||||
// tabPage5
|
||||
//
|
||||
tabPage5.Controls.Add(TableStopReset);
|
||||
tabPage5.Controls.Add(panel5);
|
||||
tabPage5.Location = new Point(-669, -499);
|
||||
tabPage5.Name = "tabPage5";
|
||||
tabPage5.Size = new Size(669, 499);
|
||||
tabPage5.TabIndex = 4;
|
||||
tabPage5.Text = "复位结束操作";
|
||||
//
|
||||
// TableStopReset
|
||||
//
|
||||
TableStopReset.Dock = DockStyle.Fill;
|
||||
TableStopReset.EmptyHeader = true;
|
||||
TableStopReset.Location = new Point(0, 45);
|
||||
TableStopReset.Name = "TableStopReset";
|
||||
TableStopReset.Padding = new Padding(5);
|
||||
TableStopReset.Size = new Size(669, 454);
|
||||
TableStopReset.TabIndex = 38;
|
||||
TableStopReset.Text = "table1";
|
||||
//
|
||||
// panel5
|
||||
//
|
||||
panel5.Back = Color.Transparent;
|
||||
panel5.BackColor = SystemColors.Window;
|
||||
panel5.Controls.Add(btnStopResetDelete);
|
||||
panel5.Controls.Add(btnStopResetAdd);
|
||||
panel5.Dock = DockStyle.Top;
|
||||
panel5.Location = new Point(0, 0);
|
||||
panel5.Name = "panel5";
|
||||
panel5.Size = new Size(669, 45);
|
||||
panel5.TabIndex = 37;
|
||||
panel5.Text = "panel5";
|
||||
//
|
||||
// btnStopResetDelete
|
||||
//
|
||||
btnStopResetDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStopResetDelete.Location = new Point(110, 10);
|
||||
btnStopResetDelete.Name = "btnStopResetDelete";
|
||||
btnStopResetDelete.Size = new Size(74, 32);
|
||||
btnStopResetDelete.TabIndex = 36;
|
||||
btnStopResetDelete.Text = "删除";
|
||||
btnStopResetDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnStopResetDelete.WaveSize = 0;
|
||||
//
|
||||
// btnStopResetAdd
|
||||
//
|
||||
btnStopResetAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnStopResetAdd.Location = new Point(13, 10);
|
||||
btnStopResetAdd.Name = "btnStopResetAdd";
|
||||
btnStopResetAdd.Size = new Size(82, 32);
|
||||
btnStopResetAdd.TabIndex = 35;
|
||||
btnStopResetAdd.Text = "新增";
|
||||
btnStopResetAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnStopResetAdd.WaveSize = 0;
|
||||
//
|
||||
// panel6
|
||||
//
|
||||
panel6.Controls.Add(iptClearTime);
|
||||
panel6.Controls.Add(uiLabel3);
|
||||
panel6.Controls.Add(swhEnableBelt);
|
||||
panel6.Controls.Add(uiLabel2);
|
||||
panel6.Controls.Add(swhEnableVibrator);
|
||||
panel6.Controls.Add(uiLabel1);
|
||||
panel6.Dock = DockStyle.Left;
|
||||
panel6.Location = new Point(0, 0);
|
||||
panel6.Name = "panel6";
|
||||
panel6.Size = new Size(427, 499);
|
||||
panel6.TabIndex = 0;
|
||||
panel6.Text = "panel6";
|
||||
//
|
||||
// panel7
|
||||
//
|
||||
panel7.Dock = DockStyle.Fill;
|
||||
panel7.Location = new Point(427, 0);
|
||||
panel7.Name = "panel7";
|
||||
panel7.Size = new Size(465, 499);
|
||||
panel7.TabIndex = 1;
|
||||
panel7.Text = "panel7";
|
||||
//
|
||||
// uiLabel1
|
||||
//
|
||||
uiLabel1.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
uiLabel1.ForeColor = Color.FromArgb(48, 48, 48);
|
||||
uiLabel1.Location = new Point(28, 36);
|
||||
uiLabel1.Name = "uiLabel1";
|
||||
uiLabel1.Size = new Size(63, 23);
|
||||
uiLabel1.TabIndex = 0;
|
||||
uiLabel1.Text = "振动盘";
|
||||
//
|
||||
// swhEnableVibrator
|
||||
//
|
||||
swhEnableVibrator.CheckedText = "启用";
|
||||
swhEnableVibrator.Location = new Point(97, 26);
|
||||
swhEnableVibrator.Name = "swhEnableVibrator";
|
||||
swhEnableVibrator.Size = new Size(94, 33);
|
||||
swhEnableVibrator.TabIndex = 50;
|
||||
swhEnableVibrator.UnCheckedText = "关闭";
|
||||
//
|
||||
// swhEnableBelt
|
||||
//
|
||||
swhEnableBelt.CheckedText = "启用";
|
||||
swhEnableBelt.Location = new Point(97, 82);
|
||||
swhEnableBelt.Name = "swhEnableBelt";
|
||||
swhEnableBelt.Size = new Size(94, 33);
|
||||
swhEnableBelt.TabIndex = 52;
|
||||
swhEnableBelt.UnCheckedText = "关闭";
|
||||
//
|
||||
// uiLabel2
|
||||
//
|
||||
uiLabel2.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
uiLabel2.ForeColor = Color.FromArgb(48, 48, 48);
|
||||
uiLabel2.Location = new Point(28, 92);
|
||||
uiLabel2.Name = "uiLabel2";
|
||||
uiLabel2.Size = new Size(63, 23);
|
||||
uiLabel2.TabIndex = 51;
|
||||
uiLabel2.Text = "皮带";
|
||||
//
|
||||
// uiLabel3
|
||||
//
|
||||
uiLabel3.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
uiLabel3.ForeColor = Color.FromArgb(48, 48, 48);
|
||||
uiLabel3.Location = new Point(17, 142);
|
||||
uiLabel3.Name = "uiLabel3";
|
||||
uiLabel3.Size = new Size(74, 23);
|
||||
uiLabel3.TabIndex = 53;
|
||||
uiLabel3.Text = "清料时间";
|
||||
//
|
||||
// iptClearTime
|
||||
//
|
||||
iptClearTime.Location = new Point(97, 131);
|
||||
iptClearTime.Name = "iptClearTime";
|
||||
iptClearTime.Size = new Size(94, 43);
|
||||
iptClearTime.TabIndex = 54;
|
||||
iptClearTime.Text = "0";
|
||||
//
|
||||
// GlobalControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(tabs1);
|
||||
Name = "GlobalControl";
|
||||
Size = new Size(898, 530);
|
||||
tabs1.ResumeLayout(false);
|
||||
tabPage6.ResumeLayout(false);
|
||||
tabPage1.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
tabPage2.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
tabPage3.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
tabPage4.ResumeLayout(false);
|
||||
panel4.ResumeLayout(false);
|
||||
tabPage5.ResumeLayout(false);
|
||||
panel5.ResumeLayout(false);
|
||||
panel6.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Tabs tabs1;
|
||||
private AntdUI.TabPage tabPage2;
|
||||
private AntdUI.TabPage tabPage3;
|
||||
private AntdUI.TabPage tabPage4;
|
||||
private AntdUI.TabPage tabPage5;
|
||||
private AntdUI.Table TableSartProcess;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Button btnSartProcessDelete;
|
||||
private AntdUI.Button btnSartProcessAdd;
|
||||
private AntdUI.Table TableStopProcess;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Button btnStopProcessDelete;
|
||||
private AntdUI.Button btnStopProcessAdd;
|
||||
private AntdUI.Table TableStartReset;
|
||||
private AntdUI.Panel panel4;
|
||||
private AntdUI.Button btnStartResetDelete;
|
||||
private AntdUI.Button btnStartResetAdd;
|
||||
private AntdUI.Table TableStopReset;
|
||||
private AntdUI.Panel panel5;
|
||||
private AntdUI.Button btnStopResetDelete;
|
||||
private AntdUI.Button btnStopResetAdd;
|
||||
private AntdUI.TabPage tabPage1;
|
||||
private AntdUI.Table TableInitProcess;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Button btnAdd;
|
||||
private AntdUI.Button btnDelete;
|
||||
private AntdUI.TabPage tabPage6;
|
||||
private AntdUI.Panel panel7;
|
||||
private AntdUI.Panel panel6;
|
||||
private Sunny.UI.UILabel uiLabel1;
|
||||
private AntdUI.Switch swhEnableBelt;
|
||||
private Sunny.UI.UILabel uiLabel2;
|
||||
private AntdUI.Switch swhEnableVibrator;
|
||||
private Sunny.UI.UILabel uiLabel3;
|
||||
private AntdUI.Input iptClearTime;
|
||||
}
|
||||
}
|
822
DHSoftware/Views/GlobalControl.cs
Normal file
822
DHSoftware/Views/GlobalControl.cs
Normal file
@ -0,0 +1,822 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Models;
|
||||
using XKRS.CanFly;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class GlobalControl : UserControl
|
||||
{
|
||||
private Window window;
|
||||
private GlobalConfig global;
|
||||
public GlobalControl(Window _window, GlobalConfig _global)
|
||||
{
|
||||
window = _window;
|
||||
global = _global;
|
||||
InitializeComponent();
|
||||
BindEventHandler();
|
||||
InitData();
|
||||
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
|
||||
btnAdd.Click += BtnAdd_Click;
|
||||
btnDelete.Click += BtnDelete_Click;
|
||||
TableInitProcess.CellButtonClick += ItemsTable_CellButtonClick;
|
||||
|
||||
btnSartProcessAdd.Click += BtnSartProcessAdd_Click;
|
||||
btnSartProcessDelete.Click += BtnSartProcessDelete_Click;
|
||||
TableSartProcess.CellButtonClick += TableSartProcess_CellButtonClick;
|
||||
|
||||
btnStopProcessAdd.Click += BtnStopProcessAdd_Click;
|
||||
btnStopProcessDelete.Click += BtnStopProcessDelete_Click;
|
||||
TableStopProcess.CellButtonClick += TableStopProcess_CellButtonClick;
|
||||
|
||||
btnStartResetAdd.Click += BtnStartResetAdd_Click;
|
||||
btnStartResetDelete.Click += BtnStartResetDelete_Click;
|
||||
TableStartReset.CellButtonClick += TableStartReset_CellButtonClick;
|
||||
|
||||
btnStopResetAdd.Click += BtnStopResetAdd_Click;
|
||||
btnStopResetDelete.Click += BtnStopResetDelete_Click;
|
||||
TableStopReset.CellButtonClick += TableStopReset_CellButtonClick;
|
||||
}
|
||||
|
||||
private void TableStopReset_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem Item)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionProcessEdit(window, "复位结束表操作-编辑", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入复位结束表编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "退出复位结束表编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
global.StopResetList.Remove(Item);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(global.StopResetList, Item);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > global.StopResetList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(global.StopResetList, Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStopResetDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (global.StopResetList.Count == 0 || !global.StopResetList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = global.StopResetList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (global.StopResetList[i].Selected)
|
||||
{
|
||||
global.StopResetList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStopResetAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList.Count == 0)
|
||||
{
|
||||
AntdUI.Message.warn(window, "点位表无数据,不允许新增!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
PLCItem Item = new PLCItem()
|
||||
{
|
||||
StartIndex = global.StopResetList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionProcessEdit(window, "复位结束表操作-新增", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入复位结束表新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
global.StopResetList.Add(Item);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "退出复位结束表新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void TableStartReset_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem Item)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionProcessEdit(window, "复位开始表操作-编辑", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入复位开始表编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "退出复位开始表编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
global.StartResetList.Remove(Item);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(global.StartResetList, Item);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > global.StartResetList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(global.StartResetList, Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStartResetDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (global.StartResetList.Count == 0 || !global.StartResetList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = global.StartResetList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (global.StartResetList[i].Selected)
|
||||
{
|
||||
global.StartResetList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStartResetAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList.Count == 0)
|
||||
{
|
||||
AntdUI.Message.warn(window, "点位表无数据,不允许新增!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
PLCItem Item = new PLCItem()
|
||||
{
|
||||
StartIndex = global.StartResetList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionProcessEdit(window, "复位开始表操作-新增", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入复位开始表新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
global.StartResetList.Add(Item);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "退出复位开始表新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void TableStopProcess_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem Item)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionProcessEdit(window, "流程结束表操作-编辑", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程结束表编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "退出流程结束表编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
global.StopProcessList.Remove(Item);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(global.StopProcessList, Item);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > global.StopProcessList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(global.StopProcessList, Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStopProcessDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (global.StopProcessList.Count == 0 || !global.StopProcessList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = global.StopProcessList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (global.StopProcessList[i].Selected)
|
||||
{
|
||||
global.StopProcessList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnStopProcessAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList.Count == 0)
|
||||
{
|
||||
AntdUI.Message.warn(window, "点位表无数据,不允许新增!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
PLCItem Item = new PLCItem()
|
||||
{
|
||||
StartIndex = global.StopProcessList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionProcessEdit(window, "流程结束表操作-新增", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程结束表新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
global.StopProcessList.Add(Item);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "退出流程结束表新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void TableSartProcess_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem Item)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionProcessEdit(window, "流程开始表操作-编辑", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程开始表编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "退出流程开始表编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
global.StartProcessList.Remove(Item);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(global.StartProcessList, Item);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > global.StartProcessList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(global.StartProcessList, Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSartProcessDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (global.StartProcessList.Count == 0 || !global.StartProcessList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = global.StartProcessList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (global.StartProcessList[i].Selected)
|
||||
{
|
||||
global.StartProcessList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSartProcessAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList.Count == 0)
|
||||
{
|
||||
AntdUI.Message.warn(window, "点位表无数据,不允许新增!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
PLCItem Item = new PLCItem()
|
||||
{
|
||||
StartIndex = global.StartProcessList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionProcessEdit(window, "流程开始表操作-新增", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程开始表新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
global.StartProcessList.Add(Item);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "退出流程开始表新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void ItemsTable_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem Item)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionProcessEdit(window, "流程加载表操作-编辑", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程加载表编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "退出流程加载表编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
global.InitProcessList.Remove(Item);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(global.InitProcessList, Item);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > global.InitProcessList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(global.InitProcessList, Item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 上移项
|
||||
public static void MoveItemUp(BindingList<PLCItem> list, PLCItem item)
|
||||
{
|
||||
int index = list.IndexOf(item);
|
||||
if (index > 0)
|
||||
{
|
||||
// 移除并插入到前一位
|
||||
list.RemoveAt(index);
|
||||
list.Insert(index - 1, item);
|
||||
UpdateStartIndexes(list); // 更新序号
|
||||
}
|
||||
}
|
||||
|
||||
// 下移项
|
||||
public static void MoveItemDown(BindingList<PLCItem> list, PLCItem item)
|
||||
{
|
||||
int index = list.IndexOf(item);
|
||||
if (index < list.Count - 1)
|
||||
{
|
||||
// 移除并插入到后一位
|
||||
list.RemoveAt(index);
|
||||
list.Insert(index + 1, item);
|
||||
UpdateStartIndexes(list); // 更新序号
|
||||
}
|
||||
}
|
||||
|
||||
// 更新所有项的序号
|
||||
public static void UpdateStartIndexes(BindingList<PLCItem> list)
|
||||
{
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
PLCItem item = list[i];
|
||||
if (item.StartIndex != i + 1)
|
||||
{
|
||||
item.StartIndex = i + 1; // 触发 PropertyChanged 事件
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (global.InitProcessList.Count == 0 || !global.InitProcessList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = global.InitProcessList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (global.InitProcessList[i].Selected)
|
||||
{
|
||||
global.InitProcessList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList.Count == 0)
|
||||
{
|
||||
AntdUI.Message.warn(window, "点位表无数据,不允许新增!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
PLCItem Item = new PLCItem()
|
||||
{
|
||||
StartIndex = global.InitProcessList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{ new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionProcessEdit(window, "流程加载表操作-新增", Item, ConfigModel.PLCBaseList?.FirstOrDefault()?.PLCItemList) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入流程加载表新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
global.InitProcessList.Add(Item);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "退出流程加载表新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
|
||||
// 启用状态绑定
|
||||
swhEnableVibrator.DataBindings.Add("Checked", global, "EnableVibrator", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
swhEnableBelt.DataBindings.Add("Checked", global, "EnableBelt", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptClearTime.DataBindings.Add("Text", global, "ClearTime", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
|
||||
TableInitProcess.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new ColumnSwitch("StartExecute", "启用", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center){Visible=false},
|
||||
new Column("Address", "地址",ColumnAlign.Center){Visible=false},
|
||||
new Column("Value", "值",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (global.InitProcessList.Count > 0)
|
||||
{
|
||||
foreach (var item in global.InitProcessList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
TableInitProcess.Binding(global.InitProcessList);
|
||||
|
||||
TableSartProcess.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new ColumnSwitch("StartExecute", "启用", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center){Visible=false},
|
||||
new Column("Address", "地址",ColumnAlign.Center){Visible=false},
|
||||
new Column("Value", "值",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (global.StartProcessList.Count > 0)
|
||||
{
|
||||
foreach (var item in global.StartProcessList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
//TableSartProcess.Binding(global.StartProcessList);
|
||||
TableSartProcess.Binding(global.StartProcessList);
|
||||
TableStopProcess.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new ColumnSwitch("StartExecute", "启用", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center){Visible=false},
|
||||
new Column("Address", "地址",ColumnAlign.Center){Visible=false},
|
||||
new Column("Value", "值",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (global.StopProcessList.Count > 0)
|
||||
{
|
||||
foreach (var item in global.StopProcessList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
TableStopProcess.Binding(global.StopProcessList);
|
||||
|
||||
TableStartReset.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new ColumnSwitch("StartExecute", "启用", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center){Visible=false},
|
||||
new Column("Address", "地址",ColumnAlign.Center){Visible=false},
|
||||
new Column("Value", "值",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (global.StartResetList.Count > 0)
|
||||
{
|
||||
foreach (var item in global.StartResetList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
TableStartReset.Binding(global.StartResetList);
|
||||
|
||||
TableStopReset.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new ColumnSwitch("StartExecute", "启用", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center){Visible=false},
|
||||
new Column("Address", "地址",ColumnAlign.Center){Visible=false},
|
||||
new Column("Value", "值",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (global.StopResetList.Count > 0)
|
||||
{
|
||||
foreach (var item in global.StopResetList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
TableStopReset.Binding(global.StopResetList);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
28
DHSoftware/Views/ImageViewerControl.Designer.cs
generated
Normal file
28
DHSoftware/Views/ImageViewerControl.Designer.cs
generated
Normal file
@ -0,0 +1,28 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class ImageViewerControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
346
DHSoftware/Views/ImageViewerControl.cs
Normal file
346
DHSoftware/Views/ImageViewerControl.cs
Normal file
@ -0,0 +1,346 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class ImageViewerControl : UserControl
|
||||
{
|
||||
#region 内部控件
|
||||
private PictureBox pictureBox;
|
||||
private Label statusLabel;
|
||||
#endregion
|
||||
|
||||
#region 核心字段
|
||||
private Bitmap _currentImage;
|
||||
private float _scale = 1.0f;
|
||||
private PointF _offset = PointF.Empty;
|
||||
private Point _dragStart;
|
||||
private bool _isDragging;
|
||||
private readonly object _imageLock = new object();
|
||||
#endregion
|
||||
|
||||
#region 公开属性
|
||||
public Bitmap Image
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
return _currentImage?.Clone() as Bitmap;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
Bitmap newImage = value?.Clone() as Bitmap;
|
||||
Bitmap oldImageToDispose = null;
|
||||
|
||||
lock (_imageLock)
|
||||
{
|
||||
// 交换图像引用
|
||||
oldImageToDispose = _currentImage;
|
||||
_currentImage = newImage;
|
||||
|
||||
if (_currentImage != null)
|
||||
{
|
||||
if (oldImageToDispose?.Size != _currentImage.Size)
|
||||
{
|
||||
AutoFit();
|
||||
}
|
||||
else
|
||||
{
|
||||
ClampOffset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 在锁外安全释放旧图像
|
||||
if (oldImageToDispose != null)
|
||||
{
|
||||
// 使用BeginInvoke确保在UI线程释放资源
|
||||
BeginInvoke(new Action(() =>
|
||||
{
|
||||
oldImageToDispose.Dispose();
|
||||
oldImageToDispose = null;
|
||||
}));
|
||||
}
|
||||
|
||||
SafeInvalidate();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public ImageViewerControl()
|
||||
{
|
||||
InitializeComponents();
|
||||
SetupDoubleBuffering();
|
||||
}
|
||||
|
||||
#region 初始化
|
||||
private void InitializeComponents()
|
||||
{
|
||||
pictureBox = new PictureBox
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.DarkGray,
|
||||
Cursor = Cursors.Hand
|
||||
};
|
||||
|
||||
statusLabel = new Label
|
||||
{
|
||||
Dock = DockStyle.Bottom,
|
||||
Height = 20,
|
||||
Text = "就绪",
|
||||
BorderStyle = BorderStyle.FixedSingle,
|
||||
Font = new Font("Consolas", 10)
|
||||
};
|
||||
|
||||
pictureBox.MouseDown += PictureBox_MouseDown;
|
||||
pictureBox.MouseMove += PictureBox_MouseMove;
|
||||
pictureBox.MouseUp += PictureBox_MouseUp;
|
||||
pictureBox.MouseWheel += PictureBox_MouseWheel;
|
||||
pictureBox.Paint += PictureBox_Paint;
|
||||
|
||||
Controls.Add(pictureBox);
|
||||
Controls.Add(statusLabel);
|
||||
}
|
||||
|
||||
private void SetupDoubleBuffering()
|
||||
{
|
||||
typeof(PictureBox).GetMethod("SetStyle",
|
||||
System.Reflection.BindingFlags.NonPublic |
|
||||
System.Reflection.BindingFlags.Instance)?
|
||||
.Invoke(pictureBox, new object[] {
|
||||
ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.AllPaintingInWmPaint,
|
||||
true
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 核心功能
|
||||
private void AutoFit()
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
const float marginRatio = 0.1f;
|
||||
float marginWidth = Width * marginRatio;
|
||||
float marginHeight = Height * marginRatio;
|
||||
|
||||
_scale = Math.Min(
|
||||
(Width - marginWidth * 2) / _currentImage.Width,
|
||||
(Height - marginHeight * 2) / _currentImage.Height
|
||||
);
|
||||
|
||||
_offset.X = marginWidth + (Width - marginWidth * 2 - _currentImage.Width * _scale) / 2;
|
||||
_offset.Y = marginHeight + (Height - marginHeight * 2 - _currentImage.Height * _scale) / 2;
|
||||
|
||||
ClampOffset();
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBox_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
Bitmap drawImage = null;
|
||||
RectangleF destRect;
|
||||
float scale;
|
||||
PointF offset;
|
||||
|
||||
// 创建临时绘图参数
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
// 创建绘图副本
|
||||
drawImage = _currentImage.Clone() as Bitmap;
|
||||
scale = _scale;
|
||||
offset = _offset;
|
||||
|
||||
destRect = new RectangleF(
|
||||
offset.X,
|
||||
offset.Y,
|
||||
drawImage.Width * scale,
|
||||
drawImage.Height * scale);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
e.Graphics.DrawImage(drawImage, destRect);
|
||||
}
|
||||
finally
|
||||
{
|
||||
drawImage?.Dispose();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 鼠标交互(左键拖动)
|
||||
private void PictureBox_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (InvokeRequired) return;
|
||||
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
_dragStart = e.Location;
|
||||
_isDragging = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBox_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (InvokeRequired) return;
|
||||
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
if (_isDragging)
|
||||
{
|
||||
_offset.X += e.X - _dragStart.X;
|
||||
_offset.Y += e.Y - _dragStart.Y;
|
||||
_dragStart = e.Location;
|
||||
ClampOffset();
|
||||
SafeInvalidate();
|
||||
}
|
||||
|
||||
UpdateStatus(e.Location);
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBox_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
_isDragging = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBox_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (InvokeRequired) return;
|
||||
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
PointF imgPos = ConvertToImageCoords(e.Location);
|
||||
if (imgPos.X < 0 || imgPos.X > _currentImage.Width ||
|
||||
imgPos.Y < 0 || imgPos.Y > _currentImage.Height)
|
||||
return;
|
||||
|
||||
float zoom = e.Delta > 0 ? 1.1f : 0.9f;
|
||||
float newScale = Math.Clamp(_scale * zoom, 0.1f, 10f);
|
||||
|
||||
_offset.X = e.Location.X - imgPos.X * newScale;
|
||||
_offset.Y = e.Location.Y - imgPos.Y * newScale;
|
||||
|
||||
_scale = newScale;
|
||||
ClampOffset();
|
||||
SafeInvalidate();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 辅助方法
|
||||
private PointF ConvertToImageCoords(Point mousePos)
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return PointF.Empty;
|
||||
return new PointF(
|
||||
(mousePos.X - _offset.X) / _scale,
|
||||
(mousePos.Y - _offset.Y) / _scale);
|
||||
}
|
||||
}
|
||||
|
||||
private void ClampOffset()
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null) return;
|
||||
|
||||
float imgWidth = _currentImage.Width * _scale;
|
||||
float imgHeight = _currentImage.Height * _scale;
|
||||
|
||||
_offset.X = Math.Clamp(_offset.X,
|
||||
imgWidth > Width ? Width - imgWidth : 0,
|
||||
imgWidth > Width ? 0 : Width - imgWidth);
|
||||
|
||||
_offset.Y = Math.Clamp(_offset.Y,
|
||||
imgHeight > Height ? Height - imgHeight : 0,
|
||||
imgHeight > Height ? 0 : Height - imgHeight);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateStatus(Point mousePos)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
{
|
||||
BeginInvoke(new Action<Point>(UpdateStatus), mousePos);
|
||||
return;
|
||||
}
|
||||
|
||||
lock (_imageLock)
|
||||
{
|
||||
if (_currentImage == null)
|
||||
{
|
||||
statusLabel.Text = "无有效图像";
|
||||
return;
|
||||
}
|
||||
|
||||
PointF imgPos = ConvertToImageCoords(mousePos);
|
||||
bool inImage = imgPos.X >= 0 && imgPos.X <= _currentImage.Width &&
|
||||
imgPos.Y >= 0 && imgPos.Y <= _currentImage.Height;
|
||||
|
||||
statusLabel.Text = inImage ?
|
||||
$"坐标: ({imgPos.X:F1}, {imgPos.Y:F1}) | 缩放: {_scale * 100:0}%" :
|
||||
$"图像尺寸: {_currentImage.Width}x{_currentImage.Height} | 缩放: {_scale * 100:0}%";
|
||||
}
|
||||
}
|
||||
|
||||
private void SafeInvalidate()
|
||||
{
|
||||
if (InvokeRequired)
|
||||
{
|
||||
BeginInvoke(new Action(pictureBox.Invalidate));
|
||||
}
|
||||
else
|
||||
{
|
||||
pictureBox.Invalidate();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public Bitmap GetCurrentSnapshot()
|
||||
{
|
||||
lock (_imageLock)
|
||||
{
|
||||
// 返回深拷贝防止原始图像被修改
|
||||
return _currentImage?.Clone() as Bitmap;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
lock (_imageLock)
|
||||
{
|
||||
_currentImage?.Dispose();
|
||||
_currentImage = null;
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
120
DHSoftware/Views/ImageViewerControl.resx
Normal file
120
DHSoftware/Views/ImageViewerControl.resx
Normal 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>
|
470
DHSoftware/Views/MotionControl.Designer.cs
generated
Normal file
470
DHSoftware/Views/MotionControl.Designer.cs
generated
Normal file
@ -0,0 +1,470 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class MotionControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
|
||||
stackPanel2 = new AntdUI.StackPanel();
|
||||
swhEnable = new AntdUI.Switch();
|
||||
label4 = new AntdUI.Label();
|
||||
stackPanel3 = new AntdUI.StackPanel();
|
||||
sltTpye = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
stpCom = new AntdUI.StackPanel();
|
||||
cmbCom = new AntdUI.Select();
|
||||
label2 = new AntdUI.Label();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
stpPort = new AntdUI.StackPanel();
|
||||
iptPort = new AntdUI.Input();
|
||||
label9 = new AntdUI.Label();
|
||||
stpIP = new AntdUI.StackPanel();
|
||||
iptIP = new AntdUI.Input();
|
||||
label8 = new AntdUI.Label();
|
||||
stpParity = new AntdUI.StackPanel();
|
||||
cmbParity = new AntdUI.Select();
|
||||
label7 = new AntdUI.Label();
|
||||
stpStop = new AntdUI.StackPanel();
|
||||
cmbStopBits = new AntdUI.Select();
|
||||
label6 = new AntdUI.Label();
|
||||
stpData = new AntdUI.StackPanel();
|
||||
cmbDataBits = new AntdUI.Select();
|
||||
label5 = new AntdUI.Label();
|
||||
stpBaud = new AntdUI.StackPanel();
|
||||
cmbBaudRate = new AntdUI.Select();
|
||||
label3 = new AntdUI.Label();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
tabPage1 = new AntdUI.TabPage();
|
||||
PLCItemsTable = new AntdUI.Table();
|
||||
panel1 = new AntdUI.Panel();
|
||||
btnDelete = new AntdUI.Button();
|
||||
btnAdd = new AntdUI.Button();
|
||||
stackPanel2.SuspendLayout();
|
||||
stackPanel3.SuspendLayout();
|
||||
stpCom.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
stpPort.SuspendLayout();
|
||||
stpIP.SuspendLayout();
|
||||
stpParity.SuspendLayout();
|
||||
stpStop.SuspendLayout();
|
||||
stpData.SuspendLayout();
|
||||
stpBaud.SuspendLayout();
|
||||
tabs1.SuspendLayout();
|
||||
tabPage1.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// stackPanel2
|
||||
//
|
||||
stackPanel2.Controls.Add(swhEnable);
|
||||
stackPanel2.Controls.Add(label4);
|
||||
stackPanel2.Dock = DockStyle.Top;
|
||||
stackPanel2.Location = new Point(3, 3);
|
||||
stackPanel2.Name = "stackPanel2";
|
||||
stackPanel2.Size = new Size(217, 43);
|
||||
stackPanel2.TabIndex = 0;
|
||||
stackPanel2.Text = "stackPanel2";
|
||||
//
|
||||
// swhEnable
|
||||
//
|
||||
swhEnable.CheckedText = "启用";
|
||||
swhEnable.Location = new Point(68, 3);
|
||||
swhEnable.Name = "swhEnable";
|
||||
swhEnable.Size = new Size(93, 37);
|
||||
swhEnable.TabIndex = 25;
|
||||
swhEnable.UnCheckedText = "关闭";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
label4.Location = new Point(3, 3);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(59, 37);
|
||||
label4.TabIndex = 24;
|
||||
label4.Text = "状 态";
|
||||
//
|
||||
// stackPanel3
|
||||
//
|
||||
stackPanel3.Controls.Add(sltTpye);
|
||||
stackPanel3.Controls.Add(label1);
|
||||
stackPanel3.Dock = DockStyle.Top;
|
||||
stackPanel3.Location = new Point(3, 52);
|
||||
stackPanel3.Name = "stackPanel3";
|
||||
stackPanel3.Size = new Size(217, 43);
|
||||
stackPanel3.TabIndex = 1;
|
||||
stackPanel3.Text = "stackPanel3";
|
||||
//
|
||||
// sltTpye
|
||||
//
|
||||
sltTpye.List = true;
|
||||
sltTpye.Location = new Point(68, 3);
|
||||
sltTpye.Name = "sltTpye";
|
||||
sltTpye.Size = new Size(129, 37);
|
||||
sltTpye.TabIndex = 25;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(3, 3);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(59, 37);
|
||||
label1.TabIndex = 24;
|
||||
label1.Text = "类 型";
|
||||
//
|
||||
// stpCom
|
||||
//
|
||||
stpCom.Controls.Add(cmbCom);
|
||||
stpCom.Controls.Add(label2);
|
||||
stpCom.Dock = DockStyle.Top;
|
||||
stpCom.Location = new Point(3, 101);
|
||||
stpCom.Name = "stpCom";
|
||||
stpCom.Size = new Size(217, 43);
|
||||
stpCom.TabIndex = 2;
|
||||
stpCom.Text = "stackPanel4";
|
||||
//
|
||||
// cmbCom
|
||||
//
|
||||
cmbCom.List = true;
|
||||
cmbCom.Location = new Point(68, 3);
|
||||
cmbCom.Name = "cmbCom";
|
||||
cmbCom.Size = new Size(129, 37);
|
||||
cmbCom.TabIndex = 25;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Location = new Point(3, 3);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(59, 37);
|
||||
label2.TabIndex = 24;
|
||||
label2.Text = "串 口";
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(stpPort);
|
||||
stackPanel1.Controls.Add(stpIP);
|
||||
stackPanel1.Controls.Add(stpParity);
|
||||
stackPanel1.Controls.Add(stpStop);
|
||||
stackPanel1.Controls.Add(stpData);
|
||||
stackPanel1.Controls.Add(stpBaud);
|
||||
stackPanel1.Controls.Add(stpCom);
|
||||
stackPanel1.Controls.Add(stackPanel3);
|
||||
stackPanel1.Controls.Add(stackPanel2);
|
||||
stackPanel1.Dock = DockStyle.Left;
|
||||
stackPanel1.Location = new Point(0, 0);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.Size = new Size(223, 530);
|
||||
stackPanel1.TabIndex = 25;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
stackPanel1.Vertical = true;
|
||||
//
|
||||
// stpPort
|
||||
//
|
||||
stpPort.Controls.Add(iptPort);
|
||||
stpPort.Controls.Add(label9);
|
||||
stpPort.Dock = DockStyle.Top;
|
||||
stpPort.Location = new Point(3, 395);
|
||||
stpPort.Name = "stpPort";
|
||||
stpPort.Size = new Size(217, 43);
|
||||
stpPort.TabIndex = 14;
|
||||
stpPort.Text = "stackPanel10";
|
||||
//
|
||||
// iptPort
|
||||
//
|
||||
iptPort.Location = new Point(68, 3);
|
||||
iptPort.Name = "iptPort";
|
||||
iptPort.Size = new Size(129, 37);
|
||||
iptPort.TabIndex = 26;
|
||||
//
|
||||
// label9
|
||||
//
|
||||
label9.Location = new Point(3, 3);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(59, 37);
|
||||
label9.TabIndex = 24;
|
||||
label9.Text = "端 口 号";
|
||||
//
|
||||
// stpIP
|
||||
//
|
||||
stpIP.Controls.Add(iptIP);
|
||||
stpIP.Controls.Add(label8);
|
||||
stpIP.Dock = DockStyle.Top;
|
||||
stpIP.Location = new Point(3, 346);
|
||||
stpIP.Name = "stpIP";
|
||||
stpIP.Size = new Size(217, 43);
|
||||
stpIP.TabIndex = 13;
|
||||
stpIP.Text = "stackPanel9";
|
||||
//
|
||||
// iptIP
|
||||
//
|
||||
iptIP.Location = new Point(68, 3);
|
||||
iptIP.Name = "iptIP";
|
||||
iptIP.Size = new Size(129, 37);
|
||||
iptIP.TabIndex = 25;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
label8.Location = new Point(3, 3);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(59, 37);
|
||||
label8.TabIndex = 24;
|
||||
label8.Text = "I P 地 址";
|
||||
//
|
||||
// stpParity
|
||||
//
|
||||
stpParity.Controls.Add(cmbParity);
|
||||
stpParity.Controls.Add(label7);
|
||||
stpParity.Dock = DockStyle.Top;
|
||||
stpParity.Location = new Point(3, 297);
|
||||
stpParity.Name = "stpParity";
|
||||
stpParity.Size = new Size(217, 43);
|
||||
stpParity.TabIndex = 12;
|
||||
stpParity.Text = "stackPanel8";
|
||||
//
|
||||
// cmbParity
|
||||
//
|
||||
cmbParity.List = true;
|
||||
cmbParity.Location = new Point(68, 3);
|
||||
cmbParity.Name = "cmbParity";
|
||||
cmbParity.Size = new Size(129, 37);
|
||||
cmbParity.TabIndex = 25;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Location = new Point(3, 3);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(59, 37);
|
||||
label7.TabIndex = 24;
|
||||
label7.Text = "校 验 位";
|
||||
//
|
||||
// stpStop
|
||||
//
|
||||
stpStop.Controls.Add(cmbStopBits);
|
||||
stpStop.Controls.Add(label6);
|
||||
stpStop.Dock = DockStyle.Top;
|
||||
stpStop.Location = new Point(3, 248);
|
||||
stpStop.Name = "stpStop";
|
||||
stpStop.Size = new Size(217, 43);
|
||||
stpStop.TabIndex = 11;
|
||||
stpStop.Text = "stackPanel7";
|
||||
//
|
||||
// cmbStopBits
|
||||
//
|
||||
cmbStopBits.List = true;
|
||||
cmbStopBits.Location = new Point(68, 3);
|
||||
cmbStopBits.Name = "cmbStopBits";
|
||||
cmbStopBits.Size = new Size(129, 37);
|
||||
cmbStopBits.TabIndex = 25;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
label6.Location = new Point(3, 3);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(59, 37);
|
||||
label6.TabIndex = 24;
|
||||
label6.Text = "停 止 位";
|
||||
//
|
||||
// stpData
|
||||
//
|
||||
stpData.Controls.Add(cmbDataBits);
|
||||
stpData.Controls.Add(label5);
|
||||
stpData.Dock = DockStyle.Top;
|
||||
stpData.Location = new Point(3, 199);
|
||||
stpData.Name = "stpData";
|
||||
stpData.Size = new Size(217, 43);
|
||||
stpData.TabIndex = 10;
|
||||
stpData.Text = "stackPanel6";
|
||||
//
|
||||
// cmbDataBits
|
||||
//
|
||||
cmbDataBits.List = true;
|
||||
cmbDataBits.Location = new Point(68, 3);
|
||||
cmbDataBits.Name = "cmbDataBits";
|
||||
cmbDataBits.Size = new Size(129, 37);
|
||||
cmbDataBits.TabIndex = 25;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
label5.Location = new Point(3, 3);
|
||||
label5.Name = "label5";
|
||||
label5.Size = new Size(59, 37);
|
||||
label5.TabIndex = 24;
|
||||
label5.Text = "数 据 位";
|
||||
//
|
||||
// stpBaud
|
||||
//
|
||||
stpBaud.Controls.Add(cmbBaudRate);
|
||||
stpBaud.Controls.Add(label3);
|
||||
stpBaud.Dock = DockStyle.Top;
|
||||
stpBaud.Location = new Point(3, 150);
|
||||
stpBaud.Name = "stpBaud";
|
||||
stpBaud.Size = new Size(217, 43);
|
||||
stpBaud.TabIndex = 9;
|
||||
stpBaud.Text = "stackPanel5";
|
||||
//
|
||||
// cmbBaudRate
|
||||
//
|
||||
cmbBaudRate.List = true;
|
||||
cmbBaudRate.Location = new Point(68, 3);
|
||||
cmbBaudRate.Name = "cmbBaudRate";
|
||||
cmbBaudRate.Size = new Size(129, 37);
|
||||
cmbBaudRate.TabIndex = 25;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Location = new Point(3, 3);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(59, 37);
|
||||
label3.TabIndex = 24;
|
||||
label3.Text = "波 特 率";
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Location = new Point(223, 0);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Pages.Add(tabPage1);
|
||||
tabs1.Size = new Size(675, 530);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 26;
|
||||
tabs1.Text = "tabs1";
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
tabPage1.Controls.Add(PLCItemsTable);
|
||||
tabPage1.Controls.Add(panel1);
|
||||
tabPage1.Location = new Point(3, 28);
|
||||
tabPage1.Name = "tabPage1";
|
||||
tabPage1.Size = new Size(669, 499);
|
||||
tabPage1.TabIndex = 0;
|
||||
tabPage1.Text = "点位表";
|
||||
//
|
||||
// PLCItemsTable
|
||||
//
|
||||
PLCItemsTable.Dock = DockStyle.Fill;
|
||||
PLCItemsTable.EmptyHeader = true;
|
||||
PLCItemsTable.Location = new Point(0, 45);
|
||||
PLCItemsTable.Name = "PLCItemsTable";
|
||||
PLCItemsTable.Padding = new Padding(5);
|
||||
PLCItemsTable.Size = new Size(669, 454);
|
||||
PLCItemsTable.TabIndex = 36;
|
||||
PLCItemsTable.Text = "table1";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Back = Color.Transparent;
|
||||
panel1.BackColor = SystemColors.Window;
|
||||
panel1.Controls.Add(btnDelete);
|
||||
panel1.Controls.Add(btnAdd);
|
||||
panel1.Dock = DockStyle.Top;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(669, 45);
|
||||
panel1.TabIndex = 35;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// btnDelete
|
||||
//
|
||||
btnDelete.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnDelete.Location = new Point(110, 10);
|
||||
btnDelete.Name = "btnDelete";
|
||||
btnDelete.Size = new Size(74, 32);
|
||||
btnDelete.TabIndex = 36;
|
||||
btnDelete.Text = "删除";
|
||||
btnDelete.Type = AntdUI.TTypeMini.Error;
|
||||
btnDelete.WaveSize = 0;
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnAdd.Location = new Point(13, 10);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Size = new Size(82, 32);
|
||||
btnAdd.TabIndex = 35;
|
||||
btnAdd.Text = "新增";
|
||||
btnAdd.Type = AntdUI.TTypeMini.Primary;
|
||||
btnAdd.WaveSize = 0;
|
||||
//
|
||||
// MotionControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(tabs1);
|
||||
Controls.Add(stackPanel1);
|
||||
Name = "MotionControl";
|
||||
Size = new Size(898, 530);
|
||||
stackPanel2.ResumeLayout(false);
|
||||
stackPanel3.ResumeLayout(false);
|
||||
stpCom.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
stpPort.ResumeLayout(false);
|
||||
stpIP.ResumeLayout(false);
|
||||
stpParity.ResumeLayout(false);
|
||||
stpStop.ResumeLayout(false);
|
||||
stpData.ResumeLayout(false);
|
||||
stpBaud.ResumeLayout(false);
|
||||
tabs1.ResumeLayout(false);
|
||||
tabPage1.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.StackPanel stackPanel2;
|
||||
private AntdUI.Label label4;
|
||||
private AntdUI.StackPanel stackPanel3;
|
||||
private AntdUI.Select sltTpye;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.StackPanel stpCom;
|
||||
private AntdUI.Select cmbCom;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Switch swhEnable;
|
||||
private AntdUI.StackPanel stpPort;
|
||||
private AntdUI.Input iptPort;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.StackPanel stpIP;
|
||||
private AntdUI.Input iptIP;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.StackPanel stpParity;
|
||||
private AntdUI.Select cmbParity;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.StackPanel stpStop;
|
||||
private AntdUI.Select cmbStopBits;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.StackPanel stpData;
|
||||
private AntdUI.Select cmbDataBits;
|
||||
private AntdUI.Label label5;
|
||||
private AntdUI.StackPanel stpBaud;
|
||||
private AntdUI.Select cmbBaudRate;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Tabs tabs1;
|
||||
private AntdUI.TabPage tabPage1;
|
||||
private AntdUI.Table PLCItemsTable;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Button btnDelete;
|
||||
private AntdUI.Button btnAdd;
|
||||
}
|
||||
}
|
323
DHSoftware/Views/MotionControl.cs
Normal file
323
DHSoftware/Views/MotionControl.cs
Normal file
@ -0,0 +1,323 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO.Ports;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.PLC;
|
||||
using XKRS.CanFly;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class MotionControl : UserControl
|
||||
{
|
||||
private Window window;
|
||||
private PLCBase pLCBase;
|
||||
|
||||
public MotionControl(Window _window, PLCBase _pLCBase)
|
||||
{
|
||||
window = _window;
|
||||
pLCBase = _pLCBase;
|
||||
InitializeComponent();
|
||||
BindEventHandler();
|
||||
InitData();
|
||||
SetupDataBindings();
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
sltTpye.TextChanged += SltTpye_TextChanged;
|
||||
btnAdd.Click += BtnAdd_Click;
|
||||
btnDelete.Click += BtnDelete_Click;
|
||||
PLCItemsTable.CellButtonClick += PLCItemsTable_CellButtonClick;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void PLCItemsTable_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is PLCItem pLCItem)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new MotionEdit(window, "点位表操作-编辑", pLCItem) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "结束编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
pLCBase.PLCItemList.Remove(pLCItem);
|
||||
}
|
||||
break;
|
||||
|
||||
case "上移":
|
||||
if (e.RowIndex <= 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是第一条,无法上移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemUp(pLCBase.PLCItemList, pLCItem);
|
||||
break;
|
||||
|
||||
case "下移":
|
||||
if (e.RowIndex > pLCBase.PLCItemList.Count - 1)
|
||||
{
|
||||
AntdUI.Message.warn(window, "已是最后一条,无法下移!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
MoveItemDown(pLCBase.PLCItemList, pLCItem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 上移项
|
||||
public static void MoveItemUp(BindingList<PLCItem> list, PLCItem item)
|
||||
{
|
||||
int index = list.IndexOf(item);
|
||||
if (index > 0)
|
||||
{
|
||||
// 移除并插入到前一位
|
||||
list.RemoveAt(index);
|
||||
list.Insert(index - 1, item);
|
||||
UpdateStartIndexes(list); // 更新序号
|
||||
}
|
||||
}
|
||||
|
||||
// 下移项
|
||||
public static void MoveItemDown(BindingList<PLCItem> list, PLCItem item)
|
||||
{
|
||||
int index = list.IndexOf(item);
|
||||
if (index < list.Count - 1)
|
||||
{
|
||||
// 移除并插入到后一位
|
||||
list.RemoveAt(index);
|
||||
list.Insert(index + 1, item);
|
||||
UpdateStartIndexes(list); // 更新序号
|
||||
}
|
||||
}
|
||||
|
||||
// 更新所有项的序号
|
||||
public static void UpdateStartIndexes(BindingList<PLCItem> list)
|
||||
{
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
PLCItem item = list[i];
|
||||
if (item.StartIndex != i + 1)
|
||||
{
|
||||
item.StartIndex = i + 1; // 触发 PropertyChanged 事件
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (pLCBase.PLCItemList.Count == 0 || !pLCBase.PLCItemList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = pLCBase.PLCItemList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (pLCBase.PLCItemList[i].Selected)
|
||||
{
|
||||
pLCBase.PLCItemList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
PLCItem pLCItem = new PLCItem()
|
||||
{
|
||||
StartIndex = pLCBase.PLCItemList.Count + 1,
|
||||
CellLinks = new CellLink[]
|
||||
{ new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
}
|
||||
};
|
||||
|
||||
var form = new MotionEdit(window, "点位表操作-新增", pLCItem) { Size = new Size(450, 550) };
|
||||
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入新增", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
if (form.submit)
|
||||
{
|
||||
pLCBase.PLCItemList.Add(pLCItem);
|
||||
}
|
||||
|
||||
AntdUI.Message.info(window, "结束新增", autoClose: 1);
|
||||
}
|
||||
});
|
||||
|
||||
//AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None)
|
||||
//{
|
||||
// BtnHeight = 0,
|
||||
//});
|
||||
|
||||
//if (form.submit)
|
||||
//{
|
||||
// pLCBase.PLCItemList.Add(pLCItem);
|
||||
//}
|
||||
}
|
||||
|
||||
private void SltTpye_TextChanged(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is Select slt && !string.IsNullOrEmpty(slt.Text))
|
||||
{
|
||||
// 将文本转换为枚举值
|
||||
if (Enum.TryParse<EnumPLCType>(slt.Text, out var plcType))
|
||||
{
|
||||
switch (plcType)
|
||||
{
|
||||
case EnumPLCType.信捷XC网口:
|
||||
case EnumPLCType.信捷XD网口:
|
||||
stpCom.Visible = false;
|
||||
stpBaud.Visible = false;
|
||||
stpData.Visible = false;
|
||||
stpParity.Visible = false;
|
||||
stpStop.Visible = false;
|
||||
stpIP.Visible = true;
|
||||
stpPort.Visible = true;
|
||||
break;
|
||||
|
||||
case EnumPLCType.信捷XD串口:
|
||||
case EnumPLCType.信捷XC串口:
|
||||
stpCom.Visible = true;
|
||||
stpBaud.Visible = true;
|
||||
stpData.Visible = true;
|
||||
stpParity.Visible = true;
|
||||
stpStop.Visible = true;
|
||||
stpIP.Visible = false;
|
||||
stpPort.Visible = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
// 获取枚举字段名列表(原描述改为字段名)
|
||||
sltTpye.Items.Clear();
|
||||
foreach (EnumPLCType value in Enum.GetValues(typeof(EnumPLCType)))
|
||||
{
|
||||
sltTpye.Items.Add(value.ToString());
|
||||
}
|
||||
|
||||
// 波特率选项(保持不变)
|
||||
cmbBaudRate.Items.AddRange(new object[] { 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200 });
|
||||
|
||||
// 数据位选项(保持不变)
|
||||
cmbDataBits.Items.AddRange(new object[] { 5, 6, 7, 8 });
|
||||
|
||||
// 停止位选项改为字段名
|
||||
var stopBitsNames = Enum.GetNames(typeof(StopBits));
|
||||
foreach (var name in stopBitsNames)
|
||||
{
|
||||
cmbStopBits.Items.Add(name);
|
||||
}
|
||||
|
||||
// 校验位选项改为字段名
|
||||
var parityNames = Enum.GetNames(typeof(Parity));
|
||||
foreach (var name in parityNames)
|
||||
{
|
||||
cmbParity.Items.Add(name);
|
||||
}
|
||||
|
||||
// COM端口列表(保持不变)
|
||||
List<string> comList = SerialPort.GetPortNames().ToList();
|
||||
foreach (var item in comList)
|
||||
{
|
||||
cmbCom.Items.Add(item);
|
||||
}
|
||||
|
||||
PLCItemsTable.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new Column("StartIndex", "序号", ColumnAlign.Center),
|
||||
new Column("Name", "名称", ColumnAlign.Center),
|
||||
new Column("Type", "类型",ColumnAlign.Center),
|
||||
new Column("Address", "地址",ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
if (pLCBase.PLCItemList.Count > 0)
|
||||
{
|
||||
foreach (var item in pLCBase.PLCItemList)
|
||||
{
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "上移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "下移", TTypeMini.Default),
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
};
|
||||
}
|
||||
}
|
||||
PLCItemsTable.Binding(pLCBase.PLCItemList);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void SetupDataBindings()
|
||||
{
|
||||
// 添加双向类型转换
|
||||
sltTpye.DataBindings.Add("Text", pLCBase, "PLCType", true, DataSourceUpdateMode.OnPropertyChanged, "");
|
||||
cmbCom.DataBindings.Add(nameof(cmbCom.Text), pLCBase, nameof(pLCBase.COM));
|
||||
cmbBaudRate.DataBindings.Add(nameof(cmbBaudRate.Text), pLCBase, nameof(pLCBase.BaudRate));
|
||||
cmbDataBits.DataBindings.Add(nameof(cmbDataBits.Text), pLCBase, nameof(pLCBase.DataBit));
|
||||
cmbParity.DataBindings.Add(nameof(cmbParity.Text), pLCBase, nameof(pLCBase.Parity));
|
||||
cmbStopBits.DataBindings.Add(nameof(cmbStopBits.Text), pLCBase, nameof(pLCBase.StopBit));
|
||||
|
||||
iptIP.DataBindings.Add(nameof(iptIP.Text), pLCBase, nameof(pLCBase.IP));
|
||||
iptPort.DataBindings.Add(nameof(iptPort.Text), pLCBase, nameof(pLCBase.Port));
|
||||
|
||||
swhEnable.DataBindings.Add(nameof(swhEnable.Checked), pLCBase, nameof(pLCBase.Enable));
|
||||
}
|
||||
}
|
||||
}
|
215
DHSoftware/Views/MotionEdit.Designer.cs
generated
Normal file
215
DHSoftware/Views/MotionEdit.Designer.cs
generated
Normal file
@ -0,0 +1,215 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class MotionEdit
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
button_cancel = new AntdUI.Button();
|
||||
sltName = new AntdUI.Select();
|
||||
label2 = new AntdUI.Label();
|
||||
divider2 = new AntdUI.Divider();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider1 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1 = new AntdUI.Panel();
|
||||
iptAddress = new AntdUI.Input();
|
||||
label7 = new AntdUI.Label();
|
||||
sltDataType = new AntdUI.Select();
|
||||
label3 = new AntdUI.Label();
|
||||
stackPanel1.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// button_cancel
|
||||
//
|
||||
button_cancel.BorderWidth = 1F;
|
||||
button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
|
||||
button_cancel.Ghost = true;
|
||||
button_cancel.Location = new Point(84, 3);
|
||||
button_cancel.Name = "button_cancel";
|
||||
button_cancel.Size = new Size(75, 38);
|
||||
button_cancel.TabIndex = 1;
|
||||
button_cancel.Text = "取消";
|
||||
//
|
||||
// sltName
|
||||
//
|
||||
sltName.Dock = DockStyle.Top;
|
||||
sltName.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
sltName.Location = new Point(18, 134);
|
||||
sltName.MaxCount = 10;
|
||||
sltName.Name = "sltName";
|
||||
sltName.Radius = 3;
|
||||
sltName.Size = new Size(409, 38);
|
||||
sltName.TabIndex = 23;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Dock = DockStyle.Top;
|
||||
label2.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label2.Location = new Point(18, 110);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(409, 24);
|
||||
label2.TabIndex = 22;
|
||||
label2.Text = "名称";
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
divider2.Dock = DockStyle.Top;
|
||||
divider2.Location = new Point(18, 98);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(409, 12);
|
||||
divider2.TabIndex = 21;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(button_cancel);
|
||||
stackPanel1.Controls.Add(button_ok);
|
||||
stackPanel1.Dock = DockStyle.Top;
|
||||
stackPanel1.Location = new Point(18, 54);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(409, 44);
|
||||
stackPanel1.TabIndex = 20;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_ok
|
||||
//
|
||||
button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button_ok.Location = new Point(3, 3);
|
||||
button_ok.Name = "button_ok";
|
||||
button_ok.Size = new Size(75, 38);
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.Dock = DockStyle.Top;
|
||||
divider1.Location = new Point(18, 42);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(409, 12);
|
||||
divider1.TabIndex = 19;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(409, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "PLC点位操作";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(iptAddress);
|
||||
panel1.Controls.Add(label7);
|
||||
panel1.Controls.Add(sltDataType);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(sltName);
|
||||
panel1.Controls.Add(label2);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(445, 315);
|
||||
panel1.TabIndex = 1;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// iptAddress
|
||||
//
|
||||
iptAddress.Dock = DockStyle.Top;
|
||||
iptAddress.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
iptAddress.Location = new Point(18, 258);
|
||||
iptAddress.Name = "iptAddress";
|
||||
iptAddress.Radius = 3;
|
||||
iptAddress.Size = new Size(409, 38);
|
||||
iptAddress.TabIndex = 54;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Dock = DockStyle.Top;
|
||||
label7.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label7.Location = new Point(18, 234);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(409, 24);
|
||||
label7.TabIndex = 53;
|
||||
label7.Text = "地址";
|
||||
//
|
||||
// sltDataType
|
||||
//
|
||||
sltDataType.Dock = DockStyle.Top;
|
||||
sltDataType.List = true;
|
||||
sltDataType.Location = new Point(18, 196);
|
||||
sltDataType.Name = "sltDataType";
|
||||
sltDataType.Size = new Size(409, 38);
|
||||
sltDataType.TabIndex = 45;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Dock = DockStyle.Top;
|
||||
label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label3.Location = new Point(18, 172);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(409, 24);
|
||||
label3.TabIndex = 44;
|
||||
label3.Text = "数据类型";
|
||||
//
|
||||
// MotionEdit
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "MotionEdit";
|
||||
Size = new Size(445, 315);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Select sltName;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Select sltDataType;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Input iptAddress;
|
||||
private AntdUI.Label label7;
|
||||
}
|
||||
}
|
83
DHSoftware/Views/MotionEdit.cs
Normal file
83
DHSoftware/Views/MotionEdit.cs
Normal file
@ -0,0 +1,83 @@
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.PLC;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class MotionEdit : UserControl
|
||||
{
|
||||
private AntdUI.Window window;
|
||||
private PLCItem plcItem;
|
||||
public bool submit;
|
||||
public MotionEdit(AntdUI.Window _window,string TitleName, PLCItem _plcItem)
|
||||
{
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
plcItem = _plcItem;
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
//设置默认值
|
||||
InitData();
|
||||
|
||||
}
|
||||
private void BindEventHandler()
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
submit = false;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void Button_ok_Click(object sender, EventArgs e)
|
||||
{
|
||||
sltName.Status = AntdUI.TType.None;
|
||||
//检查输入内容
|
||||
if (String.IsNullOrEmpty(sltName.Text))
|
||||
{
|
||||
sltName.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "参数名称不能为空!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
plcItem.Name = sltName.Text;
|
||||
plcItem.Address = iptAddress.Text;
|
||||
plcItem.Type = (EnumPLCDataType)sltDataType.SelectedIndex;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
var PLCItemNames = Enum.GetNames(typeof(EnumPLCOutputIO));
|
||||
foreach (var name in PLCItemNames)
|
||||
{
|
||||
sltName.Items.Add(name);
|
||||
}
|
||||
var PLCDataTypes = Enum.GetNames(typeof(EnumPLCDataType));
|
||||
foreach (var name in PLCDataTypes)
|
||||
{
|
||||
sltDataType.Items.Add(name);
|
||||
}
|
||||
sltDataType.SelectedIndex = 0;
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(plcItem.Name))
|
||||
{
|
||||
sltName.Text = plcItem.Name;
|
||||
iptAddress.Text = plcItem.Address;
|
||||
sltDataType.SelectedIndex =(int)plcItem.Type;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
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
|
284
DHSoftware/Views/MotionProcessEdit.Designer.cs
generated
Normal file
284
DHSoftware/Views/MotionProcessEdit.Designer.cs
generated
Normal file
@ -0,0 +1,284 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class MotionProcessEdit
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
button_cancel = new AntdUI.Button();
|
||||
sltName = new AntdUI.Select();
|
||||
label2 = new AntdUI.Label();
|
||||
divider2 = new AntdUI.Divider();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider1 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1 = new AntdUI.Panel();
|
||||
sltValue = new AntdUI.Select();
|
||||
iptValue = new AntdUI.Input();
|
||||
label1 = new AntdUI.Label();
|
||||
iptAddress = new AntdUI.Input();
|
||||
label7 = new AntdUI.Label();
|
||||
sltDataType = new AntdUI.Select();
|
||||
label4 = new AntdUI.Label();
|
||||
sltEnable = new AntdUI.Select();
|
||||
label3 = new AntdUI.Label();
|
||||
stackPanel1.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// button_cancel
|
||||
//
|
||||
button_cancel.BorderWidth = 1F;
|
||||
button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
|
||||
button_cancel.Ghost = true;
|
||||
button_cancel.Location = new Point(84, 3);
|
||||
button_cancel.Name = "button_cancel";
|
||||
button_cancel.Size = new Size(75, 38);
|
||||
button_cancel.TabIndex = 1;
|
||||
button_cancel.Text = "取消";
|
||||
//
|
||||
// sltName
|
||||
//
|
||||
sltName.Dock = DockStyle.Top;
|
||||
sltName.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
sltName.Location = new Point(18, 134);
|
||||
sltName.MaxCount = 10;
|
||||
sltName.Name = "sltName";
|
||||
sltName.Radius = 3;
|
||||
sltName.Size = new Size(409, 38);
|
||||
sltName.TabIndex = 23;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Dock = DockStyle.Top;
|
||||
label2.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label2.Location = new Point(18, 110);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(409, 24);
|
||||
label2.TabIndex = 22;
|
||||
label2.Text = "名称";
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
divider2.Dock = DockStyle.Top;
|
||||
divider2.Location = new Point(18, 98);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(409, 12);
|
||||
divider2.TabIndex = 21;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(button_cancel);
|
||||
stackPanel1.Controls.Add(button_ok);
|
||||
stackPanel1.Dock = DockStyle.Top;
|
||||
stackPanel1.Location = new Point(18, 54);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(409, 44);
|
||||
stackPanel1.TabIndex = 20;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_ok
|
||||
//
|
||||
button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button_ok.Location = new Point(3, 3);
|
||||
button_ok.Name = "button_ok";
|
||||
button_ok.Size = new Size(75, 38);
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.Dock = DockStyle.Top;
|
||||
divider1.Location = new Point(18, 42);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(409, 12);
|
||||
divider1.TabIndex = 19;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(409, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "PLC点位操作";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(sltValue);
|
||||
panel1.Controls.Add(iptValue);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(iptAddress);
|
||||
panel1.Controls.Add(label7);
|
||||
panel1.Controls.Add(sltDataType);
|
||||
panel1.Controls.Add(label4);
|
||||
panel1.Controls.Add(sltEnable);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(sltName);
|
||||
panel1.Controls.Add(label2);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(445, 549);
|
||||
panel1.TabIndex = 1;
|
||||
panel1.Text = "panel1";
|
||||
panel1.Click += panel1_Click;
|
||||
//
|
||||
// sltValue
|
||||
//
|
||||
sltValue.Dock = DockStyle.Top;
|
||||
sltValue.List = true;
|
||||
sltValue.Location = new Point(18, 420);
|
||||
sltValue.Name = "sltValue";
|
||||
sltValue.Size = new Size(409, 38);
|
||||
sltValue.TabIndex = 63;
|
||||
sltValue.Visible = false;
|
||||
//
|
||||
// iptValue
|
||||
//
|
||||
iptValue.Dock = DockStyle.Top;
|
||||
iptValue.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
iptValue.Location = new Point(18, 382);
|
||||
iptValue.Name = "iptValue";
|
||||
iptValue.PlaceholderText = "";
|
||||
iptValue.Radius = 3;
|
||||
iptValue.Size = new Size(409, 38);
|
||||
iptValue.TabIndex = 62;
|
||||
iptValue.Visible = false;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Dock = DockStyle.Top;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.Location = new Point(18, 358);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(409, 24);
|
||||
label1.TabIndex = 61;
|
||||
label1.Text = "值";
|
||||
//
|
||||
// iptAddress
|
||||
//
|
||||
iptAddress.Dock = DockStyle.Top;
|
||||
iptAddress.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
iptAddress.Location = new Point(18, 320);
|
||||
iptAddress.Name = "iptAddress";
|
||||
iptAddress.Radius = 3;
|
||||
iptAddress.ReadOnly = true;
|
||||
iptAddress.Size = new Size(409, 38);
|
||||
iptAddress.TabIndex = 60;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Dock = DockStyle.Top;
|
||||
label7.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label7.Location = new Point(18, 296);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(409, 24);
|
||||
label7.TabIndex = 59;
|
||||
label7.Text = "地址";
|
||||
//
|
||||
// sltDataType
|
||||
//
|
||||
sltDataType.Dock = DockStyle.Top;
|
||||
sltDataType.List = true;
|
||||
sltDataType.Location = new Point(18, 258);
|
||||
sltDataType.Name = "sltDataType";
|
||||
sltDataType.ReadOnly = true;
|
||||
sltDataType.Size = new Size(409, 38);
|
||||
sltDataType.TabIndex = 58;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
label4.Dock = DockStyle.Top;
|
||||
label4.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label4.Location = new Point(18, 234);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(409, 24);
|
||||
label4.TabIndex = 57;
|
||||
label4.Text = "数据类型";
|
||||
//
|
||||
// sltEnable
|
||||
//
|
||||
sltEnable.Dock = DockStyle.Top;
|
||||
sltEnable.List = true;
|
||||
sltEnable.Location = new Point(18, 196);
|
||||
sltEnable.Name = "sltEnable";
|
||||
sltEnable.Size = new Size(409, 38);
|
||||
sltEnable.TabIndex = 45;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Dock = DockStyle.Top;
|
||||
label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label3.Location = new Point(18, 172);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(409, 24);
|
||||
label3.TabIndex = 44;
|
||||
label3.Text = "状态";
|
||||
//
|
||||
// MotionProcessEdit
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "MotionProcessEdit";
|
||||
Size = new Size(445, 549);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Select sltName;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Select sltEnable;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Input iptValue;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Input iptAddress;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.Select sltDataType;
|
||||
private AntdUI.Label label4;
|
||||
private AntdUI.Select sltValue;
|
||||
}
|
||||
}
|
134
DHSoftware/Views/MotionProcessEdit.cs
Normal file
134
DHSoftware/Views/MotionProcessEdit.cs
Normal file
@ -0,0 +1,134 @@
|
||||
using System.ComponentModel;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.PLC;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class MotionProcessEdit : UserControl
|
||||
{
|
||||
private AntdUI.Window window;
|
||||
private PLCItem plcItem;
|
||||
private BindingList<PLCItem> plcItemList;
|
||||
public bool submit;
|
||||
public MotionProcessEdit(AntdUI.Window _window, string TitleName, PLCItem _plcItem, BindingList<PLCItem> _plcItemList)
|
||||
{
|
||||
InitializeComponent();
|
||||
lbTitleName.Text = TitleName;
|
||||
plcItem = _plcItem;
|
||||
plcItemList= _plcItemList;
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
//设置默认值
|
||||
InitData();
|
||||
|
||||
}
|
||||
private void BindEventHandler()
|
||||
{
|
||||
sltName.SelectedIndexChanged += SltName_SelectedIndexChanged;
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
sltDataType.SelectedIndexChanged += SltDataType_SelectedIndexChanged;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void SltDataType_SelectedIndexChanged(object sender, IntEventArgs e)
|
||||
{
|
||||
iptValue.Visible = e.Value != 3;
|
||||
sltValue.Visible = e.Value == 3;
|
||||
}
|
||||
|
||||
private void SltName_SelectedIndexChanged(object sender, IntEventArgs e)
|
||||
{
|
||||
Select select = (Select)sender;
|
||||
var pLCItems=plcItemList.Where(it=>it.Name==select.Text).FirstOrDefault();
|
||||
if (pLCItems != null)
|
||||
{
|
||||
sltDataType.SelectedIndex =(int)pLCItems.Type;
|
||||
iptAddress.Text= pLCItems.Address;
|
||||
}
|
||||
}
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
submit = false;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void Button_ok_Click(object sender, EventArgs e)
|
||||
{
|
||||
sltName.Status = AntdUI.TType.None;
|
||||
//检查输入内容
|
||||
if (String.IsNullOrEmpty(sltName.Text))
|
||||
{
|
||||
sltName.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "参数名称不能为空!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
plcItem.Name = sltName.Text;
|
||||
plcItem.Address = iptAddress.Text;
|
||||
plcItem.Type = (EnumPLCDataType)sltDataType.SelectedIndex;
|
||||
if (sltDataType.SelectedIndex != 3)
|
||||
{
|
||||
plcItem.Value = iptValue.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
plcItem.Value = sltValue.Text;
|
||||
}
|
||||
|
||||
plcItem.StartExecute = sltEnable.SelectedIndex != 0;
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
|
||||
foreach (var item in plcItemList)
|
||||
{
|
||||
sltName.Items.Add(item.Name);
|
||||
}
|
||||
|
||||
var PLCDataTypes = Enum.GetNames(typeof(EnumPLCDataType));
|
||||
foreach (var name in PLCDataTypes)
|
||||
{
|
||||
sltDataType.Items.Add(name);
|
||||
}
|
||||
|
||||
var boolNames = Enum.GetNames(typeof(EnumBool));
|
||||
foreach (var name in boolNames)
|
||||
{
|
||||
sltEnable.Items.Add(name);
|
||||
}
|
||||
var bool1Names = Enum.GetNames(typeof(EnumBool1));
|
||||
foreach (var name in bool1Names)
|
||||
{
|
||||
sltValue.Items.Add(name);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(plcItem.Name))
|
||||
{
|
||||
sltName.Text = plcItem.Name;
|
||||
iptAddress.Text = plcItem.Address;
|
||||
sltDataType.SelectedIndex = (int)plcItem.Type;
|
||||
sltEnable.SelectedIndex = plcItem.StartExecute ? 1 : 0;
|
||||
if (sltDataType.SelectedIndex != 3)
|
||||
{
|
||||
iptValue.Text = plcItem.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
sltValue.SelectedIndex=plcItem.Value=="True"?1:0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void panel1_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
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
|
@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Base;
|
||||
using DH.Devices.Vision;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
|
213
DHSoftware/Views/PreTreatUserControl.Designer.cs
generated
213
DHSoftware/Views/PreTreatUserControl.Designer.cs
generated
@ -1,213 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class PreTreatUserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
btnPreOpen = new AntdUI.Button();
|
||||
tbxPrePath = new TextBox();
|
||||
label1 = new AntdUI.Label();
|
||||
panel1 = new Panel();
|
||||
btnOParmDel = new Panel();
|
||||
label3 = new Label();
|
||||
btnDelOParm = new AntdUI.Button();
|
||||
tbOutputParm = new AntdUI.Table();
|
||||
btnAddOParm = new AntdUI.Button();
|
||||
panel2 = new Panel();
|
||||
label2 = new Label();
|
||||
btnDelIParm = new AntdUI.Button();
|
||||
tbInputParm = new AntdUI.Table();
|
||||
btnAddIParm = new AntdUI.Button();
|
||||
panel1.SuspendLayout();
|
||||
btnOParmDel.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// btnPreOpen
|
||||
//
|
||||
btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
btnPreOpen.Location = new Point(570, 17);
|
||||
btnPreOpen.Name = "btnPreOpen";
|
||||
btnPreOpen.Size = new Size(28, 23);
|
||||
btnPreOpen.TabIndex = 21;
|
||||
btnPreOpen.Text = "...";
|
||||
btnPreOpen.Click += btnPreOpen_Click;
|
||||
//
|
||||
// tbxPrePath
|
||||
//
|
||||
tbxPrePath.Location = new Point(91, 17);
|
||||
tbxPrePath.Name = "tbxPrePath";
|
||||
tbxPrePath.Size = new Size(473, 23);
|
||||
tbxPrePath.TabIndex = 20;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(12, 17);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(73, 23);
|
||||
label1.TabIndex = 19;
|
||||
label1.Text = "预处理路径";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
panel1.BorderStyle = BorderStyle.FixedSingle;
|
||||
panel1.Controls.Add(btnOParmDel);
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(btnPreOpen);
|
||||
panel1.Controls.Add(tbxPrePath);
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(633, 243);
|
||||
panel1.TabIndex = 22;
|
||||
//
|
||||
// btnOParmDel
|
||||
//
|
||||
btnOParmDel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
btnOParmDel.Controls.Add(label3);
|
||||
btnOParmDel.Controls.Add(btnDelOParm);
|
||||
btnOParmDel.Controls.Add(tbOutputParm);
|
||||
btnOParmDel.Controls.Add(btnAddOParm);
|
||||
btnOParmDel.Location = new Point(352, 44);
|
||||
btnOParmDel.Name = "btnOParmDel";
|
||||
btnOParmDel.Size = new Size(246, 194);
|
||||
btnOParmDel.TabIndex = 26;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.AutoSize = true;
|
||||
label3.Location = new Point(3, 2);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(56, 17);
|
||||
label3.TabIndex = 25;
|
||||
label3.Text = "输出参数";
|
||||
//
|
||||
// btnDelOParm
|
||||
//
|
||||
btnDelOParm.Location = new Point(93, 25);
|
||||
btnDelOParm.Name = "btnDelOParm";
|
||||
btnDelOParm.Size = new Size(84, 34);
|
||||
btnDelOParm.TabIndex = 24;
|
||||
btnDelOParm.Text = "删除";
|
||||
//
|
||||
// tbOutputParm
|
||||
//
|
||||
tbOutputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbOutputParm.Location = new Point(3, 65);
|
||||
tbOutputParm.Name = "tbOutputParm";
|
||||
tbOutputParm.Size = new Size(240, 126);
|
||||
tbOutputParm.TabIndex = 22;
|
||||
tbOutputParm.Text = "table2";
|
||||
//
|
||||
// btnAddOParm
|
||||
//
|
||||
btnAddOParm.Location = new Point(3, 25);
|
||||
btnAddOParm.Name = "btnAddOParm";
|
||||
btnAddOParm.Size = new Size(84, 34);
|
||||
btnAddOParm.TabIndex = 23;
|
||||
btnAddOParm.Text = "新增";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(label2);
|
||||
panel2.Controls.Add(btnDelIParm);
|
||||
panel2.Controls.Add(tbInputParm);
|
||||
panel2.Controls.Add(btnAddIParm);
|
||||
panel2.Location = new Point(12, 45);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(264, 194);
|
||||
panel2.TabIndex = 25;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(3, 5);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(56, 17);
|
||||
label2.TabIndex = 25;
|
||||
label2.Text = "输入参数";
|
||||
//
|
||||
// btnDelIParm
|
||||
//
|
||||
btnDelIParm.Location = new Point(93, 25);
|
||||
btnDelIParm.Name = "btnDelIParm";
|
||||
btnDelIParm.Size = new Size(84, 34);
|
||||
btnDelIParm.TabIndex = 24;
|
||||
btnDelIParm.Text = "删除";
|
||||
//
|
||||
// tbInputParm
|
||||
//
|
||||
tbInputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbInputParm.Location = new Point(3, 65);
|
||||
tbInputParm.Name = "tbInputParm";
|
||||
tbInputParm.Size = new Size(258, 126);
|
||||
tbInputParm.TabIndex = 22;
|
||||
tbInputParm.Text = "table1";
|
||||
//
|
||||
// btnAddIParm
|
||||
//
|
||||
btnAddIParm.Location = new Point(3, 25);
|
||||
btnAddIParm.Name = "btnAddIParm";
|
||||
btnAddIParm.Size = new Size(84, 34);
|
||||
btnAddIParm.TabIndex = 23;
|
||||
btnAddIParm.Text = "新增";
|
||||
//
|
||||
// PreTreatUserControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "PreTreatUserControl";
|
||||
Size = new Size(635, 243);
|
||||
panel1.ResumeLayout(false);
|
||||
panel1.PerformLayout();
|
||||
btnOParmDel.ResumeLayout(false);
|
||||
btnOParmDel.PerformLayout();
|
||||
panel2.ResumeLayout(false);
|
||||
panel2.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Button btnPreOpen;
|
||||
private TextBox tbxPrePath;
|
||||
private AntdUI.Label label1;
|
||||
private Panel panel1;
|
||||
private AntdUI.Button btnDelIParm;
|
||||
private AntdUI.Button btnAddIParm;
|
||||
private AntdUI.Table tbInputParm;
|
||||
private Panel panel2;
|
||||
private Panel btnOParmDel;
|
||||
private Label label3;
|
||||
private AntdUI.Button btnDelOParm;
|
||||
private AntdUI.Table tbOutputParm;
|
||||
private AntdUI.Button btnAddOParm;
|
||||
private Label label2;
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
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;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class PreTreatUserControl : UserControl
|
||||
{
|
||||
public PreTreatUserControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void btnPreOpen_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
189
DHSoftware/Views/SavePositionControl.Designer.cs
generated
Normal file
189
DHSoftware/Views/SavePositionControl.Designer.cs
generated
Normal file
@ -0,0 +1,189 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class SavePositionControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new AntdUI.Panel();
|
||||
sltName = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
iptPosition = new AntdUI.Input();
|
||||
label3 = new AntdUI.Label();
|
||||
divider1 = new AntdUI.Divider();
|
||||
stackPanel1 = new AntdUI.StackPanel();
|
||||
button_cancel = new AntdUI.Button();
|
||||
button_ok = new AntdUI.Button();
|
||||
divider2 = new AntdUI.Divider();
|
||||
lbTitleName = new AntdUI.Label();
|
||||
panel1.SuspendLayout();
|
||||
stackPanel1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(sltName);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(iptPosition);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(divider1);
|
||||
panel1.Controls.Add(stackPanel1);
|
||||
panel1.Controls.Add(divider2);
|
||||
panel1.Controls.Add(lbTitleName);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Padding = new Padding(12);
|
||||
panel1.Shadow = 6;
|
||||
panel1.Size = new Size(500, 243);
|
||||
panel1.TabIndex = 0;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// sltName
|
||||
//
|
||||
sltName.Dock = DockStyle.Top;
|
||||
sltName.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
sltName.Location = new Point(18, 196);
|
||||
sltName.MaxCount = 20;
|
||||
sltName.Name = "sltName";
|
||||
sltName.Radius = 3;
|
||||
sltName.Size = new Size(464, 38);
|
||||
sltName.TabIndex = 24;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Dock = DockStyle.Top;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.Location = new Point(18, 172);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(464, 24);
|
||||
label1.TabIndex = 23;
|
||||
label1.Text = "工位名称";
|
||||
//
|
||||
// iptPosition
|
||||
//
|
||||
iptPosition.Dock = DockStyle.Top;
|
||||
iptPosition.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
iptPosition.Location = new Point(18, 134);
|
||||
iptPosition.Name = "iptPosition";
|
||||
iptPosition.Radius = 3;
|
||||
iptPosition.Size = new Size(464, 38);
|
||||
iptPosition.TabIndex = 22;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.Dock = DockStyle.Top;
|
||||
label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label3.Location = new Point(18, 110);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(464, 24);
|
||||
label3.TabIndex = 21;
|
||||
label3.Text = "当前位置";
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.Dock = DockStyle.Top;
|
||||
divider1.Location = new Point(18, 98);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(464, 12);
|
||||
divider1.TabIndex = 20;
|
||||
//
|
||||
// stackPanel1
|
||||
//
|
||||
stackPanel1.Controls.Add(button_cancel);
|
||||
stackPanel1.Controls.Add(button_ok);
|
||||
stackPanel1.Dock = DockStyle.Top;
|
||||
stackPanel1.Location = new Point(18, 54);
|
||||
stackPanel1.Name = "stackPanel1";
|
||||
stackPanel1.RightToLeft = RightToLeft.No;
|
||||
stackPanel1.Size = new Size(464, 44);
|
||||
stackPanel1.TabIndex = 19;
|
||||
stackPanel1.Text = "stackPanel1";
|
||||
//
|
||||
// button_cancel
|
||||
//
|
||||
button_cancel.BorderWidth = 1F;
|
||||
button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
|
||||
button_cancel.Ghost = true;
|
||||
button_cancel.Location = new Point(84, 3);
|
||||
button_cancel.Name = "button_cancel";
|
||||
button_cancel.Size = new Size(75, 38);
|
||||
button_cancel.TabIndex = 1;
|
||||
button_cancel.Text = "取消";
|
||||
//
|
||||
// button_ok
|
||||
//
|
||||
button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
button_ok.Location = new Point(3, 3);
|
||||
button_ok.Name = "button_ok";
|
||||
button_ok.Size = new Size(75, 38);
|
||||
button_ok.TabIndex = 0;
|
||||
button_ok.Text = "确定";
|
||||
button_ok.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// divider2
|
||||
//
|
||||
divider2.Dock = DockStyle.Top;
|
||||
divider2.Location = new Point(18, 42);
|
||||
divider2.Name = "divider2";
|
||||
divider2.Size = new Size(464, 12);
|
||||
divider2.TabIndex = 18;
|
||||
//
|
||||
// lbTitleName
|
||||
//
|
||||
lbTitleName.Dock = DockStyle.Top;
|
||||
lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbTitleName.Location = new Point(18, 18);
|
||||
lbTitleName.Name = "lbTitleName";
|
||||
lbTitleName.Size = new Size(464, 24);
|
||||
lbTitleName.TabIndex = 17;
|
||||
lbTitleName.Text = "保存当前位置操作";
|
||||
//
|
||||
// SavePositionControl
|
||||
//
|
||||
Controls.Add(panel1);
|
||||
Name = "SavePositionControl";
|
||||
Size = new Size(500, 243);
|
||||
panel1.ResumeLayout(false);
|
||||
stackPanel1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Label lbTitleName;
|
||||
private AntdUI.Input iptPosition;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.StackPanel stackPanel1;
|
||||
private AntdUI.Button button_cancel;
|
||||
private AntdUI.Button button_ok;
|
||||
private AntdUI.Divider divider2;
|
||||
private AntdUI.Select sltName;
|
||||
private AntdUI.Label label1;
|
||||
}
|
||||
}
|
116
DHSoftware/Views/SavePositionControl.cs
Normal file
116
DHSoftware/Views/SavePositionControl.cs
Normal file
@ -0,0 +1,116 @@
|
||||
|
||||
|
||||
using System.Text.RegularExpressions;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Helper;
|
||||
using DH.Commons.Models;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class SavePositionControl : UserControl
|
||||
{
|
||||
private AntdUI.Window window;
|
||||
public bool submit;
|
||||
public int Position;
|
||||
|
||||
|
||||
public SavePositionControl(AntdUI.Window _window,int _position)
|
||||
{
|
||||
this.window = _window;
|
||||
InitializeComponent();
|
||||
Position=_position;
|
||||
sltName.Items.Clear();
|
||||
var targetFields = GetSpecificIOFields();
|
||||
foreach(var item in targetFields)
|
||||
{
|
||||
sltName.Items.Add(item);
|
||||
}
|
||||
iptPosition.Text= Position.ToString();
|
||||
// 绑定事件
|
||||
BindEventHandler();
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
button_ok.Click += Button_ok_Click;
|
||||
button_cancel.Click += Button_cancel_Click;
|
||||
}
|
||||
|
||||
private void Button_cancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
submit = false;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void Button_ok_Click(object sender, EventArgs e)
|
||||
{
|
||||
iptPosition.Status = AntdUI.TType.None;
|
||||
|
||||
if (String.IsNullOrEmpty(sltName.Text))
|
||||
{
|
||||
sltName.Status = AntdUI.TType.Error;
|
||||
AntdUI.Message.warn(window, "请选择工位!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
//根据工位查找点位
|
||||
PLCItem? pLCItem = ConfigModel.PLCBaseList?
|
||||
.FirstOrDefault()?
|
||||
.PLCItemList?
|
||||
.Where(it=>it.Name==sltName.Text).FirstOrDefault();
|
||||
if (pLCItem == null)
|
||||
{
|
||||
AntdUI.Message.warn(window, $"未找到{sltName.Text}地址,请检查该地址是否存在于点位表!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
PLCItem? pLCItem1 = ConfigModel.GlobalList?
|
||||
.FirstOrDefault()?
|
||||
.StartProcessList?
|
||||
.Where(it=>it.Name ==sltName.Text).FirstOrDefault();
|
||||
|
||||
if (pLCItem1 == null)
|
||||
{
|
||||
pLCItem1=new PLCItem();
|
||||
pLCItem1.Name = pLCItem.Name;
|
||||
pLCItem1.Address = pLCItem.Address;
|
||||
pLCItem1.Value = iptPosition.Text;
|
||||
pLCItem1.Type = pLCItem.Type;
|
||||
pLCItem1.StartExecute = true;
|
||||
ConfigModel.GlobalList?
|
||||
.FirstOrDefault()?
|
||||
.StartProcessList?.Add(pLCItem1);
|
||||
}
|
||||
else
|
||||
{
|
||||
pLCItem1.Value = iptPosition.Text;
|
||||
}
|
||||
|
||||
ConfigHelper.SaveConfig();
|
||||
AntdUI.Message.success(window, "保存成功!", autoClose: 3);
|
||||
submit = true;
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
public static List<string> GetSpecificIOFields()
|
||||
{
|
||||
return Enum.GetNames(typeof(EnumPLCOutputIO))
|
||||
.Where(name =>
|
||||
Regex.IsMatch(name, @"^工位[1-9]|10$") || // 匹配工位1-10
|
||||
name == "OK脉冲" ||
|
||||
name == "NG脉冲")
|
||||
.OrderBy(name =>
|
||||
{
|
||||
// 对工位进行数字排序
|
||||
if (name.StartsWith("工位"))
|
||||
{
|
||||
return int.Parse(name.Substring(2));
|
||||
}
|
||||
return 99; // OK/NG放在最后
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
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
|
159
DHSoftware/Views/SettingWindow.Designer.cs
generated
159
DHSoftware/Views/SettingWindow.Designer.cs
generated
@ -28,28 +28,38 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel3 = new AntdUI.Panel();
|
||||
panel1 = new AntdUI.Panel();
|
||||
panel2 = new AntdUI.Panel();
|
||||
btnSave = new AntdUI.Button();
|
||||
btnAdd = new AntdUI.Button();
|
||||
menu1 = new AntdUI.Menu();
|
||||
AntdUI.MenuItem menuItem1 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem2 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem3 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem4 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem5 = new AntdUI.MenuItem();
|
||||
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
||||
pageHeader1 = new AntdUI.PageHeader();
|
||||
panel3.SuspendLayout();
|
||||
panel1 = new AntdUI.Panel();
|
||||
panel2 = new AntdUI.StackPanel();
|
||||
btnSave = new AntdUI.Dropdown();
|
||||
btnAdd = new AntdUI.Dropdown();
|
||||
menu1 = new AntdUI.Menu();
|
||||
panel3 = new AntdUI.Panel();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
divider1 = new AntdUI.Divider();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel3
|
||||
// pageHeader1
|
||||
//
|
||||
panel3.Controls.Add(panel1);
|
||||
panel3.Controls.Add(pageHeader1);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(838, 561);
|
||||
panel3.TabIndex = 1;
|
||||
panel3.Text = "panel3";
|
||||
pageHeader1.BackColor = Color.FromArgb(46, 108, 227);
|
||||
pageHeader1.Dock = DockStyle.Top;
|
||||
pageHeader1.Location = new Point(0, 0);
|
||||
pageHeader1.Mode = AntdUI.TAMode.Dark;
|
||||
pageHeader1.Name = "pageHeader1";
|
||||
pageHeader1.ShowButton = true;
|
||||
pageHeader1.ShowIcon = true;
|
||||
pageHeader1.Size = new Size(1042, 33);
|
||||
pageHeader1.TabIndex = 1;
|
||||
pageHeader1.Text = "设置";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
@ -58,20 +68,19 @@
|
||||
panel1.Dock = DockStyle.Left;
|
||||
panel1.Location = new Point(0, 33);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(141, 528);
|
||||
panel1.Size = new Size(141, 666);
|
||||
panel1.TabIndex = 2;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Back = SystemColors.Window;
|
||||
panel2.BackColor = SystemColors.Window;
|
||||
panel2.Controls.Add(btnSave);
|
||||
panel2.Controls.Add(btnAdd);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(0, 497);
|
||||
panel2.Location = new Point(0, 632);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(141, 31);
|
||||
panel2.Size = new Size(141, 34);
|
||||
panel2.TabIndex = 1;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
@ -79,77 +88,127 @@
|
||||
//
|
||||
btnSave.BackActive = SystemColors.Control;
|
||||
btnSave.BackColor = SystemColors.Control;
|
||||
btnSave.Dock = DockStyle.Left;
|
||||
btnSave.Dock = DockStyle.Right;
|
||||
btnSave.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSave.ForeColor = Color.Black;
|
||||
btnSave.IconRatio = 1F;
|
||||
btnSave.IconSvg = "AppstoreAddOutlined";
|
||||
btnSave.Location = new Point(35, 0);
|
||||
btnSave.IconSvg = "SaveOutlined";
|
||||
btnSave.Location = new Point(72, 3);
|
||||
btnSave.Name = "btnSave";
|
||||
btnSave.Size = new Size(35, 31);
|
||||
btnSave.Size = new Size(63, 28);
|
||||
btnSave.TabIndex = 2;
|
||||
btnSave.Click += btnSave_Click;
|
||||
btnSave.Tag = "sys-setsave";
|
||||
btnSave.Text = "保存";
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.BackActive = SystemColors.Control;
|
||||
btnAdd.BackColor = SystemColors.Control;
|
||||
btnAdd.Dock = DockStyle.Left;
|
||||
btnAdd.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnAdd.ForeColor = Color.Black;
|
||||
btnAdd.IconRatio = 1F;
|
||||
btnAdd.IconSvg = "AppstoreAddOutlined";
|
||||
btnAdd.Location = new Point(0, 0);
|
||||
btnAdd.Location = new Point(3, 3);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Size = new Size(35, 31);
|
||||
btnAdd.Placement = AntdUI.TAlignFrom.TL;
|
||||
btnAdd.Size = new Size(63, 28);
|
||||
btnAdd.TabIndex = 1;
|
||||
btnAdd.Click += btnAdd_Click;
|
||||
btnAdd.Tag = "sys-setadd";
|
||||
btnAdd.Text = "新增";
|
||||
btnAdd.Trigger = AntdUI.Trigger.Hover;
|
||||
//
|
||||
// menu1
|
||||
//
|
||||
menu1.BackColor = SystemColors.Window;
|
||||
menu1.Dock = DockStyle.Top;
|
||||
menuItem1.Expand = false;
|
||||
menuItem1.IconSvg = "VideoCameraOutlined";
|
||||
menuItem1.Text = "相机设置";
|
||||
menuItem2.Expand = false;
|
||||
menuItem2.IconSvg = "AppstoreOutlined";
|
||||
menuItem2.Text = "工位设置";
|
||||
menuItem3.Expand = false;
|
||||
menuItem3.IconSvg = "ControlOutlined";
|
||||
menuItem3.Text = "运控设置";
|
||||
menuItem4.Expand = false;
|
||||
menuItem4.IconSvg = "BarsOutlined";
|
||||
menuItem5.IconSvg = "BarsOutlined";
|
||||
menuItem5.Text = "全局设置";
|
||||
menuItem4.Sub.Add(menuItem5);
|
||||
menuItem4.Text = "其他设置";
|
||||
menu1.Items.Add(menuItem1);
|
||||
menu1.Items.Add(menuItem2);
|
||||
menu1.Items.Add(menuItem3);
|
||||
menu1.Items.Add(menuItem4);
|
||||
menu1.Location = new Point(0, 0);
|
||||
menu1.Name = "menu1";
|
||||
menu1.Size = new Size(141, 497);
|
||||
menu1.Size = new Size(141, 632);
|
||||
menu1.TabIndex = 0;
|
||||
menu1.Text = "menu1";
|
||||
menu1.MouseClick += menu1_MouseClick;
|
||||
menu1.MouseDown += Menu_MouseDown;
|
||||
menu1.MouseDown += menu1_MouseDown;
|
||||
//
|
||||
// pageHeader1
|
||||
// panel3
|
||||
//
|
||||
pageHeader1.BackColor = SystemColors.MenuHighlight;
|
||||
pageHeader1.Dock = DockStyle.Top;
|
||||
pageHeader1.Location = new Point(0, 0);
|
||||
pageHeader1.Mode = AntdUI.TAMode.Dark;
|
||||
pageHeader1.Name = "pageHeader1";
|
||||
pageHeader1.ShowButton = true;
|
||||
pageHeader1.ShowIcon = true;
|
||||
pageHeader1.Size = new Size(838, 33);
|
||||
pageHeader1.TabIndex = 1;
|
||||
pageHeader1.Text = "设置";
|
||||
panel3.Controls.Add(tabs1);
|
||||
panel3.Controls.Add(divider1);
|
||||
panel3.Controls.Add(panel1);
|
||||
panel3.Controls.Add(pageHeader1);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(1042, 699);
|
||||
panel3.TabIndex = 1;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.BackColor = SystemColors.Window;
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Location = new Point(151, 33);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Size = new Size(891, 666);
|
||||
styleCard1.Closable = true;
|
||||
tabs1.Style = styleCard1;
|
||||
tabs1.TabIndex = 5;
|
||||
tabs1.Text = "tabs1";
|
||||
tabs1.Type = AntdUI.TabType.Card;
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.BackColor = SystemColors.Window;
|
||||
divider1.Dock = DockStyle.Left;
|
||||
divider1.Location = new Point(141, 33);
|
||||
divider1.Name = "divider1";
|
||||
divider1.OrientationMargin = 0F;
|
||||
divider1.Size = new Size(10, 666);
|
||||
divider1.TabIndex = 4;
|
||||
divider1.Text = "";
|
||||
divider1.Vertical = true;
|
||||
//
|
||||
// SettingWindow
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(838, 561);
|
||||
ClientSize = new Size(1042, 699);
|
||||
Controls.Add(panel3);
|
||||
Name = "SettingWindow";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "SettingWinform";
|
||||
panel3.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Panel panel3;
|
||||
|
||||
private AntdUI.PageHeader pageHeader1;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Button btnAdd;
|
||||
private AntdUI.StackPanel panel2;
|
||||
private AntdUI.Menu menu1;
|
||||
private AntdUI.Button btnSave;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Tabs tabs1;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.Dropdown btnAdd;
|
||||
private AntdUI.Dropdown btnSave;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
201
DHSoftware/Views/SettingWindow1.Designer.cs
generated
201
DHSoftware/Views/SettingWindow1.Designer.cs
generated
@ -1,201 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class SettingWindow1
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
AntdUI.MenuItem menuItem4 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem5 = new AntdUI.MenuItem();
|
||||
AntdUI.MenuItem menuItem6 = new AntdUI.MenuItem();
|
||||
AntdUI.Tabs.StyleCard styleCard2 = new AntdUI.Tabs.StyleCard();
|
||||
pageHeader1 = new AntdUI.PageHeader();
|
||||
panel1 = new AntdUI.Panel();
|
||||
panel2 = new AntdUI.StackPanel();
|
||||
btnSave = new AntdUI.Dropdown();
|
||||
btnAdd = new AntdUI.Dropdown();
|
||||
menu1 = new AntdUI.Menu();
|
||||
panel3 = new AntdUI.Panel();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
divider1 = new AntdUI.Divider();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// pageHeader1
|
||||
//
|
||||
pageHeader1.BackColor = SystemColors.MenuHighlight;
|
||||
pageHeader1.Dock = DockStyle.Top;
|
||||
pageHeader1.Location = new Point(0, 0);
|
||||
pageHeader1.Mode = AntdUI.TAMode.Dark;
|
||||
pageHeader1.Name = "pageHeader1";
|
||||
pageHeader1.ShowButton = true;
|
||||
pageHeader1.ShowIcon = true;
|
||||
pageHeader1.Size = new Size(1042, 33);
|
||||
pageHeader1.TabIndex = 1;
|
||||
pageHeader1.Text = "设置";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Controls.Add(menu1);
|
||||
panel1.Dock = DockStyle.Left;
|
||||
panel1.Location = new Point(0, 33);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(141, 666);
|
||||
panel1.TabIndex = 2;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.BackColor = SystemColors.Window;
|
||||
panel2.Controls.Add(btnSave);
|
||||
panel2.Controls.Add(btnAdd);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(0, 632);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(141, 34);
|
||||
panel2.TabIndex = 1;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
btnSave.BackActive = SystemColors.Control;
|
||||
btnSave.BackColor = SystemColors.Control;
|
||||
btnSave.Dock = DockStyle.Right;
|
||||
btnSave.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSave.ForeColor = Color.Black;
|
||||
btnSave.IconSvg = "SaveOutlined";
|
||||
btnSave.Location = new Point(72, 3);
|
||||
btnSave.Name = "btnSave";
|
||||
btnSave.Size = new Size(63, 28);
|
||||
btnSave.TabIndex = 2;
|
||||
btnSave.Text = "保存";
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.BackActive = SystemColors.Control;
|
||||
btnAdd.BackColor = SystemColors.Control;
|
||||
btnAdd.Dock = DockStyle.Left;
|
||||
btnAdd.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnAdd.ForeColor = Color.Black;
|
||||
btnAdd.IconSvg = "AppstoreAddOutlined";
|
||||
btnAdd.Location = new Point(3, 3);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Placement = AntdUI.TAlignFrom.TL;
|
||||
btnAdd.Size = new Size(63, 28);
|
||||
btnAdd.TabIndex = 1;
|
||||
btnAdd.Text = "新增";
|
||||
btnAdd.Trigger = AntdUI.Trigger.Hover;
|
||||
//
|
||||
// menu1
|
||||
//
|
||||
menu1.BackColor = SystemColors.Window;
|
||||
menu1.Dock = DockStyle.Top;
|
||||
menuItem4.IconSvg = "VideoCameraOutlined";
|
||||
menuItem4.Text = "相机设置";
|
||||
menuItem5.IconSvg = "AppstoreOutlined";
|
||||
menuItem5.Text = "工位设置";
|
||||
menuItem6.IconSvg = "ControlOutlined";
|
||||
menuItem6.Text = "运控设置";
|
||||
menu1.Items.Add(menuItem4);
|
||||
menu1.Items.Add(menuItem5);
|
||||
menu1.Items.Add(menuItem6);
|
||||
menu1.Location = new Point(0, 0);
|
||||
menu1.Name = "menu1";
|
||||
menu1.Size = new Size(141, 632);
|
||||
menu1.TabIndex = 0;
|
||||
menu1.Text = "menu1";
|
||||
menu1.MouseDown += menu1_MouseDown;
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Controls.Add(tabs1);
|
||||
panel3.Controls.Add(divider1);
|
||||
panel3.Controls.Add(panel1);
|
||||
panel3.Controls.Add(pageHeader1);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(1042, 699);
|
||||
panel3.TabIndex = 1;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.BackColor = SystemColors.Window;
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Location = new Point(151, 33);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Size = new Size(891, 666);
|
||||
styleCard2.Closable = true;
|
||||
tabs1.Style = styleCard2;
|
||||
tabs1.TabIndex = 5;
|
||||
tabs1.Text = "tabs1";
|
||||
tabs1.Type = AntdUI.TabType.Card;
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.BackColor = SystemColors.Window;
|
||||
divider1.Dock = DockStyle.Left;
|
||||
divider1.Location = new Point(141, 33);
|
||||
divider1.Name = "divider1";
|
||||
divider1.OrientationMargin = 0F;
|
||||
divider1.Size = new Size(10, 666);
|
||||
divider1.TabIndex = 4;
|
||||
divider1.Text = "";
|
||||
divider1.Vertical = true;
|
||||
//
|
||||
// SettingWindow1
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1042, 699);
|
||||
Controls.Add(panel3);
|
||||
Name = "SettingWindow1";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "SettingWinform";
|
||||
Load += SettingWindow1_Load;
|
||||
panel1.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.PageHeader pageHeader1;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.StackPanel panel2;
|
||||
private AntdUI.Menu menu1;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Tabs tabs1;
|
||||
private AntdUI.Divider divider1;
|
||||
private AntdUI.Dropdown btnAdd;
|
||||
private AntdUI.Button btnSave;
|
||||
}
|
||||
}
|
@ -1,496 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AntdUI;
|
||||
using AntdUI.Svg;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Helper;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Devices.PLC;
|
||||
using DHSoftware.Utils;
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class SettingWindow1 : Window
|
||||
{
|
||||
private UserControl currControl;
|
||||
|
||||
List<CameraBase> CameraBaseList = new List<CameraBase>();
|
||||
List<PLCBase> PLCBaseList = new List<PLCBase>();
|
||||
List<DetectionConfig> DetectionList = new List<DetectionConfig>();
|
||||
public SettingWindow1()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
BindEventHandler();
|
||||
InitData();
|
||||
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
Resize += SettingWindow1_Resize;
|
||||
btnAdd.SelectedValueChanged += btnAdd_SelectedValueChanged;
|
||||
btnSave.Click += BtnSave_Click;
|
||||
|
||||
}
|
||||
private float x; //定义当前窗体的宽度
|
||||
private float y; //定义当前窗体的高度
|
||||
private void InitData()
|
||||
{
|
||||
btnAdd.Items.Clear();
|
||||
btnAdd.Items.Add("相机设置");
|
||||
btnAdd.Items.Add("工位设置");
|
||||
btnAdd.Items.Add("运控设置");
|
||||
|
||||
x = Width;
|
||||
y = Height;
|
||||
AdaptiveHelper.setTag(this);
|
||||
|
||||
// 从文件加载配置
|
||||
var loadedConfig = ConfigManager.LoadConfig();
|
||||
if (loadedConfig != null)
|
||||
{
|
||||
// 更新当前列表
|
||||
CameraBaseList = loadedConfig.Cameras;
|
||||
PLCBaseList = loadedConfig.PLCs;
|
||||
DetectionList = loadedConfig.Detections;
|
||||
if (CameraBaseList.Count > 0)
|
||||
{
|
||||
var workstationItem = FindMenuItem(menu1.Items, "相机设置");
|
||||
|
||||
if (workstationItem != null)
|
||||
{
|
||||
foreach (var item in CameraBaseList)
|
||||
{
|
||||
var newItem = new MenuItem();
|
||||
newItem.Text = item.CameraName;
|
||||
newItem.IconSvg = "VideoCameraOutlined";
|
||||
workstationItem.Sub.Add(newItem);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if (DetectionList.Count > 0)
|
||||
{
|
||||
var workstationItem = FindMenuItem(menu1.Items, "工位设置");
|
||||
|
||||
if (workstationItem != null)
|
||||
{
|
||||
foreach (var item in DetectionList)
|
||||
{
|
||||
var newItem = new MenuItem();
|
||||
newItem.Text = item.Name;
|
||||
newItem.IconSvg = "AppstoreOutlined";
|
||||
workstationItem.Sub.Add(newItem);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PLCBaseList.Count > 0)
|
||||
{
|
||||
var workstationItem = FindMenuItem(menu1.Items, "运控设置");
|
||||
|
||||
if (workstationItem != null)
|
||||
{
|
||||
foreach (var item in PLCBaseList)
|
||||
{
|
||||
var newItem = new MenuItem();
|
||||
newItem.Text = item.PLCName;
|
||||
newItem.IconSvg = "ControlOutlined";
|
||||
workstationItem.Sub.Add(newItem);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSave_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
var config = ConfigManager.CreateConfig(CameraBaseList, PLCBaseList, DetectionList);
|
||||
ConfigManager.SaveConfig(config);
|
||||
MessageBox.Show("保存成功!");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void SettingWindow1_Resize(object? sender, EventArgs e)
|
||||
{
|
||||
var newx = Width / x;
|
||||
var newy = Height / y;
|
||||
AdaptiveHelper.setControls(newx, newy, this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 递归查找菜单项
|
||||
private MenuItem FindMenuItem(MenuItemCollection items, string targetText)
|
||||
{
|
||||
foreach (MenuItem item in items)
|
||||
{
|
||||
if (item.Text == targetText) return item;
|
||||
if (item.Sub != null)
|
||||
{
|
||||
var subResult = FindMenuItem(item.Sub, targetText);
|
||||
if (subResult != null) return subResult;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool isUpdatingTabs = false;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
private void LoadMenu(string filter = "")
|
||||
{
|
||||
menu1.Items.Clear();
|
||||
Dictionary<string, List<MenuItems>> Menu_decetion = new Dictionary<string, List<MenuItems>>();
|
||||
|
||||
|
||||
|
||||
string lang = AntdUI.Localization.CurrentLanguage;
|
||||
var menuItems = DataUtil.Menu_decetion;
|
||||
//var menuIcons = DataUtil.MenuIcons_zhcn;
|
||||
//if (lang.StartsWith("en"))
|
||||
//{
|
||||
// menuItems = DataUtil.MenuItems_enus;
|
||||
// menuIcons = DataUtil.MenuIcons_enus;
|
||||
//}
|
||||
|
||||
foreach (var rootItem in Menu_decetion)
|
||||
{
|
||||
var rootKey = rootItem.Key.ToLower();
|
||||
var rootMenu = new AntdUI.MenuItem
|
||||
{
|
||||
Text = rootItem.Key,
|
||||
//IconSvg = menuIcons.TryGetValue(rootItem.Key, out var icon) ? icon : "UnorderedListOutlined",
|
||||
};
|
||||
bool rootVisible = false; // 用于标记是否显示根节点
|
||||
|
||||
foreach (var item in rootItem.Value)
|
||||
{
|
||||
var childText = item.Text.ToLower();
|
||||
|
||||
// 如果子节点包含搜索文本
|
||||
if (childText.Contains(filter))
|
||||
{
|
||||
var menuItem = new AntdUI.MenuItem
|
||||
{
|
||||
Text = item.Text,
|
||||
IconSvg = item.IconSvg,
|
||||
Tag = item.Tag,
|
||||
};
|
||||
rootMenu.Sub.Add(menuItem);
|
||||
rootVisible = true; // 如果有子节点包含,则显示根节点
|
||||
}
|
||||
}
|
||||
|
||||
// 如果根节点包含搜索文本,或有可见的子节点,则显示根节点
|
||||
if (rootKey.Contains(filter) || rootVisible)
|
||||
{
|
||||
menu1.Items.Add(rootMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void menu1_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
// 转换坐标到控件内部坐标系(考虑滚动条)
|
||||
Point clickPoint = new Point(e.X, e.Y + menu1.ScrollBar.Value);
|
||||
|
||||
// 递归查找命中的菜单项
|
||||
MenuItem clickedItem = FindClickedItem(menu1.Items, clickPoint);
|
||||
|
||||
if (clickedItem != null)
|
||||
{
|
||||
if (clickedItem.PARENTITEM == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (clickedItem.PARENTITEM.Text)
|
||||
{
|
||||
case "相机设置":
|
||||
foreach (var tab in tabs1.Pages)
|
||||
{
|
||||
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
|
||||
{
|
||||
isUpdatingTabs = true;
|
||||
tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
|
||||
isUpdatingTabs = false;
|
||||
currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
//先获取是否存在该名称的配置
|
||||
//如果没有新建项
|
||||
CameraBase? CameraBase= CameraBaseList.Where(c => c.CameraName == clickedItem.Text).FirstOrDefault();
|
||||
if (CameraBase == null)
|
||||
{
|
||||
CameraBase=new CameraBase();
|
||||
}
|
||||
UserControl control = null;
|
||||
control = new CameraControl(this, CameraBase);
|
||||
if (control != null)
|
||||
{
|
||||
//容器添加控件,需要调整dpi
|
||||
control.Dock = DockStyle.Fill;
|
||||
AutoDpi(control);
|
||||
AntdUI.TabPage tabPage = new AntdUI.TabPage()
|
||||
{
|
||||
Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
|
||||
ReadOnly = false,
|
||||
|
||||
};
|
||||
tabPage.Controls.Add(control);
|
||||
tabs1.Pages.Add(tabPage);
|
||||
isUpdatingTabs = true;
|
||||
tabs1.SelectedTab = tabPage;
|
||||
isUpdatingTabs = false;
|
||||
currControl = control;
|
||||
}
|
||||
break;
|
||||
case "工位设置":
|
||||
// 检查是否已存在同名 TabPage
|
||||
foreach (var tab in tabs1.Pages)
|
||||
{
|
||||
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
|
||||
{
|
||||
isUpdatingTabs = true;
|
||||
tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
|
||||
isUpdatingTabs = false;
|
||||
currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
UserControl control1 = null;
|
||||
control1 = new DetectControl(this);
|
||||
if (control1 != null)
|
||||
{
|
||||
//容器添加控件,需要调整dpi
|
||||
control1.Dock = DockStyle.Fill;
|
||||
AutoDpi(control1);
|
||||
AntdUI.TabPage tabPage = new AntdUI.TabPage()
|
||||
{
|
||||
Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
|
||||
ReadOnly = false ,
|
||||
|
||||
};
|
||||
tabPage.Controls.Add(control1);
|
||||
tabs1.Pages.Add(tabPage);
|
||||
isUpdatingTabs = true;
|
||||
tabs1.SelectedTab = tabPage;
|
||||
isUpdatingTabs = false;
|
||||
currControl = control1;
|
||||
}
|
||||
break;
|
||||
|
||||
case "运控设置":
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
|
||||
// 转换坐标到控件内部坐标系(考虑滚动条)
|
||||
Point clickPoint = new Point(e.X, e.Y + menu1.ScrollBar.Value);
|
||||
|
||||
// 递归查找命中的菜单项
|
||||
MenuItem clickedItem = FindClickedItem(menu1.Items, clickPoint);
|
||||
|
||||
if (clickedItem != null)
|
||||
{
|
||||
if (clickedItem.PARENTITEM == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (clickedItem.PARENTITEM.Text)
|
||||
{
|
||||
case "相机设置":
|
||||
var menulist = new AntdUI.IContextMenuStripItem[]
|
||||
{
|
||||
new AntdUI.ContextMenuStripItem("删除相机", "")
|
||||
{
|
||||
IconSvg = "DeleteOutlined"
|
||||
}
|
||||
|
||||
};
|
||||
AntdUI.ContextMenuStrip.open(menu1, it =>
|
||||
{
|
||||
menu1.Remove(clickedItem);
|
||||
foreach (var tab in tabs1.Pages)
|
||||
{
|
||||
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
|
||||
{
|
||||
isUpdatingTabs = true;
|
||||
tabs1.Pages.Remove(tab);
|
||||
CameraBaseList.RemoveAll(c => c.CameraName == clickedItem.Text);
|
||||
isUpdatingTabs = false;
|
||||
currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
CameraBaseList.RemoveAll(c => c.CameraName == clickedItem.Text);
|
||||
}, menulist);
|
||||
break;
|
||||
case "工位设置":
|
||||
var menulist1 = new AntdUI.IContextMenuStripItem[]
|
||||
{
|
||||
new AntdUI.ContextMenuStripItem("删除工位", "")
|
||||
{
|
||||
IconSvg = "DeleteOutlined"
|
||||
}
|
||||
|
||||
};
|
||||
AntdUI.ContextMenuStrip.open(menu1, it =>
|
||||
{
|
||||
menu1.Remove(clickedItem);
|
||||
foreach (var tab in tabs1.Pages)
|
||||
{
|
||||
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
|
||||
{
|
||||
isUpdatingTabs = true;
|
||||
//tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
|
||||
tabs1.Pages.Remove(tab);
|
||||
isUpdatingTabs = false;
|
||||
currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, menulist1);
|
||||
break;
|
||||
|
||||
case "运控设置":
|
||||
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private MenuItem FindClickedItem(MenuItemCollection items, Point clickPoint)
|
||||
{
|
||||
foreach (MenuItem item in items)
|
||||
{
|
||||
// 检查当前项是否可见且包含点击坐标
|
||||
if (item.Visible && item.Rect.Contains(clickPoint))
|
||||
{
|
||||
return item;
|
||||
}
|
||||
|
||||
// 递归检查子项(如果展开)
|
||||
if (item.Expand && item.Sub != null)
|
||||
{
|
||||
var childResult = FindClickedItem(item.Sub, clickPoint);
|
||||
if (childResult != null) return childResult;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void btnAdd_SelectedValueChanged(object sender, ObjectNEventArgs e)
|
||||
{
|
||||
string selectedValue = e.Value.ToString();
|
||||
switch (selectedValue)
|
||||
{
|
||||
case "相机设置":
|
||||
var workstationItem = FindMenuItem(menu1.Items, "相机设置");
|
||||
|
||||
if (workstationItem != null)
|
||||
{
|
||||
|
||||
var form = new AddCameraControl(this) { Size = new Size(300, 200) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
var newItem = new MenuItem(form.CubicleName);
|
||||
newItem.IconSvg = "VideoCameraOutlined";
|
||||
// 防止重复添加
|
||||
if (!menu1.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
|
||||
{
|
||||
workstationItem.Sub.Add(newItem);
|
||||
CameraBase cameraBase = new CameraBase();
|
||||
cameraBase.CameraName = form.CubicleName;
|
||||
CameraBaseList.Add(cameraBase);
|
||||
}
|
||||
else
|
||||
{
|
||||
AntdUI.Notification.warn(this, "新增相机失败", $"{form.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "工位设置":
|
||||
// 查找工位设置项
|
||||
var workstationItem1= FindMenuItem(menu1.Items, "工位设置");
|
||||
|
||||
if (workstationItem1 != null)
|
||||
{
|
||||
|
||||
var form = new AddCubicleControl(this) { Size = new Size(300, 200) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
var newItem = new MenuItem(form.CubicleName);
|
||||
newItem.IconSvg = "AppstoreOutlined";
|
||||
// 防止重复添加
|
||||
if (!menu1.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
|
||||
{
|
||||
workstationItem1.Sub.Add(newItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
AntdUI.Notification.warn(this, "新增工位失败", $"{form.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "运控设置":
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
104
DHSoftware/Views/SizeConfigControl.Designer.cs
generated
104
DHSoftware/Views/SizeConfigControl.Designer.cs
generated
@ -1,104 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class SizeConfigControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel2 = new Panel();
|
||||
label2 = new Label();
|
||||
btnDelSizeParm = new AntdUI.Button();
|
||||
tbSizeParm = new AntdUI.Table();
|
||||
btnAddSizeParm = new AntdUI.Button();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(label2);
|
||||
panel2.Controls.Add(btnDelSizeParm);
|
||||
panel2.Controls.Add(tbSizeParm);
|
||||
panel2.Controls.Add(btnAddSizeParm);
|
||||
panel2.Location = new Point(3, 3);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(779, 286);
|
||||
panel2.TabIndex = 36;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(3, 5);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(56, 17);
|
||||
label2.TabIndex = 25;
|
||||
label2.Text = "尺寸参数";
|
||||
//
|
||||
// btnDelSizeParm
|
||||
//
|
||||
btnDelSizeParm.Location = new Point(93, 25);
|
||||
btnDelSizeParm.Name = "btnDelSizeParm";
|
||||
btnDelSizeParm.Size = new Size(84, 34);
|
||||
btnDelSizeParm.TabIndex = 24;
|
||||
btnDelSizeParm.Text = "删除";
|
||||
//
|
||||
// tbSizeParm
|
||||
//
|
||||
tbSizeParm.Location = new Point(3, 65);
|
||||
tbSizeParm.Name = "tbSizeParm";
|
||||
tbSizeParm.Size = new Size(773, 218);
|
||||
tbSizeParm.TabIndex = 22;
|
||||
tbSizeParm.Text = "table1";
|
||||
//
|
||||
// btnAddSizeParm
|
||||
//
|
||||
btnAddSizeParm.Location = new Point(3, 25);
|
||||
btnAddSizeParm.Name = "btnAddSizeParm";
|
||||
btnAddSizeParm.Size = new Size(84, 34);
|
||||
btnAddSizeParm.TabIndex = 23;
|
||||
btnAddSizeParm.Text = "新增";
|
||||
//
|
||||
// SizeConfigControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
BorderStyle = BorderStyle.FixedSingle;
|
||||
Controls.Add(panel2);
|
||||
Name = "SizeConfigControl";
|
||||
Size = new Size(783, 290);
|
||||
panel2.ResumeLayout(false);
|
||||
panel2.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Panel panel2;
|
||||
private Label label2;
|
||||
private AntdUI.Button btnDelSizeParm;
|
||||
private AntdUI.Table tbSizeParm;
|
||||
private AntdUI.Button btnAddSizeParm;
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
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;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class SizeConfigControl : UserControl
|
||||
{
|
||||
public SizeConfigControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
223
DHSoftware/Views/SizeControl.Designer.cs
generated
Normal file
223
DHSoftware/Views/SizeControl.Designer.cs
generated
Normal file
@ -0,0 +1,223 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class SizeControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SizeControl));
|
||||
AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
|
||||
tabPage3 = new AntdUI.TabPage();
|
||||
tabPage4 = new AntdUI.TabPage();
|
||||
panel3 = new AntdUI.Panel();
|
||||
SizeTable = new AntdUI.Table();
|
||||
panel2 = new AntdUI.Panel();
|
||||
flowCameraPanel = new AntdUI.FlowPanel();
|
||||
btnCorrelatedCamera = new AntdUI.Button();
|
||||
label11 = new AntdUI.Label();
|
||||
panel1 = new AntdUI.Panel();
|
||||
btnSizeDel = new AntdUI.Button();
|
||||
btnSizeAdd = new AntdUI.Button();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
tabPage3.SuspendLayout();
|
||||
tabPage4.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
tabs1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
tabPage3.Controls.Add(tabPage4);
|
||||
tabPage3.Dock = DockStyle.None;
|
||||
tabPage3.Location = new Point(3, 31);
|
||||
tabPage3.Name = "tabPage3";
|
||||
tabPage3.Size = new Size(909, 575);
|
||||
tabPage3.TabIndex = 3;
|
||||
tabPage3.Text = "尺寸测量";
|
||||
//
|
||||
// tabPage4
|
||||
//
|
||||
tabPage4.Controls.Add(panel3);
|
||||
tabPage4.Controls.Add(panel2);
|
||||
tabPage4.Controls.Add(panel1);
|
||||
tabPage4.Location = new Point(8, 8);
|
||||
tabPage4.Name = "tabPage4";
|
||||
tabPage4.Size = new Size(909, 575);
|
||||
tabPage4.TabIndex = 1;
|
||||
tabPage4.Text = "预处理";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Controls.Add(SizeTable);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 87);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(909, 488);
|
||||
panel3.TabIndex = 11;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// SizeTable
|
||||
//
|
||||
SizeTable.Dock = DockStyle.Fill;
|
||||
SizeTable.EmptyHeader = true;
|
||||
SizeTable.Location = new Point(0, 0);
|
||||
SizeTable.Name = "SizeTable";
|
||||
SizeTable.Size = new Size(909, 488);
|
||||
SizeTable.TabIndex = 10;
|
||||
SizeTable.Text = "table1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(flowCameraPanel);
|
||||
panel2.Controls.Add(btnCorrelatedCamera);
|
||||
panel2.Controls.Add(label11);
|
||||
panel2.Dock = DockStyle.Top;
|
||||
panel2.Location = new Point(0, 42);
|
||||
panel2.Margin = new Padding(3, 3, 10, 3);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(909, 45);
|
||||
panel2.TabIndex = 8;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// flowCameraPanel
|
||||
//
|
||||
flowCameraPanel.AutoScroll = true;
|
||||
flowCameraPanel.BackColor = SystemColors.Window;
|
||||
flowCameraPanel.Dock = DockStyle.Left;
|
||||
flowCameraPanel.Location = new Point(74, 0);
|
||||
flowCameraPanel.Name = "flowCameraPanel";
|
||||
flowCameraPanel.Size = new Size(645, 45);
|
||||
flowCameraPanel.TabIndex = 36;
|
||||
flowCameraPanel.Text = "flowPanel1";
|
||||
//
|
||||
// btnCorrelatedCamera
|
||||
//
|
||||
btnCorrelatedCamera.BorderWidth = 2F;
|
||||
btnCorrelatedCamera.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnCorrelatedCamera.Ghost = true;
|
||||
btnCorrelatedCamera.IconRatio = 0.8F;
|
||||
btnCorrelatedCamera.IconSvg = resources.GetString("btnCorrelatedCamera.IconSvg");
|
||||
btnCorrelatedCamera.Location = new Point(750, 2);
|
||||
btnCorrelatedCamera.Name = "btnCorrelatedCamera";
|
||||
btnCorrelatedCamera.Size = new Size(110, 40);
|
||||
btnCorrelatedCamera.TabIndex = 34;
|
||||
btnCorrelatedCamera.Text = "关联";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
label11.Dock = DockStyle.Left;
|
||||
label11.Location = new Point(0, 0);
|
||||
label11.Name = "label11";
|
||||
label11.Size = new Size(74, 45);
|
||||
label11.TabIndex = 35;
|
||||
label11.Text = "关联相机";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(btnSizeDel);
|
||||
panel1.Controls.Add(btnSizeAdd);
|
||||
panel1.Dock = DockStyle.Top;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(909, 42);
|
||||
panel1.TabIndex = 9;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// btnSizeDel
|
||||
//
|
||||
btnSizeDel.BorderWidth = 2F;
|
||||
btnSizeDel.Dock = DockStyle.Left;
|
||||
btnSizeDel.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSizeDel.Ghost = true;
|
||||
btnSizeDel.IconRatio = 0.8F;
|
||||
btnSizeDel.IconSvg = resources.GetString("btnSizeDel.IconSvg");
|
||||
btnSizeDel.Location = new Point(80, 0);
|
||||
btnSizeDel.Name = "btnSizeDel";
|
||||
btnSizeDel.Size = new Size(80, 42);
|
||||
btnSizeDel.TabIndex = 12;
|
||||
btnSizeDel.Text = "删除";
|
||||
//
|
||||
// btnSizeAdd
|
||||
//
|
||||
btnSizeAdd.BorderWidth = 2F;
|
||||
btnSizeAdd.Dock = DockStyle.Left;
|
||||
btnSizeAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSizeAdd.Ghost = true;
|
||||
btnSizeAdd.IconRatio = 0.8F;
|
||||
btnSizeAdd.IconSvg = resources.GetString("btnSizeAdd.IconSvg");
|
||||
btnSizeAdd.Location = new Point(0, 0);
|
||||
btnSizeAdd.Name = "btnSizeAdd";
|
||||
btnSizeAdd.Size = new Size(80, 42);
|
||||
btnSizeAdd.TabIndex = 11;
|
||||
btnSizeAdd.Text = "新增";
|
||||
//
|
||||
// tabs1
|
||||
//
|
||||
tabs1.Centered = true;
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
tabs1.Location = new Point(0, 0);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.Size = new Size(915, 609);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 1;
|
||||
tabs1.Text = "tabs1";
|
||||
//
|
||||
// SizeControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(tabs1);
|
||||
Name = "SizeControl";
|
||||
Size = new Size(915, 609);
|
||||
tabPage3.ResumeLayout(false);
|
||||
tabPage4.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
tabs1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.TabPage tabPage3;
|
||||
private AntdUI.TabPage tabPage4;
|
||||
private AntdUI.Tabs tabs1;
|
||||
private AntdUI.Table SizeTable;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Button btnSizeDel;
|
||||
private AntdUI.Button btnSizeAdd;
|
||||
private AntdUI.FlowPanel flowCameraPanel;
|
||||
private AntdUI.Label label11;
|
||||
private AntdUI.Button btnCorrelatedCamera;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Panel panel3;
|
||||
}
|
||||
}
|
267
DHSoftware/Views/SizeControl.cs
Normal file
267
DHSoftware/Views/SizeControl.cs
Normal file
@ -0,0 +1,267 @@
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Reflection;
|
||||
using AntdUI;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.PLC;
|
||||
using XKRS.CanFly;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
using static DH.Commons.Enums.EnumHelper;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class SizeControl : UserControl
|
||||
{
|
||||
Window window;
|
||||
DetectionConfig detectionConfig;
|
||||
public SizeControl(Window _window,DetectionConfig _detection)
|
||||
{
|
||||
window = _window;
|
||||
detectionConfig = _detection;
|
||||
InitializeComponent();
|
||||
//初始化表格列头
|
||||
InitTableColumns();
|
||||
InitData();
|
||||
BindEventHandler();
|
||||
}
|
||||
|
||||
private void BindEventHandler()
|
||||
{
|
||||
|
||||
btnSizeAdd.Click += BtnSizeAdd_Click;
|
||||
btnSizeDel.Click += BtnSizeDelete_Click;
|
||||
SizeTable.CellButtonClick += SizeTable_CellButtonClick;
|
||||
btnCorrelatedCamera.Click += BtnCorrelatedCamera_Click;
|
||||
}
|
||||
private void BtnCorrelatedCamera_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
var form = new CorrelatedCameraEdit(window, detectionConfig.CameraCollects) { Size = new Size(500, 400) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
flowCameraPanel.Controls.Clear();
|
||||
if (detectionConfig.CameraCollects.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
control.CloseChanged += (sender, e) =>
|
||||
{
|
||||
var tag = sender as Tag;
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
if (item.CameraSourceId.Equals(tag.Text))
|
||||
{
|
||||
detectionConfig.CameraCollects.Remove(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
};
|
||||
// 通过主窗口设置DPI控制添加控件保持缩放比例
|
||||
window.AutoDpi(control);
|
||||
flowCameraPanel.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SizeTable_CellButtonClick(object sender, TableButtonEventArgs e)
|
||||
{
|
||||
var buttontext = e.Btn.Text;
|
||||
|
||||
if (e.Record is SizeTreatParam sizeTreat)
|
||||
{
|
||||
switch (buttontext)
|
||||
{
|
||||
//暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
|
||||
case "编辑":
|
||||
var form = new SizeLabelEdit(window, sizeTreat) { Size = new Size(500, 300) };
|
||||
AntdUI.Drawer.open(new AntdUI.Drawer.Config(window, form)
|
||||
{
|
||||
OnLoad = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "进入编辑", autoClose: 1);
|
||||
},
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "结束编辑", autoClose: 1);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "删除":
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
detectionConfig.SizeTreatParamList.Remove(sizeTreat);
|
||||
break;
|
||||
case "进行测量":
|
||||
var sizeType = ((int)sizeTreat.PreType).ToString();
|
||||
|
||||
// 根据测量类型打开不同的窗口
|
||||
switch (sizeType)
|
||||
{
|
||||
case "1":
|
||||
case "2":
|
||||
case "3":
|
||||
case "4":
|
||||
case "5":
|
||||
FrmMainSize frmMain3 = new FrmMainSize(sizeType, detectionConfig);
|
||||
frmMain3.ShowDialog();
|
||||
if (!string.IsNullOrEmpty(frmMain3.inputtext))
|
||||
{
|
||||
|
||||
sizeTreat.ResultShow = frmMain3.inputtext;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(frmMain3.outtext))
|
||||
{
|
||||
|
||||
|
||||
sizeTreat.OutResultShow = frmMain3.outtext;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
MessageBox.Show("未定义的测量类型!");
|
||||
break;
|
||||
}
|
||||
|
||||
//使用clone可以防止table中的image被修改
|
||||
//Preview.open(new Preview.Config(window, (Image)SizeParamLable.CellImages[0].Image.Clone()));
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void BtnSizeDelete_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (detectionConfig.SizeTreatParamList.Count == 0 || !detectionConfig.SizeTreatParamList.Any(x => x.Selected))
|
||||
{
|
||||
AntdUI.Message.warn(window, "请选择要删除的行!", autoClose: 3);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
{
|
||||
// 使用反转for循环删除主列表中选中的项
|
||||
for (int i = detectionConfig.SizeTreatParamList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 删除选中的主列表项
|
||||
if (detectionConfig.SizeTreatParamList[i].Selected)
|
||||
{
|
||||
detectionConfig.SizeTreatParamList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
// 提示删除完成
|
||||
AntdUI.Message.success(window, "删除成功!", autoClose: 3);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSizeAdd_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SizeTreatParam SizeParamLable = new SizeTreatParam()
|
||||
{
|
||||
//CellBadge = new CellBadge(SizeEnum.Circle.GetEnumDescription()),
|
||||
CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
var form = new SizeLabelEdit(window, SizeParamLable) { Size = new Size(450, 500) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
detectionConfig.SizeTreatParamList.Add(SizeParamLable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
|
||||
SizeTable.Binding(detectionConfig.SizeTreatParamList);
|
||||
|
||||
|
||||
if (detectionConfig.SizeTreatParamList.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.SizeTreatParamList)
|
||||
{
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void InitTableColumns()
|
||||
{
|
||||
|
||||
|
||||
|
||||
SizeTable.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new ColumnSwitch("IsEnable", "是否启用", ColumnAlign.Center),
|
||||
new Column("PreName", "测量名称",ColumnAlign.Center),
|
||||
new Column("PreType", "测量类型", ColumnAlign.Center),
|
||||
new Column("PrePix", "阈值", ColumnAlign.Center),
|
||||
new Column("ResultShow", "输入参数", ColumnAlign.Center),
|
||||
new Column("OutResultShow", "输出参数", ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
129
DHSoftware/Views/SizeControl.resx
Normal file
129
DHSoftware/Views/SizeControl.resx
Normal file
@ -0,0 +1,129 @@
|
||||
<?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>
|
||||
<data name="btnCorrelatedCamera.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
<data name="btnSizeDel.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
<data name="btnSizeAdd.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
</root>
|
@ -1,4 +1,5 @@
|
||||
using DH.Commons.Enums;
|
||||
using DH.Commons.Base;
|
||||
using DH.Commons.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
167
DHSoftware/Views/UserConfigFrm.Designer.cs
generated
167
DHSoftware/Views/UserConfigFrm.Designer.cs
generated
@ -1,167 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class UserConfigFrm
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
||||
pnlMenu = new AntdUI.Panel();
|
||||
panel3 = new AntdUI.Panel();
|
||||
btnSave = new AntdUI.Button();
|
||||
btnAdd = new AntdUI.Button();
|
||||
menu = new AntdUI.Menu();
|
||||
panel2 = new AntdUI.Panel();
|
||||
divider1 = new AntdUI.Divider();
|
||||
tabs = new AntdUI.Tabs();
|
||||
pnlMenu.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// pnlMenu
|
||||
//
|
||||
pnlMenu.Controls.Add(panel3);
|
||||
pnlMenu.Controls.Add(menu);
|
||||
pnlMenu.Dock = DockStyle.Left;
|
||||
pnlMenu.Location = new Point(0, 0);
|
||||
pnlMenu.Name = "pnlMenu";
|
||||
pnlMenu.Size = new Size(135, 542);
|
||||
pnlMenu.TabIndex = 0;
|
||||
pnlMenu.Text = "panel1";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Back = SystemColors.Window;
|
||||
panel3.BackColor = SystemColors.Window;
|
||||
panel3.Controls.Add(btnSave);
|
||||
panel3.Controls.Add(btnAdd);
|
||||
panel3.Dock = DockStyle.Bottom;
|
||||
panel3.Location = new Point(0, 516);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(135, 26);
|
||||
panel3.TabIndex = 2;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
btnSave.BackActive = SystemColors.Control;
|
||||
btnSave.BackColor = SystemColors.Control;
|
||||
btnSave.Dock = DockStyle.Left;
|
||||
btnSave.ForeColor = Color.Black;
|
||||
btnSave.IconRatio = 1F;
|
||||
btnSave.IconSvg = "AppstoreAddOutlined";
|
||||
btnSave.Location = new Point(35, 0);
|
||||
btnSave.Name = "btnSave";
|
||||
btnSave.Size = new Size(35, 26);
|
||||
btnSave.TabIndex = 2;
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.BackActive = SystemColors.Control;
|
||||
btnAdd.BackColor = SystemColors.Control;
|
||||
btnAdd.Dock = DockStyle.Left;
|
||||
btnAdd.ForeColor = Color.Black;
|
||||
btnAdd.IconRatio = 1F;
|
||||
btnAdd.IconSvg = "AppstoreAddOutlined";
|
||||
btnAdd.Location = new Point(0, 0);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Size = new Size(35, 26);
|
||||
btnAdd.TabIndex = 1;
|
||||
btnAdd.Click += btnAdd_Click;
|
||||
//
|
||||
// menu
|
||||
//
|
||||
menu.Dock = DockStyle.Fill;
|
||||
menu.Location = new Point(0, 0);
|
||||
menu.Name = "menu";
|
||||
menu.Size = new Size(135, 542);
|
||||
menu.TabIndex = 0;
|
||||
menu.Text = "menu1";
|
||||
menu.SelectChanged += Menu_SelectChanged;
|
||||
menu.MouseDown += Menu_MouseDown;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(divider1);
|
||||
panel2.Controls.Add(tabs);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(135, 0);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(745, 542);
|
||||
panel2.TabIndex = 1;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.BackColor = SystemColors.ActiveCaption;
|
||||
divider1.Dock = DockStyle.Left;
|
||||
divider1.Location = new Point(0, 0);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(10, 542);
|
||||
divider1.TabIndex = 1;
|
||||
divider1.Text = "";
|
||||
divider1.Vertical = true;
|
||||
//
|
||||
// tabs
|
||||
//
|
||||
tabs.Dock = DockStyle.Fill;
|
||||
tabs.Location = new Point(0, 0);
|
||||
tabs.Name = "tabs";
|
||||
tabs.Size = new Size(745, 542);
|
||||
tabs.Style = styleCard1;
|
||||
tabs.TabIndex = 0;
|
||||
tabs.Text = "tabs1";
|
||||
tabs.Type = AntdUI.TabType.Card;
|
||||
tabs.SelectedIndexChanged += tabs_SelectedIndexChanged;
|
||||
//
|
||||
// UserConfigFrm
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
Controls.Add(panel2);
|
||||
Controls.Add(pnlMenu);
|
||||
Name = "UserConfigFrm";
|
||||
Size = new Size(880, 542);
|
||||
pnlMenu.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Tabs tabs;
|
||||
private AntdUI.Panel pnlMenu;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Menu menu;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Button btnSave;
|
||||
private AntdUI.Button btnAdd;
|
||||
private AntdUI.Divider divider1;
|
||||
// private AntdUI.Tabs tabs;
|
||||
}
|
||||
}
|
@ -1,258 +0,0 @@
|
||||
using AntdUI;
|
||||
using AntdUIDemo.Models;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Devices.Vision;
|
||||
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 static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using Window = AntdUI.Window;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class UserConfigFrm : UserControl
|
||||
{
|
||||
public List<CameraBase> cameras = new List<CameraBase>();
|
||||
public List<DetectionConfig> detections = new List<DetectionConfig>();
|
||||
private UserControl currControl;
|
||||
private bool isUpdatingTabs = false;//用于阻止Tabs更新
|
||||
public Window Window;
|
||||
public UserConfigFrm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
LoadMenu();
|
||||
menu.Width = (int)(100 * Config.Dpi);
|
||||
|
||||
}
|
||||
private void LoadMenu(string filter = "")
|
||||
{
|
||||
menu.Items.Clear();
|
||||
|
||||
string lang = AntdUI.Localization.CurrentLanguage;
|
||||
var menuItems = DataUtil.Menu_decetion;
|
||||
//var menuIcons = DataUtil.MenuIcons_zhcn;
|
||||
//if (lang.StartsWith("en"))
|
||||
//{
|
||||
// menuItems = DataUtil.MenuItems_enus;
|
||||
// menuIcons = DataUtil.MenuIcons_enus;
|
||||
//}
|
||||
|
||||
foreach (var rootItem in menuItems)
|
||||
{
|
||||
var rootKey = rootItem.Key.ToLower();
|
||||
var rootMenu = new AntdUI.MenuItem
|
||||
{
|
||||
Text = rootItem.Key,
|
||||
//IconSvg = menuIcons.TryGetValue(rootItem.Key, out var icon) ? icon : "UnorderedListOutlined",
|
||||
};
|
||||
bool rootVisible = false; // 用于标记是否显示根节点
|
||||
|
||||
foreach (var item in rootItem.Value)
|
||||
{
|
||||
var childText = item.Text.ToLower();
|
||||
|
||||
// 如果子节点包含搜索文本
|
||||
if (childText.Contains(filter))
|
||||
{
|
||||
var menuItem = new AntdUI.MenuItem
|
||||
{
|
||||
Text = item.Text,
|
||||
IconSvg = item.IconSvg,
|
||||
Tag = item.Tag,
|
||||
};
|
||||
rootMenu.Sub.Add(menuItem);
|
||||
rootVisible = true; // 如果有子节点包含,则显示根节点
|
||||
}
|
||||
}
|
||||
|
||||
// 如果根节点包含搜索文本,或有可见的子节点,则显示根节点
|
||||
if (rootKey.Contains(filter) || rootVisible)
|
||||
{
|
||||
menu.Items.Add(rootMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void SelectMenu()
|
||||
{
|
||||
if (isUpdatingTabs) return;
|
||||
var text = tabs.SelectedTab?.Text; // 使用安全导航操作符,防止 SelectedTab 为 null
|
||||
if (string.IsNullOrEmpty(text)) // 检查 text 是否为 null 或空
|
||||
{
|
||||
return; // 如果 text 为空,直接退出方法
|
||||
}
|
||||
//首页
|
||||
if (text == AntdUI.Localization.Get("home", "主页"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
var rootIndex = 0;
|
||||
var subIndex = 0;
|
||||
var menuItemsCopy = menu.Items.ToList(); // 创建副本
|
||||
for (int i = 0; i < menuItemsCopy.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < menuItemsCopy[i].Sub.Count; j++)
|
||||
{
|
||||
if (menuItemsCopy[i].Sub[j].Tag.ToString() == text)
|
||||
{
|
||||
rootIndex = i;
|
||||
subIndex = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
menu.SelectIndex(rootIndex, subIndex, true);
|
||||
}
|
||||
private void Menu_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
// 转换坐标到控件内部坐标系(考虑滚动条)
|
||||
Point clickPoint = new Point(e.X, e.Y + menu.ScrollBar.Value);
|
||||
|
||||
// 递归查找命中的菜单项
|
||||
MenuItem clickedItem = FindClickedItem(menu.Items, clickPoint);
|
||||
|
||||
if (clickedItem != null)
|
||||
{
|
||||
// 显示节点名称弹窗
|
||||
//MessageBox.Show($"右键点击的节点: {clickedItem.Text}");
|
||||
|
||||
var menulist = new AntdUI.IContextMenuStripItem[]
|
||||
{
|
||||
new AntdUI.ContextMenuStripItem("关联相机", "")
|
||||
{
|
||||
IconSvg = "VideoCameraAddOutlined"
|
||||
}
|
||||
};
|
||||
AntdUI.ContextMenuStrip.open(menu, it =>
|
||||
{
|
||||
if (it.Text == "关联相机")
|
||||
{
|
||||
//using (var dlg = new AddCameraWindow(cameras))
|
||||
//{
|
||||
// if (dlg.ShowDialog() == DialogResult.OK)
|
||||
// {
|
||||
// var newItem = new MenuItem(dlg.CubicleName);
|
||||
// newItem.IconSvg = "VideoCameraOutlined";
|
||||
// //// 防止重复添加
|
||||
// //if (!menu1.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
|
||||
// //{
|
||||
// clickedItem.Sub.Add(newItem);
|
||||
// //}
|
||||
// //else
|
||||
// //{
|
||||
// // AntdUI.Notification.warn(this, "新增失败", $"{dlg.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
|
||||
// //}
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}, menulist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MenuItem FindClickedItem(MenuItemCollection items, Point clickPoint)
|
||||
{
|
||||
foreach (MenuItem item in items)
|
||||
{
|
||||
// 检查当前项是否可见且包含点击坐标
|
||||
if (item.Visible && item.Rect.Contains(clickPoint))
|
||||
{
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void Menu_SelectChanged(object sender, MenuSelectEventArgs e)
|
||||
{
|
||||
string name = (string)e.Value.Tag;
|
||||
|
||||
//// 清理上一个浮动按钮窗体
|
||||
//if (currControl is FloatButtonDemo floatButtonDemo)
|
||||
//{
|
||||
// floatButtonDemo.CloseFloatButtonForm();
|
||||
//}
|
||||
|
||||
// 检查是否已存在同名 TabPage
|
||||
foreach (var tab in tabs.Pages)
|
||||
{
|
||||
if (tab is AntdUI.TabPage existingTab && existingTab.Text == name)
|
||||
{
|
||||
isUpdatingTabs = true;
|
||||
tabs.SelectedTab = existingTab;
|
||||
isUpdatingTabs = false;
|
||||
currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
int width = tabs.Width;
|
||||
int height = tabs.Height;
|
||||
// 创建新 TabPage
|
||||
UserDetetion control = new UserDetetion(Window,width, height);
|
||||
// control._windows = Window;
|
||||
switch (name)
|
||||
{
|
||||
case "工位1":
|
||||
// control =
|
||||
break;
|
||||
}
|
||||
|
||||
if (control != null)
|
||||
{
|
||||
control.Dock = DockStyle.Fill;
|
||||
// AutoDpi(control); // 如果有 DPI 适配逻辑
|
||||
|
||||
var tabPage = new AntdUI.TabPage
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = name,
|
||||
};
|
||||
tabPage.Controls.Add(control);
|
||||
tabs.Pages.Add(tabPage);
|
||||
|
||||
isUpdatingTabs = true;
|
||||
tabs.SelectedTab = tabPage;
|
||||
isUpdatingTabs = false;
|
||||
currControl = control;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void tabs_SelectedIndexChanged(object sender, IntEventArgs e)
|
||||
{
|
||||
SelectMenu();
|
||||
}
|
||||
|
||||
private void btnAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
//using (var dlg = new AddCubicleWindow())
|
||||
//{
|
||||
// if (dlg.ShowDialog() == DialogResult.OK)
|
||||
// {
|
||||
// var newItem = new MenuItem(dlg.CubicleName);
|
||||
// //newItem.IconSvg = "AppstoreOutlined";
|
||||
// // 防止重复添加
|
||||
// if (!menu.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
|
||||
// {
|
||||
// menu.Items.Add(newItem);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // AntdUI.Notification.warn(this, "新增工位失败", $"{dlg.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
70
DHSoftware/Views/UserDetetion.Designer.cs
generated
70
DHSoftware/Views/UserDetetion.Designer.cs
generated
@ -1,70 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class UserDetetion
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
collapse1 = new AntdUI.Collapse();
|
||||
panel1 = new Panel();
|
||||
SuspendLayout();
|
||||
//
|
||||
// collapse1
|
||||
//
|
||||
collapse1.Dock = DockStyle.Fill;
|
||||
collapse1.Location = new Point(0, 0);
|
||||
collapse1.Name = "collapse1";
|
||||
collapse1.Size = new Size(842, 568);
|
||||
collapse1.TabIndex = 0;
|
||||
collapse1.Text = "collapse1";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.BackColor = SystemColors.GradientActiveCaption;
|
||||
panel1.Dock = DockStyle.Left;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(2, 568);
|
||||
panel1.TabIndex = 0;
|
||||
//
|
||||
// UserDetetion
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Controls.Add(collapse1);
|
||||
Name = "UserDetetion";
|
||||
Size = new Size(842, 568);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Collapse collapse1;
|
||||
private Panel panel1;
|
||||
//private AntdUI.Button button1;
|
||||
}
|
||||
}
|
@ -1,226 +0,0 @@
|
||||
using AntdUI;
|
||||
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 Button = AntdUI.Button;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class UserDetetion : UserControl
|
||||
{
|
||||
private StackPanel panel, panel2, panel3, panel4;
|
||||
public Window _windows;
|
||||
//根据检测配置 将对应的相机配置、中处理预处理、尺寸测量
|
||||
public UserDetetion(Window windows,int parentWidth, int parentHeight)
|
||||
{
|
||||
InitializeComponent();
|
||||
_windows = windows;
|
||||
AntdUI.CollapseItem group1 = new CollapseItem();
|
||||
group1.Height = parentHeight / 4;
|
||||
group1.Text = "相机配置";
|
||||
AntdUI.CollapseItem group2 = new CollapseItem();
|
||||
group2.Text = "预处理";
|
||||
group2.Height = parentHeight/4;
|
||||
|
||||
AntdUI.CollapseItem group3 = new CollapseItem();
|
||||
group3.Text = "中处理";
|
||||
group3.Height = parentHeight - 300;
|
||||
|
||||
AntdUI.CollapseItem group4 = new CollapseItem();
|
||||
group4.Text = "尺寸测量";
|
||||
group4.Height = parentHeight / 4;
|
||||
|
||||
|
||||
// 初始化内容面板
|
||||
panel = CreateScrollPanel();
|
||||
panel2 = CreateScrollPanel();
|
||||
panel3 = CreateScrollPanel();
|
||||
panel4 = CreateScrollPanel();
|
||||
|
||||
// 添加预处理控件
|
||||
var ptuc = new PreTreatUserControl { AutoScroll = true, Dock = DockStyle.Top };
|
||||
var detect = new DetectConfigControl { AutoScroll = true , Dock = DockStyle.Fill };
|
||||
detect._window = this._windows;
|
||||
|
||||
// 添加尺寸测量控件
|
||||
var sizeFrm = new SizeConfigControl();
|
||||
|
||||
|
||||
CameraConfigControl camConfigFrm = new CameraConfigControl();
|
||||
camConfigFrm.Dock = DockStyle.Fill;
|
||||
|
||||
|
||||
|
||||
//PreTreatUserControl ptuc = new PreTreatUserControl();
|
||||
//ptuc.AutoScroll = true;
|
||||
//panel2.Controls.Add(ptuc);
|
||||
//DetectConfigControl detect = new DetectConfigControl();
|
||||
//// detect.Dock = DockStyle.Fill;
|
||||
//detect.AutoScroll = true;
|
||||
//panel2.Controls.Add(detect);
|
||||
|
||||
|
||||
//SizeConfigControl Sizefc = new SizeConfigControl();
|
||||
//Sizefc.Dock = DockStyle.Fill;
|
||||
//panel3.Controls.Add(Sizefc);
|
||||
|
||||
|
||||
|
||||
Button btnAddCam = new Button
|
||||
{
|
||||
Width = 100,
|
||||
Height = 30,
|
||||
Text = "添加相机配置",
|
||||
//Dock=DockStyle.Bottom
|
||||
};
|
||||
Button btnDelCam = new Button
|
||||
{
|
||||
Width = 100,
|
||||
Height = 30,
|
||||
Text = "删除相机配置",
|
||||
// Dock = DockStyle.Bottom
|
||||
};
|
||||
|
||||
|
||||
Button btnAddModel = new Button
|
||||
{
|
||||
Width = 100,
|
||||
Height = 30,
|
||||
Text = "添加模型配置",
|
||||
//Dock=DockStyle.Bottom
|
||||
};
|
||||
Button btnDelModel = new Button
|
||||
{
|
||||
Width = 100,
|
||||
Height = 30,
|
||||
Text = "删除模型配置",
|
||||
// Dock = DockStyle.Bottom
|
||||
};
|
||||
|
||||
FlowLayoutPanel flow = new FlowLayoutPanel();
|
||||
flow.Dock = DockStyle.Bottom;
|
||||
flow.Controls.Add(btnAddCam);
|
||||
flow.Controls.Add(btnDelCam);
|
||||
|
||||
FlowLayoutPanel flowmodel = new FlowLayoutPanel();
|
||||
flowmodel.Dock = DockStyle.Bottom;
|
||||
flowmodel.Controls.Add(btnAddModel);
|
||||
flowmodel.Controls.Add(btnDelModel);
|
||||
btnAddCam.Click += btnAddCam_Click;
|
||||
btnDelCam.Click += btnDelCam_Click;
|
||||
btnAddModel.Click += btnAddModel_Click;
|
||||
btnDelModel.Click += btnDelModel_Click;
|
||||
|
||||
panel.Controls.Add(flow);
|
||||
panel.Controls.Add(camConfigFrm);
|
||||
|
||||
panel2.Controls.Add(ptuc);
|
||||
panel3.Controls.Add(flowmodel);
|
||||
panel3.Controls.Add(detect);
|
||||
panel4.Controls.Add(sizeFrm);
|
||||
group1.Controls.Add(panel);
|
||||
group2.Controls.Add(panel2);
|
||||
group3.Controls.Add(panel3);
|
||||
group4.Controls.Add(panel4);
|
||||
|
||||
|
||||
//collapse1.Items.Add(group1);
|
||||
collapse1.Items.Add(group1);
|
||||
collapse1.Items.Add(group2);
|
||||
collapse1.Items.Add(group3);
|
||||
collapse1.Items.Add(group4);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 统一事件处理
|
||||
private void CameraOperation_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is Button btn)
|
||||
{
|
||||
switch (btn.Tag?.ToString())
|
||||
{
|
||||
case "Add":
|
||||
AddCameraConfig();
|
||||
break;
|
||||
case "Delete":
|
||||
DeleteCameraConfig();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 实际业务方法
|
||||
private void AddCameraConfig()
|
||||
{
|
||||
var newCamConfig = new CameraConfigControl { Dock = DockStyle.Top };
|
||||
panel.Controls.Add(newCamConfig);
|
||||
panel.ScrollControlIntoView(newCamConfig);
|
||||
}
|
||||
|
||||
private void DeleteCameraConfig()
|
||||
{
|
||||
if (panel.Controls.Count > 1)
|
||||
{
|
||||
panel.Controls.RemoveAt(panel.Controls.Count - 2);
|
||||
}
|
||||
}
|
||||
// 创建带滚动条的面板
|
||||
private StackPanel CreateScrollPanel()
|
||||
{
|
||||
return new StackPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Vertical = true,
|
||||
AutoScroll = true,
|
||||
Padding = new Padding(5) // 添加内边距避免内容贴边
|
||||
};
|
||||
}
|
||||
|
||||
private void btnAddCam_Click(object sender, EventArgs e)
|
||||
{
|
||||
CameraConfigControl camConfigFrm2 = new CameraConfigControl();
|
||||
camConfigFrm2.Dock = DockStyle.Fill;
|
||||
|
||||
panel.Controls.Add(camConfigFrm2);
|
||||
}
|
||||
private void btnDelCam_Click(object sender, EventArgs e)
|
||||
{
|
||||
// 遍历 panel 的 Controls,找到最后一个 CameraConfigControl 并移除
|
||||
for (int i = panel.Controls.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (panel.Controls[i] is CameraConfigControl)
|
||||
{
|
||||
panel.Controls.RemoveAt(i);
|
||||
break; // 只删除一个
|
||||
}
|
||||
}
|
||||
}
|
||||
private void btnAddModel_Click(object sender, EventArgs e)
|
||||
{
|
||||
DetectConfigControl DetectFrm = new DetectConfigControl();
|
||||
DetectFrm._window = this._windows;
|
||||
DetectFrm.Dock = DockStyle.Fill;
|
||||
|
||||
panel3.Controls.Add(DetectFrm);
|
||||
}
|
||||
private void btnDelModel_Click(object sender, EventArgs e)
|
||||
{
|
||||
// 遍历 panel 的 Controls,找到最后一个 CameraConfigControl 并移除
|
||||
for (int i = panel3.Controls.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (panel3.Controls[i] is DetectConfigControl)
|
||||
{
|
||||
panel3.Controls.RemoveAt(i);
|
||||
break; // 只删除一个
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
591
DHSoftware/Views/VisualLocalizationWindow.Designer.cs
generated
Normal file
591
DHSoftware/Views/VisualLocalizationWindow.Designer.cs
generated
Normal file
@ -0,0 +1,591 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class VisualLocalizationWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
titlebar = new AntdUI.PageHeader();
|
||||
panel1 = new AntdUI.Panel();
|
||||
iptThreshold = new AntdUI.InputNumber();
|
||||
label6 = new AntdUI.Label();
|
||||
btnSelectBackImg = new AntdUI.Button();
|
||||
btnSelectModel = new AntdUI.Button();
|
||||
iptBackImg = new AntdUI.Input();
|
||||
label3 = new AntdUI.Label();
|
||||
iptModel = new AntdUI.Input();
|
||||
label2 = new AntdUI.Label();
|
||||
sltCameraName = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
panel2 = new AntdUI.Panel();
|
||||
iptSpeed = new AntdUI.InputNumber();
|
||||
label7 = new AntdUI.Label();
|
||||
btnSaveImg = new AntdUI.Button();
|
||||
btnSavePos = new AntdUI.Button();
|
||||
btnReverse = new AntdUI.Button();
|
||||
btnForward = new AntdUI.Button();
|
||||
btnLocalization = new AntdUI.Button();
|
||||
btnAcquisition = new AntdUI.Button();
|
||||
iptPosition = new AntdUI.InputNumber();
|
||||
label5 = new AntdUI.Label();
|
||||
sltDirection = new AntdUI.Select();
|
||||
label4 = new AntdUI.Label();
|
||||
panelMotor = new AntdUI.Panel();
|
||||
btnSaveMotorPos = new AntdUI.Button();
|
||||
iptMotorPos = new AntdUI.InputNumber();
|
||||
label9 = new AntdUI.Label();
|
||||
btnMotorZero = new AntdUI.Button();
|
||||
btnMotorReverse = new AntdUI.Button();
|
||||
btnMotorForward = new AntdUI.Button();
|
||||
iptMotorSpeed = new AntdUI.InputNumber();
|
||||
label8 = new AntdUI.Label();
|
||||
panel3 = new AntdUI.Panel();
|
||||
btnSaveBarrierPos = new AntdUI.Button();
|
||||
iptBarrierPos = new AntdUI.InputNumber();
|
||||
label10 = new AntdUI.Label();
|
||||
btnBarrierZero = new AntdUI.Button();
|
||||
btnBarrier = new AntdUI.Button();
|
||||
iptBarrierSpeed = new AntdUI.InputNumber();
|
||||
label11 = new AntdUI.Label();
|
||||
imageViewerControl1 = new ImageViewerControl();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
panelMotor.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// titlebar
|
||||
//
|
||||
titlebar.BackColor = Color.FromArgb(46, 108, 227);
|
||||
titlebar.DividerShow = true;
|
||||
titlebar.DividerThickness = 0F;
|
||||
titlebar.Dock = DockStyle.Top;
|
||||
titlebar.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
titlebar.ForeColor = Color.White;
|
||||
titlebar.Location = new Point(0, 0);
|
||||
titlebar.Mode = AntdUI.TAMode.Dark;
|
||||
titlebar.Name = "titlebar";
|
||||
titlebar.ShowButton = true;
|
||||
titlebar.ShowIcon = true;
|
||||
titlebar.Size = new Size(1210, 37);
|
||||
titlebar.SubText = "视觉定位系统";
|
||||
titlebar.TabIndex = 1;
|
||||
titlebar.Text = "山东迭慧智能科技有限公司";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Controls.Add(iptThreshold);
|
||||
panel1.Controls.Add(label6);
|
||||
panel1.Controls.Add(btnSelectBackImg);
|
||||
panel1.Controls.Add(btnSelectModel);
|
||||
panel1.Controls.Add(iptBackImg);
|
||||
panel1.Controls.Add(label3);
|
||||
panel1.Controls.Add(iptModel);
|
||||
panel1.Controls.Add(label2);
|
||||
panel1.Controls.Add(sltCameraName);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Dock = DockStyle.Top;
|
||||
panel1.Location = new Point(0, 37);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(1210, 56);
|
||||
panel1.TabIndex = 2;
|
||||
panel1.Text = "panel1";
|
||||
//
|
||||
// iptThreshold
|
||||
//
|
||||
iptThreshold.Location = new Point(1094, 6);
|
||||
iptThreshold.Name = "iptThreshold";
|
||||
iptThreshold.Size = new Size(107, 43);
|
||||
iptThreshold.TabIndex = 15;
|
||||
iptThreshold.Text = "0";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
label6.BackColor = SystemColors.Window;
|
||||
label6.Location = new Point(1044, 18);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(57, 23);
|
||||
label6.TabIndex = 14;
|
||||
label6.Text = "定位阈值";
|
||||
//
|
||||
// btnSelectBackImg
|
||||
//
|
||||
btnSelectBackImg.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSelectBackImg.Location = new Point(963, 11);
|
||||
btnSelectBackImg.Name = "btnSelectBackImg";
|
||||
btnSelectBackImg.Size = new Size(75, 38);
|
||||
btnSelectBackImg.TabIndex = 13;
|
||||
btnSelectBackImg.Text = "打开";
|
||||
btnSelectBackImg.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnSelectModel
|
||||
//
|
||||
btnSelectModel.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSelectModel.Location = new Point(525, 9);
|
||||
btnSelectModel.Name = "btnSelectModel";
|
||||
btnSelectModel.Size = new Size(75, 38);
|
||||
btnSelectModel.TabIndex = 12;
|
||||
btnSelectModel.Text = "打开";
|
||||
btnSelectModel.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptBackImg
|
||||
//
|
||||
iptBackImg.Location = new Point(694, 6);
|
||||
iptBackImg.Name = "iptBackImg";
|
||||
iptBackImg.PlaceholderText = "请选择背景图片";
|
||||
iptBackImg.Size = new Size(263, 43);
|
||||
iptBackImg.TabIndex = 10;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.BackColor = SystemColors.Window;
|
||||
label3.Location = new Point(606, 18);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(82, 23);
|
||||
label3.TabIndex = 9;
|
||||
label3.Text = "背景图片路径";
|
||||
//
|
||||
// iptModel
|
||||
//
|
||||
iptModel.Location = new Point(256, 6);
|
||||
iptModel.Name = "iptModel";
|
||||
iptModel.PlaceholderText = "请选择算法";
|
||||
iptModel.Size = new Size(263, 43);
|
||||
iptModel.TabIndex = 3;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.BackColor = SystemColors.Window;
|
||||
label2.Location = new Point(193, 18);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(57, 23);
|
||||
label2.TabIndex = 2;
|
||||
label2.Text = "算法路径";
|
||||
//
|
||||
// sltCameraName
|
||||
//
|
||||
sltCameraName.List = true;
|
||||
sltCameraName.Location = new Point(72, 7);
|
||||
sltCameraName.MaxCount = 10;
|
||||
sltCameraName.Name = "sltCameraName";
|
||||
sltCameraName.PlaceholderText = "请选择相机";
|
||||
sltCameraName.Size = new Size(115, 43);
|
||||
sltCameraName.TabIndex = 1;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.BackColor = SystemColors.Window;
|
||||
label1.Location = new Point(9, 18);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(57, 23);
|
||||
label1.TabIndex = 0;
|
||||
label1.Text = "相机名称";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(iptSpeed);
|
||||
panel2.Controls.Add(label7);
|
||||
panel2.Controls.Add(btnSaveImg);
|
||||
panel2.Controls.Add(btnSavePos);
|
||||
panel2.Controls.Add(btnReverse);
|
||||
panel2.Controls.Add(btnForward);
|
||||
panel2.Controls.Add(btnLocalization);
|
||||
panel2.Controls.Add(btnAcquisition);
|
||||
panel2.Controls.Add(iptPosition);
|
||||
panel2.Controls.Add(label5);
|
||||
panel2.Controls.Add(sltDirection);
|
||||
panel2.Controls.Add(label4);
|
||||
panel2.Dock = DockStyle.Top;
|
||||
panel2.Location = new Point(0, 93);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(1210, 56);
|
||||
panel2.TabIndex = 3;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// iptSpeed
|
||||
//
|
||||
iptSpeed.Location = new Point(256, 6);
|
||||
iptSpeed.Name = "iptSpeed";
|
||||
iptSpeed.Size = new Size(107, 43);
|
||||
iptSpeed.TabIndex = 20;
|
||||
iptSpeed.Text = "0";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.BackColor = SystemColors.Window;
|
||||
label7.Location = new Point(193, 18);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(57, 23);
|
||||
label7.TabIndex = 19;
|
||||
label7.Text = "转盘速度";
|
||||
//
|
||||
// btnSaveImg
|
||||
//
|
||||
btnSaveImg.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSaveImg.Location = new Point(1126, 11);
|
||||
btnSaveImg.Name = "btnSaveImg";
|
||||
btnSaveImg.Size = new Size(75, 38);
|
||||
btnSaveImg.TabIndex = 18;
|
||||
btnSaveImg.Text = "保存图像";
|
||||
btnSaveImg.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnSavePos
|
||||
//
|
||||
btnSavePos.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSavePos.Location = new Point(1013, 11);
|
||||
btnSavePos.Name = "btnSavePos";
|
||||
btnSavePos.Size = new Size(75, 38);
|
||||
btnSavePos.TabIndex = 17;
|
||||
btnSavePos.Text = "保存定位";
|
||||
btnSavePos.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnReverse
|
||||
//
|
||||
btnReverse.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnReverse.Location = new Point(904, 11);
|
||||
btnReverse.Name = "btnReverse";
|
||||
btnReverse.Size = new Size(75, 38);
|
||||
btnReverse.TabIndex = 16;
|
||||
btnReverse.Text = "转盘反转";
|
||||
btnReverse.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnForward
|
||||
//
|
||||
btnForward.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnForward.Location = new Point(804, 11);
|
||||
btnForward.Name = "btnForward";
|
||||
btnForward.Size = new Size(75, 38);
|
||||
btnForward.TabIndex = 15;
|
||||
btnForward.Text = "转盘正转";
|
||||
btnForward.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnLocalization
|
||||
//
|
||||
btnLocalization.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnLocalization.Location = new Point(704, 11);
|
||||
btnLocalization.Name = "btnLocalization";
|
||||
btnLocalization.Size = new Size(75, 38);
|
||||
btnLocalization.TabIndex = 14;
|
||||
btnLocalization.Text = "开始定位";
|
||||
btnLocalization.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnAcquisition
|
||||
//
|
||||
btnAcquisition.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnAcquisition.Location = new Point(606, 11);
|
||||
btnAcquisition.Name = "btnAcquisition";
|
||||
btnAcquisition.Size = new Size(75, 38);
|
||||
btnAcquisition.TabIndex = 13;
|
||||
btnAcquisition.Text = "开始采集";
|
||||
btnAcquisition.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptPosition
|
||||
//
|
||||
iptPosition.Location = new Point(425, 6);
|
||||
iptPosition.Name = "iptPosition";
|
||||
iptPosition.ReadOnly = true;
|
||||
iptPosition.Size = new Size(175, 43);
|
||||
iptPosition.TabIndex = 7;
|
||||
iptPosition.Text = "0";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
label5.BackColor = SystemColors.Window;
|
||||
label5.Location = new Point(369, 18);
|
||||
label5.Name = "label5";
|
||||
label5.Size = new Size(59, 23);
|
||||
label5.TabIndex = 6;
|
||||
label5.Text = "当前位置";
|
||||
//
|
||||
// sltDirection
|
||||
//
|
||||
sltDirection.Items.AddRange(new object[] { "正方向", "反方向" });
|
||||
sltDirection.List = true;
|
||||
sltDirection.Location = new Point(72, 6);
|
||||
sltDirection.MaxCount = 10;
|
||||
sltDirection.Name = "sltDirection";
|
||||
sltDirection.PlaceholderText = "请选择方向";
|
||||
sltDirection.Size = new Size(115, 43);
|
||||
sltDirection.TabIndex = 5;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
label4.BackColor = SystemColors.Window;
|
||||
label4.Location = new Point(9, 18);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(57, 23);
|
||||
label4.TabIndex = 4;
|
||||
label4.Text = "转盘方向";
|
||||
//
|
||||
// panelMotor
|
||||
//
|
||||
panelMotor.Controls.Add(btnSaveMotorPos);
|
||||
panelMotor.Controls.Add(iptMotorPos);
|
||||
panelMotor.Controls.Add(label9);
|
||||
panelMotor.Controls.Add(btnMotorZero);
|
||||
panelMotor.Controls.Add(btnMotorReverse);
|
||||
panelMotor.Controls.Add(btnMotorForward);
|
||||
panelMotor.Controls.Add(iptMotorSpeed);
|
||||
panelMotor.Controls.Add(label8);
|
||||
panelMotor.Dock = DockStyle.Top;
|
||||
panelMotor.Location = new Point(0, 149);
|
||||
panelMotor.Name = "panelMotor";
|
||||
panelMotor.Size = new Size(1210, 46);
|
||||
panelMotor.TabIndex = 4;
|
||||
panelMotor.Text = "panel3";
|
||||
//
|
||||
// btnSaveMotorPos
|
||||
//
|
||||
btnSaveMotorPos.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSaveMotorPos.Location = new Point(751, 5);
|
||||
btnSaveMotorPos.Name = "btnSaveMotorPos";
|
||||
btnSaveMotorPos.Size = new Size(109, 38);
|
||||
btnSaveMotorPos.TabIndex = 21;
|
||||
btnSaveMotorPos.Text = "保存相机电机位置";
|
||||
btnSaveMotorPos.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptMotorPos
|
||||
//
|
||||
iptMotorPos.Location = new Point(284, 0);
|
||||
iptMotorPos.Name = "iptMotorPos";
|
||||
iptMotorPos.ReadOnly = true;
|
||||
iptMotorPos.Size = new Size(175, 43);
|
||||
iptMotorPos.TabIndex = 20;
|
||||
iptMotorPos.Text = "0";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
label9.BackColor = SystemColors.Window;
|
||||
label9.Location = new Point(203, 10);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(81, 23);
|
||||
label9.TabIndex = 19;
|
||||
label9.Text = "变焦电机位置";
|
||||
//
|
||||
// btnMotorZero
|
||||
//
|
||||
btnMotorZero.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnMotorZero.Location = new Point(465, 5);
|
||||
btnMotorZero.Name = "btnMotorZero";
|
||||
btnMotorZero.Size = new Size(75, 38);
|
||||
btnMotorZero.TabIndex = 18;
|
||||
btnMotorZero.Text = "电机回原点";
|
||||
btnMotorZero.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnMotorReverse
|
||||
//
|
||||
btnMotorReverse.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnMotorReverse.Location = new Point(659, 5);
|
||||
btnMotorReverse.Name = "btnMotorReverse";
|
||||
btnMotorReverse.Size = new Size(75, 38);
|
||||
btnMotorReverse.TabIndex = 17;
|
||||
btnMotorReverse.Text = "电机反转";
|
||||
btnMotorReverse.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnMotorForward
|
||||
//
|
||||
btnMotorForward.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnMotorForward.Location = new Point(563, 5);
|
||||
btnMotorForward.Name = "btnMotorForward";
|
||||
btnMotorForward.Size = new Size(75, 38);
|
||||
btnMotorForward.TabIndex = 16;
|
||||
btnMotorForward.Text = "电机正转";
|
||||
btnMotorForward.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptMotorSpeed
|
||||
//
|
||||
iptMotorSpeed.Location = new Point(90, 0);
|
||||
iptMotorSpeed.Name = "iptMotorSpeed";
|
||||
iptMotorSpeed.Size = new Size(107, 43);
|
||||
iptMotorSpeed.TabIndex = 8;
|
||||
iptMotorSpeed.Text = "0";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
label8.BackColor = SystemColors.Window;
|
||||
label8.Location = new Point(9, 10);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(81, 23);
|
||||
label8.TabIndex = 1;
|
||||
label8.Text = "变焦电机速度";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Controls.Add(btnSaveBarrierPos);
|
||||
panel3.Controls.Add(iptBarrierPos);
|
||||
panel3.Controls.Add(label10);
|
||||
panel3.Controls.Add(btnBarrierZero);
|
||||
panel3.Controls.Add(btnBarrier);
|
||||
panel3.Controls.Add(iptBarrierSpeed);
|
||||
panel3.Controls.Add(label11);
|
||||
panel3.Dock = DockStyle.Top;
|
||||
panel3.Location = new Point(0, 195);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(1210, 46);
|
||||
panel3.TabIndex = 6;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// btnSaveBarrierPos
|
||||
//
|
||||
btnSaveBarrierPos.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnSaveBarrierPos.Location = new Point(681, 5);
|
||||
btnSaveBarrierPos.Name = "btnSaveBarrierPos";
|
||||
btnSaveBarrierPos.Size = new Size(109, 38);
|
||||
btnSaveBarrierPos.TabIndex = 21;
|
||||
btnSaveBarrierPos.Text = "保存挡料电机位置";
|
||||
btnSaveBarrierPos.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptBarrierPos
|
||||
//
|
||||
iptBarrierPos.Location = new Point(284, 0);
|
||||
iptBarrierPos.Name = "iptBarrierPos";
|
||||
iptBarrierPos.Size = new Size(175, 43);
|
||||
iptBarrierPos.TabIndex = 20;
|
||||
iptBarrierPos.Text = "0";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
label10.BackColor = SystemColors.Window;
|
||||
label10.Location = new Point(203, 10);
|
||||
label10.Name = "label10";
|
||||
label10.Size = new Size(81, 23);
|
||||
label10.TabIndex = 19;
|
||||
label10.Text = "挡料电机位置";
|
||||
//
|
||||
// btnBarrierZero
|
||||
//
|
||||
btnBarrierZero.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnBarrierZero.Location = new Point(465, 5);
|
||||
btnBarrierZero.Name = "btnBarrierZero";
|
||||
btnBarrierZero.Size = new Size(75, 38);
|
||||
btnBarrierZero.TabIndex = 18;
|
||||
btnBarrierZero.Text = "电机回原点";
|
||||
btnBarrierZero.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// btnBarrier
|
||||
//
|
||||
btnBarrier.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnBarrier.Location = new Point(563, 5);
|
||||
btnBarrier.Name = "btnBarrier";
|
||||
btnBarrier.Size = new Size(101, 38);
|
||||
btnBarrier.TabIndex = 16;
|
||||
btnBarrier.Text = "挡料电机转动";
|
||||
btnBarrier.Type = AntdUI.TTypeMini.Primary;
|
||||
//
|
||||
// iptBarrierSpeed
|
||||
//
|
||||
iptBarrierSpeed.Location = new Point(90, 0);
|
||||
iptBarrierSpeed.Name = "iptBarrierSpeed";
|
||||
iptBarrierSpeed.Size = new Size(107, 43);
|
||||
iptBarrierSpeed.TabIndex = 8;
|
||||
iptBarrierSpeed.Text = "0";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
label11.BackColor = SystemColors.Window;
|
||||
label11.Location = new Point(9, 10);
|
||||
label11.Name = "label11";
|
||||
label11.Size = new Size(81, 23);
|
||||
label11.TabIndex = 1;
|
||||
label11.Text = "挡料电机速度";
|
||||
//
|
||||
// imageViewerControl1
|
||||
//
|
||||
imageViewerControl1.Dock = DockStyle.Fill;
|
||||
imageViewerControl1.Image = null;
|
||||
imageViewerControl1.Location = new Point(0, 241);
|
||||
imageViewerControl1.Name = "imageViewerControl1";
|
||||
imageViewerControl1.Size = new Size(1210, 464);
|
||||
imageViewerControl1.TabIndex = 7;
|
||||
//
|
||||
// VisualLocalizationWindow
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1210, 705);
|
||||
Controls.Add(imageViewerControl1);
|
||||
Controls.Add(panel3);
|
||||
Controls.Add(panelMotor);
|
||||
Controls.Add(panel2);
|
||||
Controls.Add(panel1);
|
||||
Controls.Add(titlebar);
|
||||
Name = "VisualLocalizationWindow";
|
||||
Text = "CCD光学筛选定位系统";
|
||||
WindowState = FormWindowState.Maximized;
|
||||
panel1.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
panelMotor.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.PageHeader titlebar;
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Select sltCameraName;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Input iptModel;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Input iptBackImg;
|
||||
private AntdUI.Label label3;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Label label4;
|
||||
private AntdUI.Select sltDirection;
|
||||
private AntdUI.InputNumber iptPosition;
|
||||
private AntdUI.Label label5;
|
||||
private AntdUI.Button btnSelectBackImg;
|
||||
private AntdUI.Button btnSelectModel;
|
||||
private AntdUI.Button btnAcquisition;
|
||||
private AntdUI.Button btnLocalization;
|
||||
private AntdUI.Button btnReverse;
|
||||
private AntdUI.Button btnForward;
|
||||
private AntdUI.Button btnSaveImg;
|
||||
private AntdUI.Button btnSavePos;
|
||||
private AntdUI.InputNumber iptThreshold;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.InputNumber iptSpeed;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.Panel panelMotor;
|
||||
private AntdUI.InputNumber iptMotorSpeed;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.Button btnMotorReverse;
|
||||
private AntdUI.Button btnMotorForward;
|
||||
private AntdUI.InputNumber iptMotorPos;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.Button btnMotorZero;
|
||||
private AntdUI.Button btnSaveMotorPos;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Button btnSaveBarrierPos;
|
||||
private AntdUI.InputNumber iptBarrierPos;
|
||||
private AntdUI.Label label10;
|
||||
private AntdUI.Button btnBarrierZero;
|
||||
private AntdUI.Button btnBarrier;
|
||||
private AntdUI.InputNumber iptBarrierSpeed;
|
||||
private AntdUI.Label label11;
|
||||
private ImageViewerControl imageViewerControl1;
|
||||
}
|
||||
}
|
1020
DHSoftware/Views/VisualLocalizationWindow.cs
Normal file
1020
DHSoftware/Views/VisualLocalizationWindow.cs
Normal file
File diff suppressed because it is too large
Load Diff
120
DHSoftware/Views/VisualLocalizationWindow.resx
Normal file
120
DHSoftware/Views/VisualLocalizationWindow.resx
Normal 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>
|
44
DHSoftware/Views/WelcomeWindow.Designer.cs
generated
44
DHSoftware/Views/WelcomeWindow.Designer.cs
generated
@ -34,8 +34,8 @@ namespace DHSoftware.Views
|
||||
panel2 = new AntdUI.Panel();
|
||||
spin1 = new AntdUI.Spin();
|
||||
panel3 = new AntdUI.Panel();
|
||||
progressBar1 = new ProgressBar();
|
||||
label1 = new AntdUI.Label();
|
||||
bar_step = new ProgressBar();
|
||||
lbl_step = new AntdUI.Label();
|
||||
titlebar = new AntdUI.PageHeader();
|
||||
panel1.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
@ -81,8 +81,8 @@ namespace DHSoftware.Views
|
||||
// panel3
|
||||
//
|
||||
panel3.Back = Color.Transparent;
|
||||
panel3.Controls.Add(progressBar1);
|
||||
panel3.Controls.Add(label1);
|
||||
panel3.Controls.Add(bar_step);
|
||||
panel3.Controls.Add(lbl_step);
|
||||
panel3.Dock = DockStyle.Bottom;
|
||||
panel3.Location = new Point(0, 309);
|
||||
panel3.Name = "panel3";
|
||||
@ -91,27 +91,27 @@ namespace DHSoftware.Views
|
||||
panel3.TabIndex = 3;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// progressBar1
|
||||
// bar_step
|
||||
//
|
||||
progressBar1.Dock = DockStyle.Bottom;
|
||||
progressBar1.Location = new Point(0, 54);
|
||||
progressBar1.Name = "progressBar1";
|
||||
progressBar1.Size = new Size(646, 12);
|
||||
progressBar1.TabIndex = 1;
|
||||
bar_step.Dock = DockStyle.Bottom;
|
||||
bar_step.Location = new Point(0, 54);
|
||||
bar_step.Name = "bar_step";
|
||||
bar_step.Size = new Size(646, 12);
|
||||
bar_step.TabIndex = 1;
|
||||
//
|
||||
// label1
|
||||
// lbl_step
|
||||
//
|
||||
label1.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
label1.ForeColor = SystemColors.Window;
|
||||
label1.Location = new Point(24, 15);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(590, 33);
|
||||
label1.TabIndex = 0;
|
||||
label1.Text = "正在初始化...";
|
||||
lbl_step.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
lbl_step.ForeColor = SystemColors.Window;
|
||||
lbl_step.Location = new Point(24, 15);
|
||||
lbl_step.Name = "lbl_step";
|
||||
lbl_step.Size = new Size(590, 33);
|
||||
lbl_step.TabIndex = 0;
|
||||
lbl_step.Text = "正在初始化...";
|
||||
//
|
||||
// titlebar
|
||||
//
|
||||
titlebar.BackColor = SystemColors.MenuHighlight;
|
||||
titlebar.BackColor = Color.FromArgb(46, 108, 227);
|
||||
titlebar.DividerShow = true;
|
||||
titlebar.DividerThickness = 0F;
|
||||
titlebar.Dock = DockStyle.Top;
|
||||
@ -132,7 +132,7 @@ namespace DHSoftware.Views
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
BackColor = SystemColors.MenuHighlight;
|
||||
BackColor = Color.FromArgb(46, 108, 227);
|
||||
ClientSize = new Size(646, 375);
|
||||
ControlBox = false;
|
||||
Controls.Add(panel1);
|
||||
@ -158,7 +158,7 @@ namespace DHSoftware.Views
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Spin spin1;
|
||||
private AntdUI.Label label1;
|
||||
private ProgressBar progressBar1;
|
||||
public AntdUI.Label lbl_step;
|
||||
public ProgressBar bar_step;
|
||||
}
|
||||
}
|
@ -15,9 +15,22 @@ namespace DHSoftware.Views
|
||||
public WelcomeWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
|
||||
|
||||
Control.CheckForIllegalCrossThreadCalls = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗体对象实例
|
||||
/// </summary>
|
||||
private static WelcomeWindow _instance;
|
||||
internal static WelcomeWindow Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
_instance = new WelcomeWindow();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -120,254 +120,7 @@
|
||||
<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>
|
||||
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
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px77vKcf7bym
|
||||
H9i7px+WuqogMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/rumH766px1OuaIjFv//AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+9px/2vacfvbymIGe1nyAYAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/wvKcexbyn
|
||||
Htq7px71vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/a8px/Fu6cgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
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
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAALymIRe7px/DvKcf/7ynH/+8px//vKcf/7ynH/y7pR+Dv4AABAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HF
|
||||
u08AAAAAAAAAAAAAAAAAAAAAAAAAAMyZMwW7px+LvKcf/rynH/+8px//vKcf/7ynH/+8px6ru6oiDwAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/QMS7/0DEvOdAxLvcQMS73EDEu9xAxLvcQMS73EDEu9x0uHrruKkk/rynH/+8px//vKcf/7yn
|
||||
H/+lrTz2TcGp30DEu9xAxLvcQMS73EDEu9xAxLvcQMS73EDEut9AxLv2QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9ivI//s6kr/7yn
|
||||
H/+8px//vKcf/7ynH/+rqzT/T8Co/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9cvZj/sKot/7ynH/+8px//vKcf/7ynH/+xqi7/UcCm/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9bvZj/sKou/7ynH/+8px//vKcf/7ynH/+xqi3/UcCl/0DEu/9AxLv/QMS7/0DE
|
||||
u/9AxLv/QMS7/0DEu/9AxLv/QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/z/E
|
||||
u7E/w7qNP8O6jT/Duo0/w7qNP8O6jT/Duo1wuH2wtqgm+LynH/+8px//vKcf/7ynH/+0qSntWb6cmj/D
|
||||
uo0/w7qNP8O6jT/Duo0/w7qNP8O6jT/Eu5Y/xLvhQMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/QMS7/0HEvlIzzMwFM8zMBTPMzAUzzMwFM8zMBTPMzAW4qCRku6cf9bynH/+8px//vKcf/7yn
|
||||
H/+8pyDKp6c1HTPMzAUzzMwFM8zMBTPMzAUzzMwFM8zMBUDKvxhAxbu8QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAAAAAAAAAAAAAAAL+/AAS7ph6HvKcf/ryn
|
||||
H/+8px//vKcf/7ynH/+9px+tu6oiDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAAAAAAAAAAAAAAAMKq
|
||||
JBW8px+/vKcf/7ynH/+8px//vKcf/7umH/28px+Fv78ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAALqmID+8px/2vKcf/7ynH/+8px//vKcf/7ynH/C8px5UAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HF
|
||||
u08AAAAAAAAAAAAAAAAAAAAAtpIkB7unHrm8px//vKcf/7ynH/+8px//vKcf/7yoH9i/pBscAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/QMS7/0HFu08AAAAAAAAAAAAAAACAgAACu6ggabynH/28px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H4UAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAAAAAAC9px86vKcf4LynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf6LyuGxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAAAAAAL2lIR+9pyC6vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px/5vKgeZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HFu08AAAAAv6cgILyn
|
||||
HrC7px/9vKcf/7ynH/+8px//vKcf/7ynH/68ph6yvKEbEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDEu/9AxLv/QMS7/0HF
|
||||
u0+5qB0su6cfx7ynH/68px//vKcf/7ynH/+8px//vKcf/7ynH+a6qR47//8AAQAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+w7t4QMS7/EDE
|
||||
u/9AxLv/RMO2/3y0cIi8ph/VvKcf/7ynH/+8px//vKcf/7ynH/+8px//vKce87ymHl8AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAE+w7t4QMS7/EHEuv9Tv6P/g7Rm/7apKPq8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/svagebf//
|
||||
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAE+w7t4Q8O3/HW3eP+pqzf/uqch/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7um
|
||||
H/S7piBwtrYkBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAv58gCL2lIR+PsViWqas3/bynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+9qB/+vagf6rymHWqAgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px/NuqcdGgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAqqoAA76qISe7px9avKcflLynHtS8px77vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/y9px/EvKYgSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px/NuqcdGgAAAAD/gAACwqoYFbqoHUa9pR+DvaYewbyoH+G9qB/yvKcf/rynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/rumH5q7qiIegIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H/+8px//vKcf/7ynH/+7px/tu6gftbunH8i9px/nu6cf/bynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7yoH/i8px/OvqcdTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/6vKgfx7ymH3K7qhoeAAAAAQAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/
|
||||
vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px//vKgf/ryoH828pR9buqcdGv+AAAIAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px/8vKgf8LynH927px+muaYfQv//AAEAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837ynH/+8px//vKcf/7yn
|
||||
H/+8px//vKcf/7ynH/+8px//vKcf/7ynH/+8px70u6cf1rymH6+9px+DvKceVL+nICD/gAACAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DEu/9AxLv/QMS837yn
|
||||
H+y8px/3u6Yf+bymH++8px7kvacf172nH8C8px6jvqcffb2qH1G3piEuuacaHb+fIBC/vwAEAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC/vxQ/w7u7QMS7/0DE
|
||||
u/9AxLv/QMS83wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
@ -376,7 +129,159 @@
|
||||
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
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpLAAA8KwAAuqYXAIx5
|
||||
DAClkRAApZUSAJKFDQAAAAAAbVgHAEw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA/////AD/
|
||||
AAD8B//4AH8AAPwB//gAPwAA/AB/8AA/AAD8AH/wAD8AAPwAP/AAPwAA/AAf8AA/AAD8AB/wAD8AAPwA
|
||||
D/AAPwAA/AAP8AA/AAD8AA/wAD8AAPwAD/AAPwAA/AAP8AA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/
|
||||
AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA
|
||||
AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAD+AA/AAD8AAf4AD8AAPwAB/gAPwAA/AAP+AA/
|
||||
AAD8AA/4AD8AAPwAD/gAPwAA/AAP+AA/AAD8AA/8AD8AAPwAD/4APwAA/AAP/4A/AAD+AA//8D8AAP4A
|
||||
H////wAA/wA/////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////
|
||||
AAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
44
DHSoftware/Views/MotionControl.Designer.cs
generated
44
DHSoftware/Views/MotionControl.Designer.cs
generated
@ -1,44 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class _MotionControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false </param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
SuspendLayout();
|
||||
//
|
||||
// _MotionControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Name = "_MotionControl";
|
||||
Size = new Size(782, 481);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
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;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class _MotionControl : UserControl
|
||||
{
|
||||
public _MotionControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user