删除移动与增加

This commit is contained in:
liyaobang 2025-03-28 10:16:28 +08:00
parent b19feb5a44
commit 073d8fff6c
84 changed files with 393 additions and 3497 deletions

View File

@ -12,6 +12,7 @@
<OutputType>WinExe</OutputType>
</PropertyGroup>

View File

@ -1,162 +0,0 @@
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;
}
}

View File

@ -1,48 +0,0 @@

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();
}
}
}

View File

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

View File

@ -1,150 +0,0 @@
namespace DHSoftware.Views
{
partial class CamConfigFrm
{
/// <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();
tabs1 = new AntdUI.Tabs();
tabPage1 = new AntdUI.TabPage();
label1 = new Label();
btnRefreshCamList = new Button();
dgvCams = new DataGridView();
CamName = new DataGridViewTextBoxColumn();
Serinum = new DataGridViewTextBoxColumn();
IP = new DataGridViewTextBoxColumn();
COMBO_DEVICES = new ComboBox();
tabs1.SuspendLayout();
tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dgvCams).BeginInit();
SuspendLayout();
//
// tabs1
//
tabs1.Controls.Add(tabPage1);
tabs1.Dock = DockStyle.Fill;
tabs1.Location = new Point(0, 0);
tabs1.Name = "tabs1";
tabs1.Pages.Add(tabPage1);
tabs1.Size = new Size(489, 563);
tabs1.Style = styleLine1;
tabs1.TabIndex = 0;
tabs1.Text = "tabs1";
//
// tabPage1
//
tabPage1.Controls.Add(label1);
tabPage1.Controls.Add(btnRefreshCamList);
tabPage1.Controls.Add(dgvCams);
tabPage1.Controls.Add(COMBO_DEVICES);
tabPage1.Location = new Point(3, 28);
tabPage1.Name = "tabPage1";
tabPage1.Size = new Size(483, 532);
tabPage1.TabIndex = 0;
tabPage1.Text = "相机配置";
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(38, 15);
label1.Name = "label1";
label1.Size = new Size(56, 17);
label1.TabIndex = 3;
label1.Text = "相机类型";
//
// btnRefreshCamList
//
btnRefreshCamList.Location = new Point(36, 43);
btnRefreshCamList.Name = "btnRefreshCamList";
btnRefreshCamList.Size = new Size(423, 33);
btnRefreshCamList.TabIndex = 2;
btnRefreshCamList.Text = "刷新相机列表";
btnRefreshCamList.UseVisualStyleBackColor = true;
btnRefreshCamList.Click += btnRefreshCamList_Click;
//
// dgvCams
//
dgvCams.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dgvCams.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgvCams.Columns.AddRange(new DataGridViewColumn[] { CamName, Serinum, IP });
dgvCams.Location = new Point(38, 82);
dgvCams.Name = "dgvCams";
dgvCams.Size = new Size(421, 206);
dgvCams.TabIndex = 1;
//
// CamName
//
CamName.HeaderText = "相机名";
CamName.Name = "CamName";
//
// Serinum
//
Serinum.HeaderText = "序列号";
Serinum.Name = "Serinum";
//
// IP
//
IP.HeaderText = "相机IP";
IP.Name = "IP";
//
// COMBO_DEVICES
//
COMBO_DEVICES.DropDownStyle = ComboBoxStyle.DropDownList;
COMBO_DEVICES.FormattingEnabled = true;
COMBO_DEVICES.Location = new Point(100, 12);
COMBO_DEVICES.Name = "COMBO_DEVICES";
COMBO_DEVICES.Size = new Size(359, 25);
COMBO_DEVICES.TabIndex = 0;
//
// CamConfigFrm
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(tabs1);
Name = "CamConfigFrm";
Size = new Size(489, 563);
tabs1.ResumeLayout(false);
tabPage1.ResumeLayout(false);
tabPage1.PerformLayout();
((System.ComponentModel.ISupportInitialize)dgvCams).EndInit();
ResumeLayout(false);
}
#endregion
private AntdUI.Tabs tabs1;
private AntdUI.TabPage tabPage1;
private ComboBox COMBO_DEVICES;
private Button btnRefreshCamList;
private DataGridView dgvCams;
private Label label1;
private DataGridViewTextBoxColumn CamName;
private DataGridViewTextBoxColumn Serinum;
private DataGridViewTextBoxColumn IP;
}
}

View File

@ -1,178 +0,0 @@
using DH.Commons.Base;
using DH.Commons.Enums;
using DVPCameraType;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace DHSoftware.Views
{
public partial class CamConfigFrm : UserControl
{
public int m_n_dev_count = 0;
public static int m_CamCount = 0;
public static dvpCameraInfo[] m_info = new dvpCameraInfo[16];
// 在窗体类中声明一个绑定列表(用于动态更新)
private BindingList<CameraBase> _cameraList = new BindingList<CameraBase>();
public CamConfigFrm()
{
InitializeComponent();
// 添加 ComboBox 的项
COMBO_DEVICES.Items.AddRange(new string[] { " 度申Do3", "海康Hik", "巴斯勒Basler", "虚拟相机" });
// 绑定 SelectedIndexChanged 事件
COMBO_DEVICES.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
dgvCams.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dgvCams.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgvCams.DataSource = _cameraList; // 绑定数据源
dgvCams.Location = new Point(38, 82);
dgvCams.Name = "dgvCams";
dgvCams.Size = new Size(284, 206);
dgvCams.TabIndex = 1;
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (COMBO_DEVICES.SelectedItem == null) return;
string selectedMethod = COMBO_DEVICES.SelectedItem.ToString();
switch (selectedMethod)
{
case "度申Do3":
Do3Think();
break;
case "海康Hik":
HiK();
break;
case "巴斯勒Basler":
Basler();
break;
case "虚拟相机":
Virtul();
break;
default:
MessageBox.Show("未找到对应方法");
break;
}
}
// 其他方法定义...
private void Do3Think()
{
InitDevList();
}
private void HiK()
{
}
private void Basler()
{
}
private void Virtul()
{
}
private void btnRefreshCamList_Click(object sender, EventArgs e)
{
//搜索度申相机
InitDevList();
}
/// <summary>
/// 搜索度申相机
/// </summary>
// Initialize the device list.
public void InitDevList()
{
dvpStatus status;
uint i, n = 0;
dvpCameraInfo dev_info = new dvpCameraInfo();
// 清空旧数据
_cameraList.Clear();
// Get the number of cameras that has been connected to a computer.
status = DVPCamera.dvpRefresh(ref n);
Debug.Assert(status == dvpStatus.DVP_STATUS_OK);
m_n_dev_count = (int)n;
if (status == dvpStatus.DVP_STATUS_OK)
{
m_CamCount = 0;
for (i = 0; i < n; i++)
{
// Acquire each camera's information one by one.
status = DVPCamera.dvpEnum(i, ref dev_info);
if (status == dvpStatus.DVP_STATUS_OK)
{
m_info[m_CamCount] = dev_info;
int item = -1;
//if (!UserDefinedName.Checked)
{
// add FriendlyName
item = COMBO_DEVICES.Items.Add(dev_info.FriendlyName);
CameraBase info = new CameraBase
{
CameraName = dev_info.FriendlyName,
SerialNumber = dev_info.SerialNumber,
// IP = dev_info.IP
};
_cameraList.Add(info);
}
//else
//{
// // add User Define Name
// item = COMBO_DEVICES.Items.Add(dev_info.UserID);
//}
m_CamCount++;
}
else
{
Debug.Assert(status == dvpStatus.DVP_STATUS_OK);
}
}
}
if (n == 0)
{
}
else
{
}
}
private void btnsubmit_Click(object sender, EventArgs e)
{
}
}
}

View File

@ -1,129 +0,0 @@
<?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="CamName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Serinum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="IP.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@ -1,200 +0,0 @@
namespace DHSoftware.Views
{
partial class CameraConfigControl
{
/// <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()
{
label1 = new AntdUI.Label();
cbxCamName = new ComboBox();
switchCamEnable = new AntdUI.Switch();
label2 = new AntdUI.Label();
numExpose = new AntdUI.InputNumber();
numGain = new AntdUI.InputNumber();
label3 = new AntdUI.Label();
numRotate = new AntdUI.InputNumber();
label4 = new AntdUI.Label();
label5 = new AntdUI.Label();
label6 = new AntdUI.Label();
switchSaveCamPic = new AntdUI.Switch();
panel1 = new Panel();
panel1.SuspendLayout();
SuspendLayout();
//
// label1
//
label1.Location = new Point(15, 14);
label1.Name = "label1";
label1.Size = new Size(58, 23);
label1.TabIndex = 0;
label1.Text = "相机名";
//
// cbxCamName
//
cbxCamName.DropDownStyle = ComboBoxStyle.DropDownList;
cbxCamName.FormattingEnabled = true;
cbxCamName.Location = new Point(79, 12);
cbxCamName.Name = "cbxCamName";
cbxCamName.Size = new Size(165, 25);
cbxCamName.TabIndex = 1;
//
// switchCamEnable
//
switchCamEnable.Location = new Point(330, 12);
switchCamEnable.Name = "switchCamEnable";
switchCamEnable.Size = new Size(57, 23);
switchCamEnable.TabIndex = 2;
switchCamEnable.Text = "switch1";
//
// label2
//
label2.Location = new Point(15, 43);
label2.Name = "label2";
label2.Size = new Size(58, 38);
label2.TabIndex = 3;
label2.Text = "曝光时间";
//
// numExpose
//
numExpose.Location = new Point(79, 43);
numExpose.Maximum = new decimal(new int[] { 10000000, 0, 0, 0 });
numExpose.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
numExpose.Name = "numExpose";
numExpose.Size = new Size(165, 38);
numExpose.TabIndex = 4;
numExpose.Text = "1";
numExpose.Value = new decimal(new int[] { 1, 0, 0, 0 });
//
// numGain
//
numGain.Location = new Point(79, 87);
numGain.Maximum = new decimal(new int[] { 16, 0, 0, 0 });
numGain.Minimum = new decimal(new int[] { 0, 0, 0, 0 });
numGain.Name = "numGain";
numGain.Size = new Size(165, 38);
numGain.TabIndex = 6;
numGain.Text = "0";
//
// label3
//
label3.Location = new Point(15, 87);
label3.Name = "label3";
label3.Size = new Size(58, 38);
label3.TabIndex = 5;
label3.Text = "增益";
//
// numRotate
//
numRotate.Increment = new decimal(new int[] { 90, 0, 0, 0 });
numRotate.Location = new Point(79, 131);
numRotate.Maximum = new decimal(new int[] { 360, 0, 0, 0 });
numRotate.Minimum = new decimal(new int[] { 0, 0, 0, 0 });
numRotate.Name = "numRotate";
numRotate.Size = new Size(165, 38);
numRotate.TabIndex = 8;
numRotate.Text = "0";
//
// label4
//
label4.Location = new Point(15, 131);
label4.Name = "label4";
label4.Size = new Size(58, 38);
label4.TabIndex = 7;
label4.Text = "旋转";
//
// label5
//
label5.Location = new Point(266, 5);
label5.Name = "label5";
label5.Size = new Size(58, 36);
label5.TabIndex = 9;
label5.Text = "相机启用";
//
// label6
//
label6.Location = new Point(266, 47);
label6.Name = "label6";
label6.Size = new Size(58, 36);
label6.TabIndex = 11;
label6.Text = "保存原图";
//
// switchSaveCamPic
//
switchSaveCamPic.Location = new Point(330, 54);
switchSaveCamPic.Name = "switchSaveCamPic";
switchSaveCamPic.Size = new Size(57, 23);
switchSaveCamPic.TabIndex = 10;
switchSaveCamPic.Text = "switch2";
//
// panel1
//
panel1.BorderStyle = BorderStyle.FixedSingle;
panel1.Controls.Add(cbxCamName);
panel1.Controls.Add(label6);
panel1.Controls.Add(label1);
panel1.Controls.Add(switchSaveCamPic);
panel1.Controls.Add(switchCamEnable);
panel1.Controls.Add(label5);
panel1.Controls.Add(label2);
panel1.Controls.Add(numRotate);
panel1.Controls.Add(numExpose);
panel1.Controls.Add(label4);
panel1.Controls.Add(label3);
panel1.Controls.Add(numGain);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Size = new Size(620, 201);
panel1.TabIndex = 12;
//
// CameraConfigControl
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
Controls.Add(panel1);
Name = "CameraConfigControl";
Size = new Size(620, 201);
panel1.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private AntdUI.Label label1;
private ComboBox cbxCamName;
private AntdUI.Switch switchCamEnable;
private AntdUI.Label label2;
private AntdUI.InputNumber numExpose;
private AntdUI.InputNumber numGain;
private AntdUI.Label label3;
private AntdUI.InputNumber numRotate;
private AntdUI.Label label4;
private AntdUI.Label label5;
private AntdUI.Label label6;
private AntdUI.Switch switchSaveCamPic;
private Panel panel1;
}
}

View File

@ -1,127 +0,0 @@
using AntdUI;
using DH.Commons.Base;
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 CameraConfigControl : UserControl
{
public CameraConfigControl()
{
InitializeComponent();
// InitTableColumns();
InitData();
}
AntList<CameraBase> antList = null;
CameraBase curUser;
//private void InitTableColumns()
//{
// table_base.Columns = new ColumnCollection() {
// new ColumnCheck("Selected"){Fixed = true},
// new Column("CameraName", "相机名", ColumnAlign.Center)
// {
// Width="120",
// //设置树节点名称需和User里的User[]名称保持一致
// KeyTree = "Users"
// },
// new Column("CameraIP", "相机IP",ColumnAlign.Center),
// new Column("Gain", "增益"){
// Width = "120",
// LineBreak = true,
// },
// new ColumnSwitch("IsHardwareTrigger", "硬触发", ColumnAlign.Center){
// },
// new Column("RotateImage", "旋转",ColumnAlign.Center),
// new Column("Exposure", "曝光",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<CameraBase>();
for (int i = 0; i < 10; i++)
{
antList.Add(new CameraBase
{
CameraName = "相机1",
CameraIP = "",
Gain = 6,
IsHardwareTrigger = true,
RotateImage = 50,
Exposure = 100,
//CellLinks = new CellLink[] {new CellLink("https://gitee.com/antdui/AntdUI", "AntdUI"),
//new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
//new CellButton(Guid.NewGuid().ToString(), "徽标", TTypeMini.Success)
//{
// //支持所有单元格控件
// DropDownItems = new ISelectItem[]
// {
// new AntdUI.SelectItem(TState.Default),
// new AntdUI.SelectItem(TState.Primary),
// new AntdUI.SelectItem(TState.Success),
// new AntdUI.SelectItem(TState.Error),
// new AntdUI.SelectItem(TState.Warn),
// new AntdUI.SelectItem(TState.Processing),
// },
// DropDownValueChanged = (value) =>
// {
// string badge = value.ToString();
// //switch(badge) {
// //case "Default":
// // curUser.CellBadge = new CellBadge(TState.Default, badge); break;
// //case "Primary":
// // curUser.CellBadge = new CellBadge(TState.Primary, badge); break;
// //case "Success":
// // curUser.CellBadge = new CellBadge(TState.Success, badge); break;
// //case "Error":
// // curUser.CellBadge = new CellBadge(TState.Error, badge); break;
// //case "Warn":
// // curUser.CellBadge = new CellBadge(TState.Warn, badge); break;
// //case "Processing":
// // curUser.CellBadge = new CellBadge(TState.Processing, badge); break;
// //}
// }
//},
//new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
//new CellButton(Guid.NewGuid().ToString(),"查看图片",TTypeMini.Primary)},
//value:0-1
// CellProgress = new CellProgress(0.5f),
// CellDivider = new CellDivider(),
});
}
//设置树数据,可为任意行设置
// antList[1].Users = subUsers.ToArray();
// table_base.Binding(antList);
//设置行禁用
// table_base.SetRowEnable(0, false, true);
}
}
}

View File

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

View File

@ -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;
}
}

View File

@ -1,403 +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;
using DH.Commons.Base;
namespace DHSoftware.Views
{
public partial class DetectConfigControl : UserControl
{
private DetectionConfig _currentConfig = new DetectionConfig();
private readonly string _configName;
List<KeyValuePair<string, int>> MLModelTypes = GetFilteredEnumDescriptionsAndValues<ModelType>();
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;
}
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("删除成功!");
}
}
}
}

View File

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

View File

@ -51,6 +51,7 @@
lblNum = new Label();
label2 = new Label();
pageHeader1 = new AntdUI.PageHeader();
lbInBackend = new AntdUI.Label();
labuph = new Label();
divider2 = new AntdUI.Divider();
tabMain = new AntdUI.TabPage();
@ -237,6 +238,7 @@
//
// pageHeader1
//
pageHeader1.Controls.Add(lbInBackend);
pageHeader1.Controls.Add(labuph);
pageHeader1.Controls.Add(divider2);
pageHeader1.DividerShow = true;
@ -248,6 +250,17 @@
pageHeader1.TabIndex = 7;
pageHeader1.Text = "UPH";
//
// lbInBackend
//
lbInBackend.BackColor = Color.Transparent;
lbInBackend.Dock = DockStyle.Right;
lbInBackend.ForeColor = Color.FromArgb(46, 108, 227);
lbInBackend.Location = new Point(949, 10);
lbInBackend.Name = "lbInBackend";
lbInBackend.Size = new Size(75, 30);
lbInBackend.TabIndex = 2;
lbInBackend.Text = "系统后台";
//
// labuph
//
labuph.AutoSize = true;
@ -635,5 +648,6 @@
private Label label10;
private Label lblstarttime2;
private Label label7;
private AntdUI.Label lbInBackend;
}
}

View File

@ -367,6 +367,12 @@ namespace DHSoftware
btnAddProject.Click += BtnAddProject_Click;
btnDeleteProject.Click += BtnDeleteProject_Click;
btnLoadProject.Click += BtnLoadProject_Click;
lbInBackend.Click += LbInBackend_Click;
}
private void LbInBackend_Click(object? sender, EventArgs e)
{
RBACWindow.Instance.Show();
}
private void BtnDeleteProject_Click(object? sender, EventArgs e)

View File

@ -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;
}
}

View File

@ -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)
{
}
}
}

159
DHSoftware/Views/RBACWindow.Designer.cs generated Normal file
View File

@ -0,0 +1,159 @@
namespace DHSoftware
{
partial class RBACWindow
{
/// <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.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
AntdUI.MenuItem menuItem1 = new AntdUI.MenuItem();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RBACWindow));
AntdUI.MenuItem menuItem2 = new AntdUI.MenuItem();
AntdUI.MenuItem menuItem3 = new AntdUI.MenuItem();
AntdUI.MenuItem menuItem4 = new AntdUI.MenuItem();
titlebar = new AntdUI.PageHeader();
lbName = new AntdUI.Label();
panel1 = new AntdUI.Panel();
tabs1 = new AntdUI.Tabs();
divider1 = new AntdUI.Divider();
menu1 = new AntdUI.Menu();
titlebar.SuspendLayout();
panel1.SuspendLayout();
SuspendLayout();
//
// titlebar
//
titlebar.BackColor = Color.FromArgb(46, 108, 227);
titlebar.Controls.Add(lbName);
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(904, 40);
titlebar.SubText = "CCD光学筛选系统后台";
titlebar.TabIndex = 1;
titlebar.Text = "山东迭慧智能科技有限公司";
//
// lbName
//
lbName.Dock = DockStyle.Right;
lbName.ForeColor = SystemColors.Window;
lbName.Location = new Point(626, 0);
lbName.Name = "lbName";
lbName.Size = new Size(134, 40);
lbName.TabIndex = 0;
lbName.Text = "";
lbName.TextAlign = ContentAlignment.MiddleRight;
//
// panel1
//
panel1.Controls.Add(tabs1);
panel1.Controls.Add(divider1);
panel1.Controls.Add(menu1);
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 40);
panel1.Name = "panel1";
panel1.Size = new Size(904, 476);
panel1.TabIndex = 2;
panel1.Text = "panel1";
//
// tabs1
//
tabs1.BackColor = SystemColors.Window;
tabs1.Dock = DockStyle.Fill;
tabs1.Location = new Point(200, 0);
tabs1.Name = "tabs1";
tabs1.Size = new Size(704, 476);
tabs1.Style = styleLine1;
tabs1.TabIndex = 7;
tabs1.Text = "tabs1";
//
// divider1
//
divider1.BackColor = SystemColors.Window;
divider1.Dock = DockStyle.Left;
divider1.Location = new Point(190, 0);
divider1.Name = "divider1";
divider1.OrientationMargin = 0F;
divider1.Size = new Size(10, 476);
divider1.TabIndex = 6;
divider1.Text = "";
divider1.Vertical = true;
//
// menu1
//
menu1.BackColor = SystemColors.Window;
menu1.Dock = DockStyle.Left;
menuItem1.IconSvg = resources.GetString("menuItem1.IconSvg");
menuItem2.IconSvg = resources.GetString("menuItem2.IconSvg");
menuItem2.Text = "用户管理";
menuItem3.IconSvg = resources.GetString("menuItem3.IconSvg");
menuItem3.Text = "角色管理";
menuItem4.IconSvg = resources.GetString("menuItem4.IconSvg");
menuItem4.Text = "权限管理";
menuItem1.Sub.Add(menuItem2);
menuItem1.Sub.Add(menuItem3);
menuItem1.Sub.Add(menuItem4);
menuItem1.Text = "系统后台";
menu1.Items.Add(menuItem1);
menu1.Location = new Point(0, 0);
menu1.Name = "menu1";
menu1.Size = new Size(190, 476);
menu1.TabIndex = 0;
menu1.Text = "menu1";
//
// RBACWindow
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(904, 516);
Controls.Add(panel1);
Controls.Add(titlebar);
Name = "RBACWindow";
StartPosition = FormStartPosition.CenterScreen;
Text = "RBACWindows";
WindowState = FormWindowState.Maximized;
titlebar.ResumeLayout(false);
panel1.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private AntdUI.PageHeader titlebar;
private AntdUI.Label lbName;
private AntdUI.Panel panel1;
private AntdUI.Tabs tabs1;
private AntdUI.Divider divider1;
private AntdUI.Menu menu1;
}
}

View File

@ -0,0 +1,200 @@
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;
using DH.Commons.Base;
using DH.Commons.Models;
using DHSoftware.Views;
namespace DHSoftware
{
public partial class RBACWindow : Window
{
public RBACWindow()
{
InitializeComponent();
menu1.SelectChanged += Menu1_SelectChanged;
}
/// <summary>
/// 窗体对象实例
/// </summary>
private static RBACWindow _instance;
internal static RBACWindow Instance
{
get
{
if (_instance == null || _instance.IsDisposed)
_instance = new RBACWindow();
return _instance;
}
}
private void Menu1_SelectChanged(object sender, MenuSelectEventArgs e)
{
MenuItem clickedItem = e.Value;
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}")
{
tabs1.SelectedTab = existingTab;
return;
}
}
CameraBase? CameraBase = ConfigModel.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);
tabs1.SelectedTab = tabPage;
}
break;
case "角色管理":
// 检查是否已存在同名 TabPage
foreach (var tab in tabs1.Pages)
{
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
{
tabs1.SelectedTab = existingTab;
return;
}
}
DetectionConfig? detectionConfig = ConfigModel.DetectionList.Where(c => c.Name == clickedItem.Text).FirstOrDefault();
if (detectionConfig == null)
{
detectionConfig = new DetectionConfig();
}
UserControl control1 = null;
control1 = new DetectControl(this, detectionConfig);
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);
tabs1.SelectedTab = tabPage;
}
break;
case "权限管理":
foreach (var tab in tabs1.Pages)
{
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
{
tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
return;
}
}
//先获取是否存在该名称的配置
//如果没有新建项
PLCBase? pLCBase = ConfigModel.PLCBaseList.Where(c => c.PLCName == clickedItem.Text).FirstOrDefault();
if (pLCBase == null)
{
pLCBase = new PLCBase();
}
UserControl control2 = null;
control = new MotionControl(this, pLCBase);
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);
tabs1.SelectedTab = tabPage;
}
break;
case "其他设置":
foreach (var tab in tabs1.Pages)
{
if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
{
tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
return;
}
}
if (clickedItem.Text == "全局设置")
{
//先获取是否存在该名称的配置
//如果没有新建项
GlobalConfig? global = ConfigModel
.GlobalList.FirstOrDefault();
if (global == null)
{
global = new GlobalConfig();
}
UserControl control3 = null;
control = new GlobalControl(this, global);
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);
tabs1.SelectedTab = tabPage;
}
}
break;
}
}
}
}
}

View File

@ -117,4 +117,16 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="menuItem1.IconSvg" xml:space="preserve">
<value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"&gt;&lt;path d="M490.4 491.7h-195.8c-108 0-195.8-87.8-195.8-195.8 0-108 87.8-195.8 195.8-195.8s195.8 87.8 195.8 195.8v195.8zm-195.8-337.1c-77.9 0-141.3 63.4-141.3 141.3s63.4 141.3 141.3 141.3h141.3v-141.3c0-77.9-63.4-141.3-141.3-141.3zm434.6 337.1h-195.8v-195.8c0-108 87.8-195.8 195.8-195.8s195.8 87.8 195.8 195.8c0 108-87.8 195.8-195.8 195.8zm-141.3-54.5h141.3c77.9 0 141.3-63.4 141.3-141.3S807.3 200 729.4 200 588.1 263.4 588.1 341.3v141.3zM294.6 923.9c-108 0-195.8-87.8-195.8-195.8s87.8-195.8 195.8-195.8h195.8v195.8c0 108-87.8 195.8-195.8 195.8zm0-337.1c-77.9 0-141.3 63.4-141.3 141.3s63.4 141.3 141.3 141.3S435.9 806 435.9 728.1V586.8H294.6zm434.8 337.1c-108 0-195.8-87.8-195.8-195.8V532.3h195.8c108 0 195.8 87.8 195.8 195.8s-87.8 195.8-195.8 195.8zM588.1 586.8v141.3c0 77.9 63.4 141.3 141.3 141.3S870.7 806 870.7 728.1 807.3 586.8 729.4 586.8H588.1z"/&gt;&lt;/svg&gt;</value>
</data>
<data name="menuItem2.IconSvg" xml:space="preserve">
<value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#333333"&gt;&lt;path d="M665.4 532.8c-20.9-10.8-42.9-19.6-65.8-26.4 85.1-44.7 139.5-140 122.7-246C706.1 158 620.8 77 517.8 65.5 376.1 49.6 256 160 256 298.7c0 90.3 51.1 168.6 126 207.9-159.1 46.9-275.3 193.9-275.3 368.1 0 23.3 2.3 46 6.3 68.2 1.8 10 10.8 17.1 21 17.1h0.1c13.3 0 23.3-12 20.9-25.1-10.8-58-7.4-120.9 21.1-187.2 50.3-117 158.4-202.2 285.3-213.1 70.5-6.1 136.6 10.1 193.3 41.4 23.7 0 31.9-32.3 10.7-43.2zM458.1 488c-79.5-13-143.6-77-156.7-156.7C279.7 200 392 87.7 523.2 109.4c79.5 13 143.6 77 156.7 156.7 21.8 131-90.6 243-221.8 221.9zM640 704h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.7 9.5 21.3 21.3 21.3zm0 106.7h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.7 9.5 21.3 21.3 21.3zm0 106.6h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.8 9.5 21.3 21.3 21.3z"/&gt;&lt;/svg&gt;</value>
</data>
<data name="menuItem3.IconSvg" xml:space="preserve">
<value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#000"&gt;&lt;path d="M844.5 682.7H554.7c-11.7 0-21.3 9.6-21.3 21.3 0 11.7 9.6 21.3 21.3 21.3H896c2.8 0 5.6-0.6 8.2-1.7 0.5-0.2 0.9-0.7 1.4-0.9 1.9-1 3.8-2 5.4-3.6 1.6-1.6 2.6-3.5 3.6-5.4 0.3-0.5 0.7-0.9 0.9-1.4 1.1-2.6 1.7-5.4 1.7-8.2 0-0.2-0.1-0.3-0.1-0.5-0.1-2.6-0.5-5.2-1.6-7.7-0.6-1.5-1.7-2.7-2.7-4-0.7-0.9-1.1-2-1.9-2.9L805.5 583.3c-8.3-8.3-21.9-8.3-30.2 0s-8.3 21.9 0 30.2l69.2 69.2zm-99.3-410.8C733.3 164.6 646.1 77.3 538.7 65.5 397.1 49.9 277.3 160.3 277.3 298.7c0 90 50.7 168 125 207.4C231.9 553.9 106.7 710.2 106.7 896c0 15.5 1.1 30.7 2.9 45.7 1.3 10.5 10.5 18.3 21.1 18.3 12.5 0 22.6-10.8 21.1-23.3-1.6-13.4-2.5-26.9-2.5-40.7 0-200.3 162.4-362.7 362.7-362.7 138.4 0 248.8-119.8 233.2-261.4zM479.5 488c-79.6-13.1-143.8-77.2-156.8-156.8-21.6-131.4 90.4-243.4 221.8-221.8 79.6 13.1 143.8 77.2 156.8 156.8 21.6 131.3-90.4 243.4-221.8 221.8zm416.5 323.8H554.7c-2.8 0-5.6 0.6-8.2 1.7-0.5 0.2-0.9 0.7-1.4 0.9-1.9 1-3.8 2-5.4 3.6-1.6 1.6-2.6 3.5-3.6 5.5-0.3 0.5-0.7 0.9-0.9 1.4-1.1 2.6-1.7 5.4-1.7 8.2 0 0.2 0.1 0.3 0.1 0.5 0.1 2.6 0.5 5.2 1.6 7.6 0.6 1.5 1.7 2.7 2.7 4 0.7 0.9 1.1 2 1.9 2.9l105.6 105.6c8.3 8.3 21.9 8.3 30.2 0s8.3-21.9 0-30.2l-69.2-69.1H896c11.7 0 21.3-9.6 21.3-21.3s-9.6-21.3-21.3-21.3z"/&gt;&lt;/svg&gt;</value>
</data>
<data name="menuItem4.IconSvg" xml:space="preserve">
<value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#333333"&gt;&lt;path d="M665.4 532.8c-20.9-10.8-42.9-19.6-65.8-26.4 85.1-44.7 139.5-140 122.7-246C706.1 158 620.8 77 517.8 65.5 376.1 49.6 256 160 256 298.7c0 90.3 51.1 168.6 126 207.9-159.1 46.9-275.3 193.9-275.3 368.1 0 23.3 2.3 46 6.3 68.2 1.8 10 10.8 17.1 21 17.1h0.1c13.3 0 23.3-12 20.9-25.1-10.8-58-7.4-120.9 21.1-187.2 50.3-117 158.4-202.2 285.3-213.1 70.5-6.1 136.6 10.1 193.3 41.4 23.7 0 31.9-32.3 10.7-43.2zM458.1 488c-79.5-13-143.6-77-156.7-156.7C279.7 200 392 87.7 523.2 109.4c79.5 13 143.6 77 156.7 156.7 21.8 131-90.6 243-221.8 221.9zM896 768h-42.7v-42.7c0-58.9-47.8-106.7-106.7-106.7S640 666.4 640 725.3V768h-42.7c-11.8 0-21.3 9.6-21.3 21.3v149.3c0 11.8 9.6 21.3 21.3 21.3H896c11.8 0 21.3-9.6 21.3-21.3V789.3c0-11.7-9.5-21.3-21.3-21.3zm-213.3-42.7c0-35.3 28.7-64 64-64s64 28.7 64 64V768h-128v-42.7zm192 192h-256V810.7h256v106.6z"/&gt;&lt;/svg&gt;</value>
</data>
</root>

View File

@ -8,7 +8,7 @@ namespace AntdUIDemo.Views.Table
{
public partial class DefectRowEdit : UserControl
{
DetectConfigControl detectConfigControl;
private AntdUI.Window window;
private DefectRow user;
public bool submit;

View File

@ -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;
}
}

View File

@ -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();
}
}
}

View File

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

View File

@ -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;
}
}

View File

@ -1,257 +0,0 @@
using AntdUI;
using AntdUIDemo.Models;
using DH.Commons.Base;
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);
// }
// }
//}
}
}
}

View File

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

View File

@ -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;
}
}

View File

@ -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; // 只删除一个
}
}
}
}
}

View File

@ -1,120 +0,0 @@
<?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>