正在改尺寸测量
This commit is contained in:
@ -8,7 +8,7 @@ namespace AntdUIDemo.Views.Table
|
||||
{
|
||||
public partial class DefectRowEdit : UserControl
|
||||
{
|
||||
DetectConfigControl detectConfigControl;
|
||||
//DetectConfigControl detectConfigControl;
|
||||
private AntdUI.Window window;
|
||||
private DefectRow user;
|
||||
public bool submit;
|
||||
|
297
DHSoftware/Views/DetectConfigControl.Designer.cs
generated
297
DHSoftware/Views/DetectConfigControl.Designer.cs
generated
@ -1,297 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class DetectConfigControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
panel1 = new Panel();
|
||||
panel3 = new Panel();
|
||||
label6 = new AntdUI.Label();
|
||||
cbxDetectType = new AntdUI.Select();
|
||||
label1 = new AntdUI.Label();
|
||||
tbDetectName = new AntdUI.Input();
|
||||
btnPreOpen = new AntdUI.Button();
|
||||
tbModelpath = new AntdUI.Input();
|
||||
button3 = new AntdUI.Button();
|
||||
switchEnable = new AntdUI.Switch();
|
||||
label8 = new AntdUI.Label();
|
||||
label10 = new AntdUI.Label();
|
||||
sthPic = new AntdUI.Switch();
|
||||
sthSaveNGPic = new AntdUI.Switch();
|
||||
label7 = new AntdUI.Label();
|
||||
label9 = new AntdUI.Label();
|
||||
swSaveOKPic = new AntdUI.Switch();
|
||||
panel2 = new Panel();
|
||||
label2 = new AntdUI.Label();
|
||||
buttonDEL = new AntdUI.Button();
|
||||
table_base = new AntdUI.Table();
|
||||
buttonADD = new AntdUI.Button();
|
||||
panel1.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.BorderStyle = BorderStyle.FixedSingle;
|
||||
panel1.Controls.Add(panel3);
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(600, 445);
|
||||
panel1.TabIndex = 0;
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Controls.Add(label6);
|
||||
panel3.Controls.Add(cbxDetectType);
|
||||
panel3.Controls.Add(label1);
|
||||
panel3.Controls.Add(tbDetectName);
|
||||
panel3.Controls.Add(btnPreOpen);
|
||||
panel3.Controls.Add(tbModelpath);
|
||||
panel3.Controls.Add(button3);
|
||||
panel3.Controls.Add(switchEnable);
|
||||
panel3.Controls.Add(label8);
|
||||
panel3.Controls.Add(label10);
|
||||
panel3.Controls.Add(sthPic);
|
||||
panel3.Controls.Add(sthSaveNGPic);
|
||||
panel3.Controls.Add(label7);
|
||||
panel3.Controls.Add(label9);
|
||||
panel3.Controls.Add(swSaveOKPic);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 0);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(598, 206);
|
||||
panel3.TabIndex = 41;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
label6.Location = new Point(3, 15);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(58, 23);
|
||||
label6.TabIndex = 25;
|
||||
label6.Text = "检测名称";
|
||||
//
|
||||
// cbxDetectType
|
||||
//
|
||||
cbxDetectType.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
cbxDetectType.Location = new Point(341, 7);
|
||||
cbxDetectType.Name = "cbxDetectType";
|
||||
cbxDetectType.Size = new Size(226, 31);
|
||||
cbxDetectType.TabIndex = 40;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(3, 44);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(73, 23);
|
||||
label1.TabIndex = 9;
|
||||
label1.Text = "模型路径";
|
||||
//
|
||||
// tbDetectName
|
||||
//
|
||||
tbDetectName.Location = new Point(82, 7);
|
||||
tbDetectName.Name = "tbDetectName";
|
||||
tbDetectName.Size = new Size(249, 31);
|
||||
tbDetectName.TabIndex = 39;
|
||||
//
|
||||
// btnPreOpen
|
||||
//
|
||||
btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
btnPreOpen.Location = new Point(507, 36);
|
||||
btnPreOpen.MinimumSize = new Size(20, 0);
|
||||
btnPreOpen.Name = "btnPreOpen";
|
||||
btnPreOpen.Size = new Size(60, 31);
|
||||
btnPreOpen.TabIndex = 22;
|
||||
btnPreOpen.Text = "...";
|
||||
//
|
||||
// tbModelpath
|
||||
//
|
||||
tbModelpath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbModelpath.Location = new Point(82, 36);
|
||||
tbModelpath.Name = "tbModelpath";
|
||||
tbModelpath.Size = new Size(415, 31);
|
||||
tbModelpath.TabIndex = 38;
|
||||
//
|
||||
// button3
|
||||
//
|
||||
button3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
button3.Location = new Point(385, 73);
|
||||
button3.Name = "button3";
|
||||
button3.Size = new Size(182, 34);
|
||||
button3.TabIndex = 37;
|
||||
button3.Text = "查看文件夹";
|
||||
//
|
||||
// switchEnable
|
||||
//
|
||||
switchEnable.Location = new Point(82, 84);
|
||||
switchEnable.Name = "switchEnable";
|
||||
switchEnable.Size = new Size(60, 23);
|
||||
switchEnable.TabIndex = 27;
|
||||
switchEnable.Text = "switch1";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
label8.Location = new Point(3, 84);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(58, 23);
|
||||
label8.TabIndex = 28;
|
||||
label8.Text = "模型启用";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
label10.Location = new Point(176, 113);
|
||||
label10.Name = "label10";
|
||||
label10.Size = new Size(73, 23);
|
||||
label10.TabIndex = 34;
|
||||
label10.Text = "保存NG原图";
|
||||
//
|
||||
// sthPic
|
||||
//
|
||||
sthPic.Location = new Point(263, 84);
|
||||
sthPic.Name = "sthPic";
|
||||
sthPic.Size = new Size(60, 23);
|
||||
sthPic.TabIndex = 29;
|
||||
sthPic.Text = "switch2";
|
||||
//
|
||||
// sthSaveNGPic
|
||||
//
|
||||
sthSaveNGPic.Location = new Point(263, 113);
|
||||
sthSaveNGPic.Name = "sthSaveNGPic";
|
||||
sthSaveNGPic.Size = new Size(60, 23);
|
||||
sthSaveNGPic.TabIndex = 33;
|
||||
sthSaveNGPic.Text = "switch4";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
label7.Location = new Point(184, 84);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(58, 23);
|
||||
label7.TabIndex = 30;
|
||||
label7.Text = "数据保存";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
label9.Location = new Point(3, 113);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(73, 23);
|
||||
label9.TabIndex = 32;
|
||||
label9.Text = "保存OK原图";
|
||||
//
|
||||
// swSaveOKPic
|
||||
//
|
||||
swSaveOKPic.Location = new Point(82, 113);
|
||||
swSaveOKPic.Name = "swSaveOKPic";
|
||||
swSaveOKPic.Size = new Size(60, 23);
|
||||
swSaveOKPic.TabIndex = 31;
|
||||
swSaveOKPic.Text = "switch3";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(label2);
|
||||
panel2.Controls.Add(buttonDEL);
|
||||
panel2.Controls.Add(table_base);
|
||||
panel2.Controls.Add(buttonADD);
|
||||
panel2.Dock = DockStyle.Bottom;
|
||||
panel2.Location = new Point(0, 206);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(598, 237);
|
||||
panel2.TabIndex = 35;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.Location = new Point(3, 3);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(58, 23);
|
||||
label2.TabIndex = 29;
|
||||
label2.Text = "模型参数";
|
||||
//
|
||||
// buttonDEL
|
||||
//
|
||||
buttonDEL.Location = new Point(93, 28);
|
||||
buttonDEL.Name = "buttonDEL";
|
||||
buttonDEL.Size = new Size(84, 34);
|
||||
buttonDEL.TabIndex = 24;
|
||||
buttonDEL.Text = "删除";
|
||||
//
|
||||
// table_base
|
||||
//
|
||||
table_base.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
table_base.Location = new Point(0, 68);
|
||||
table_base.Name = "table_base";
|
||||
table_base.Size = new Size(598, 169);
|
||||
table_base.TabIndex = 22;
|
||||
table_base.Text = "table1";
|
||||
//
|
||||
// buttonADD
|
||||
//
|
||||
buttonADD.Location = new Point(3, 28);
|
||||
buttonADD.Name = "buttonADD";
|
||||
buttonADD.Size = new Size(84, 34);
|
||||
buttonADD.TabIndex = 23;
|
||||
buttonADD.Text = "新增";
|
||||
//
|
||||
// DetectConfigControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "DetectConfigControl";
|
||||
Size = new Size(600, 445);
|
||||
panel1.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Panel panel1;
|
||||
private AntdUI.Label label1;
|
||||
private AntdUI.Label label6;
|
||||
private AntdUI.Button btnPreOpen;
|
||||
private AntdUI.Label label7;
|
||||
private AntdUI.Switch sthPic;
|
||||
private AntdUI.Label label8;
|
||||
private AntdUI.Switch switchEnable;
|
||||
private AntdUI.Label label10;
|
||||
private AntdUI.Switch sthSaveNGPic;
|
||||
private AntdUI.Label label9;
|
||||
private AntdUI.Switch swSaveOKPic;
|
||||
private Panel panel2;
|
||||
private AntdUI.Button buttonDEL;
|
||||
private AntdUI.Table table_base;
|
||||
private AntdUI.Button buttonADD;
|
||||
private AntdUI.Button button3;
|
||||
private AntdUI.Input tbDetectName;
|
||||
private AntdUI.Input tbModelpath;
|
||||
private AntdUI.Label label2;
|
||||
private AntdUI.Select cbxDetectType;
|
||||
private Panel panel3;
|
||||
}
|
||||
}
|
@ -1,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("删除成功!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -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>
|
5
DHSoftware/Views/DetectControl.Designer.cs
generated
5
DHSoftware/Views/DetectControl.Designer.cs
generated
@ -95,6 +95,7 @@
|
||||
tabs1.Pages.Add(tabPage1);
|
||||
tabs1.Pages.Add(tabPage2);
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.SelectedIndex = 1;
|
||||
tabs1.Size = new Size(915, 609);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 1;
|
||||
@ -115,7 +116,7 @@
|
||||
tabPage1.Controls.Add(label2);
|
||||
tabPage1.Controls.Add(iptPrePath);
|
||||
tabPage1.Controls.Add(label1);
|
||||
tabPage1.Location = new Point(3, 31);
|
||||
tabPage1.Location = new Point(-909, -575);
|
||||
tabPage1.Name = "tabPage1";
|
||||
tabPage1.Size = new Size(909, 575);
|
||||
tabPage1.TabIndex = 0;
|
||||
@ -285,7 +286,7 @@
|
||||
tabPage2.Controls.Add(label7);
|
||||
tabPage2.Controls.Add(iptDetectPath);
|
||||
tabPage2.Controls.Add(label8);
|
||||
tabPage2.Location = new Point(-909, -575);
|
||||
tabPage2.Location = new Point(3, 31);
|
||||
tabPage2.Name = "tabPage2";
|
||||
tabPage2.Size = new Size(909, 575);
|
||||
tabPage2.TabIndex = 1;
|
||||
|
@ -15,7 +15,7 @@ namespace DHSoftware.Views
|
||||
{
|
||||
Window window;
|
||||
DetectionConfig detectionConfig;
|
||||
public DetectControl(Window _window,DetectionConfig _detection)
|
||||
public DetectControl(Window _window, DetectionConfig _detection)
|
||||
{
|
||||
window = _window;
|
||||
detectionConfig = _detection;
|
||||
@ -230,7 +230,7 @@ namespace DHSoftware.Views
|
||||
//CellBadge = new CellBadge(SizeEnum.Circle.GetEnumDescription()),
|
||||
CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
|
||||
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
}
|
||||
@ -387,7 +387,7 @@ namespace DHSoftware.Views
|
||||
{
|
||||
PreTreatParam preParam = new PreTreatParam()
|
||||
{
|
||||
|
||||
|
||||
CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
@ -488,8 +488,8 @@ namespace DHSoftware.Views
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
stDetectType.Items.Clear();
|
||||
@ -501,13 +501,13 @@ namespace DHSoftware.Views
|
||||
PreOutTable.Binding(detectionConfig.OUTPreTreatParams);
|
||||
lableTable.Binding(detectionConfig.DetectionLableList);
|
||||
SizeTable.Binding(detectionConfig.SizeTreatParamList);
|
||||
|
||||
|
||||
|
||||
if (detectionConfig.PreTreatParams.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.PreTreatParams)
|
||||
{
|
||||
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(), "编辑", TTypeMini.Primary) ,
|
||||
new CellButton(Guid.NewGuid().ToString(), "删除", TTypeMini.Error)
|
||||
@ -573,8 +573,8 @@ namespace DHSoftware.Views
|
||||
//2
|
||||
sthDetectStatus.DataBindings.Add("Checked", detectionConfig, "IsEnabled", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthStation.DataBindings.Add("Checked", detectionConfig, "IsAddStation", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
stDetectType.DataBindings.Add("Text", detectionConfig, "ModelType",true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptConfidence.DataBindings.Add("Text", detectionConfig, "ModelconfThreshold", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
stDetectType.DataBindings.Add("Text", detectionConfig, "ModelType", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptConfidence.DataBindings.Add("Text", detectionConfig, "ModelconfThreshold", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
iptDetectPath.DataBindings.Add("Text", detectionConfig, "ModelPath", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthOKOriginal.DataBindings.Add("Checked", detectionConfig, "SaveOKOriginal", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
sthNGOriginal.DataBindings.Add("Checked", detectionConfig, "SaveNGOriginal", true, DataSourceUpdateMode.OnPropertyChanged);
|
||||
@ -644,16 +644,6 @@ namespace DHSoftware.Views
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
213
DHSoftware/Views/PreTreatUserControl.Designer.cs
generated
213
DHSoftware/Views/PreTreatUserControl.Designer.cs
generated
@ -1,213 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class PreTreatUserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
btnPreOpen = new AntdUI.Button();
|
||||
tbxPrePath = new TextBox();
|
||||
label1 = new AntdUI.Label();
|
||||
panel1 = new Panel();
|
||||
btnOParmDel = new Panel();
|
||||
label3 = new Label();
|
||||
btnDelOParm = new AntdUI.Button();
|
||||
tbOutputParm = new AntdUI.Table();
|
||||
btnAddOParm = new AntdUI.Button();
|
||||
panel2 = new Panel();
|
||||
label2 = new Label();
|
||||
btnDelIParm = new AntdUI.Button();
|
||||
tbInputParm = new AntdUI.Table();
|
||||
btnAddIParm = new AntdUI.Button();
|
||||
panel1.SuspendLayout();
|
||||
btnOParmDel.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// btnPreOpen
|
||||
//
|
||||
btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
btnPreOpen.Location = new Point(570, 17);
|
||||
btnPreOpen.Name = "btnPreOpen";
|
||||
btnPreOpen.Size = new Size(28, 23);
|
||||
btnPreOpen.TabIndex = 21;
|
||||
btnPreOpen.Text = "...";
|
||||
btnPreOpen.Click += btnPreOpen_Click;
|
||||
//
|
||||
// tbxPrePath
|
||||
//
|
||||
tbxPrePath.Location = new Point(91, 17);
|
||||
tbxPrePath.Name = "tbxPrePath";
|
||||
tbxPrePath.Size = new Size(473, 23);
|
||||
tbxPrePath.TabIndex = 20;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.Location = new Point(12, 17);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(73, 23);
|
||||
label1.TabIndex = 19;
|
||||
label1.Text = "预处理路径";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
panel1.BorderStyle = BorderStyle.FixedSingle;
|
||||
panel1.Controls.Add(btnOParmDel);
|
||||
panel1.Controls.Add(panel2);
|
||||
panel1.Controls.Add(label1);
|
||||
panel1.Controls.Add(btnPreOpen);
|
||||
panel1.Controls.Add(tbxPrePath);
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(633, 243);
|
||||
panel1.TabIndex = 22;
|
||||
//
|
||||
// btnOParmDel
|
||||
//
|
||||
btnOParmDel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
btnOParmDel.Controls.Add(label3);
|
||||
btnOParmDel.Controls.Add(btnDelOParm);
|
||||
btnOParmDel.Controls.Add(tbOutputParm);
|
||||
btnOParmDel.Controls.Add(btnAddOParm);
|
||||
btnOParmDel.Location = new Point(352, 44);
|
||||
btnOParmDel.Name = "btnOParmDel";
|
||||
btnOParmDel.Size = new Size(246, 194);
|
||||
btnOParmDel.TabIndex = 26;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.AutoSize = true;
|
||||
label3.Location = new Point(3, 2);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(56, 17);
|
||||
label3.TabIndex = 25;
|
||||
label3.Text = "输出参数";
|
||||
//
|
||||
// btnDelOParm
|
||||
//
|
||||
btnDelOParm.Location = new Point(93, 25);
|
||||
btnDelOParm.Name = "btnDelOParm";
|
||||
btnDelOParm.Size = new Size(84, 34);
|
||||
btnDelOParm.TabIndex = 24;
|
||||
btnDelOParm.Text = "删除";
|
||||
//
|
||||
// tbOutputParm
|
||||
//
|
||||
tbOutputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbOutputParm.Location = new Point(3, 65);
|
||||
tbOutputParm.Name = "tbOutputParm";
|
||||
tbOutputParm.Size = new Size(240, 126);
|
||||
tbOutputParm.TabIndex = 22;
|
||||
tbOutputParm.Text = "table2";
|
||||
//
|
||||
// btnAddOParm
|
||||
//
|
||||
btnAddOParm.Location = new Point(3, 25);
|
||||
btnAddOParm.Name = "btnAddOParm";
|
||||
btnAddOParm.Size = new Size(84, 34);
|
||||
btnAddOParm.TabIndex = 23;
|
||||
btnAddOParm.Text = "新增";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(label2);
|
||||
panel2.Controls.Add(btnDelIParm);
|
||||
panel2.Controls.Add(tbInputParm);
|
||||
panel2.Controls.Add(btnAddIParm);
|
||||
panel2.Location = new Point(12, 45);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(264, 194);
|
||||
panel2.TabIndex = 25;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(3, 5);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(56, 17);
|
||||
label2.TabIndex = 25;
|
||||
label2.Text = "输入参数";
|
||||
//
|
||||
// btnDelIParm
|
||||
//
|
||||
btnDelIParm.Location = new Point(93, 25);
|
||||
btnDelIParm.Name = "btnDelIParm";
|
||||
btnDelIParm.Size = new Size(84, 34);
|
||||
btnDelIParm.TabIndex = 24;
|
||||
btnDelIParm.Text = "删除";
|
||||
//
|
||||
// tbInputParm
|
||||
//
|
||||
tbInputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tbInputParm.Location = new Point(3, 65);
|
||||
tbInputParm.Name = "tbInputParm";
|
||||
tbInputParm.Size = new Size(258, 126);
|
||||
tbInputParm.TabIndex = 22;
|
||||
tbInputParm.Text = "table1";
|
||||
//
|
||||
// btnAddIParm
|
||||
//
|
||||
btnAddIParm.Location = new Point(3, 25);
|
||||
btnAddIParm.Name = "btnAddIParm";
|
||||
btnAddIParm.Size = new Size(84, 34);
|
||||
btnAddIParm.TabIndex = 23;
|
||||
btnAddIParm.Text = "新增";
|
||||
//
|
||||
// PreTreatUserControl
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Name = "PreTreatUserControl";
|
||||
Size = new Size(635, 243);
|
||||
panel1.ResumeLayout(false);
|
||||
panel1.PerformLayout();
|
||||
btnOParmDel.ResumeLayout(false);
|
||||
btnOParmDel.PerformLayout();
|
||||
panel2.ResumeLayout(false);
|
||||
panel2.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Button btnPreOpen;
|
||||
private TextBox tbxPrePath;
|
||||
private AntdUI.Label label1;
|
||||
private Panel panel1;
|
||||
private AntdUI.Button btnDelIParm;
|
||||
private AntdUI.Button btnAddIParm;
|
||||
private AntdUI.Table tbInputParm;
|
||||
private Panel panel2;
|
||||
private Panel btnOParmDel;
|
||||
private Label label3;
|
||||
private AntdUI.Button btnDelOParm;
|
||||
private AntdUI.Table tbOutputParm;
|
||||
private AntdUI.Button btnAddOParm;
|
||||
private Label label2;
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class PreTreatUserControl : UserControl
|
||||
{
|
||||
public PreTreatUserControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void btnPreOpen_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
122
DHSoftware/Views/SizeControl.Designer.cs
generated
122
DHSoftware/Views/SizeControl.Designer.cs
generated
@ -28,24 +28,32 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SizeControl));
|
||||
AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
|
||||
tabPage3 = new AntdUI.TabPage();
|
||||
tabPage4 = new AntdUI.TabPage();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
panel3 = new AntdUI.Panel();
|
||||
SizeTable = new AntdUI.Table();
|
||||
panel2 = new AntdUI.Panel();
|
||||
flowCameraPanel = new AntdUI.FlowPanel();
|
||||
btnCorrelatedCamera = new AntdUI.Button();
|
||||
label11 = new AntdUI.Label();
|
||||
panel1 = new AntdUI.Panel();
|
||||
btnSizeDel = new AntdUI.Button();
|
||||
btnSizeAdd = new AntdUI.Button();
|
||||
SizeTable = new AntdUI.Table();
|
||||
tabs1 = new AntdUI.Tabs();
|
||||
tabPage3.SuspendLayout();
|
||||
tabPage4.SuspendLayout();
|
||||
tabs1.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
panel1.SuspendLayout();
|
||||
tabs1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
tabPage3.Controls.Add(tabPage4);
|
||||
tabPage3.Dock = DockStyle.None;
|
||||
tabPage3.Location = new Point(3, 31);
|
||||
tabPage3.Name = "tabPage3";
|
||||
tabPage3.Size = new Size(909, 575);
|
||||
@ -54,7 +62,8 @@
|
||||
//
|
||||
// tabPage4
|
||||
//
|
||||
tabPage4.Controls.Add(SizeTable);
|
||||
tabPage4.Controls.Add(panel3);
|
||||
tabPage4.Controls.Add(panel2);
|
||||
tabPage4.Controls.Add(panel1);
|
||||
tabPage4.Location = new Point(8, 8);
|
||||
tabPage4.Name = "tabPage4";
|
||||
@ -62,18 +71,71 @@
|
||||
tabPage4.TabIndex = 1;
|
||||
tabPage4.Text = "预处理";
|
||||
//
|
||||
// tabs1
|
||||
// panel3
|
||||
//
|
||||
tabs1.Centered = true;
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
tabs1.Location = new Point(0, 0);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.Size = new Size(915, 609);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 1;
|
||||
tabs1.Text = "tabs1";
|
||||
panel3.Controls.Add(SizeTable);
|
||||
panel3.Dock = DockStyle.Fill;
|
||||
panel3.Location = new Point(0, 87);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(909, 488);
|
||||
panel3.TabIndex = 11;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// SizeTable
|
||||
//
|
||||
SizeTable.Dock = DockStyle.Fill;
|
||||
SizeTable.EmptyHeader = true;
|
||||
SizeTable.Location = new Point(0, 0);
|
||||
SizeTable.Name = "SizeTable";
|
||||
SizeTable.Size = new Size(909, 488);
|
||||
SizeTable.TabIndex = 10;
|
||||
SizeTable.Text = "table1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(flowCameraPanel);
|
||||
panel2.Controls.Add(btnCorrelatedCamera);
|
||||
panel2.Controls.Add(label11);
|
||||
panel2.Dock = DockStyle.Top;
|
||||
panel2.Location = new Point(0, 42);
|
||||
panel2.Margin = new Padding(3, 3, 10, 3);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(909, 45);
|
||||
panel2.TabIndex = 8;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// flowCameraPanel
|
||||
//
|
||||
flowCameraPanel.AutoScroll = true;
|
||||
flowCameraPanel.BackColor = SystemColors.Window;
|
||||
flowCameraPanel.Dock = DockStyle.Left;
|
||||
flowCameraPanel.Location = new Point(74, 0);
|
||||
flowCameraPanel.Name = "flowCameraPanel";
|
||||
flowCameraPanel.Size = new Size(645, 45);
|
||||
flowCameraPanel.TabIndex = 36;
|
||||
flowCameraPanel.Text = "flowPanel1";
|
||||
//
|
||||
// btnCorrelatedCamera
|
||||
//
|
||||
btnCorrelatedCamera.BorderWidth = 2F;
|
||||
btnCorrelatedCamera.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
btnCorrelatedCamera.Ghost = true;
|
||||
btnCorrelatedCamera.IconRatio = 0.8F;
|
||||
btnCorrelatedCamera.IconSvg = resources.GetString("btnCorrelatedCamera.IconSvg");
|
||||
btnCorrelatedCamera.Location = new Point(750, 2);
|
||||
btnCorrelatedCamera.Name = "btnCorrelatedCamera";
|
||||
btnCorrelatedCamera.Size = new Size(110, 40);
|
||||
btnCorrelatedCamera.TabIndex = 34;
|
||||
btnCorrelatedCamera.Text = "关联";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
label11.Dock = DockStyle.Left;
|
||||
label11.Location = new Point(0, 0);
|
||||
label11.Name = "label11";
|
||||
label11.Size = new Size(74, 45);
|
||||
label11.TabIndex = 35;
|
||||
label11.Text = "关联相机";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
@ -114,15 +176,18 @@
|
||||
btnSizeAdd.TabIndex = 11;
|
||||
btnSizeAdd.Text = "新增";
|
||||
//
|
||||
// SizeTable
|
||||
// tabs1
|
||||
//
|
||||
SizeTable.Dock = DockStyle.Fill;
|
||||
SizeTable.EmptyHeader = true;
|
||||
SizeTable.Location = new Point(0, 42);
|
||||
SizeTable.Name = "SizeTable";
|
||||
SizeTable.Size = new Size(909, 533);
|
||||
SizeTable.TabIndex = 10;
|
||||
SizeTable.Text = "table1";
|
||||
tabs1.Centered = true;
|
||||
tabs1.Dock = DockStyle.Fill;
|
||||
tabs1.Font = new Font("Microsoft YaHei UI", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
tabs1.Location = new Point(0, 0);
|
||||
tabs1.Name = "tabs1";
|
||||
tabs1.Pages.Add(tabPage3);
|
||||
tabs1.Size = new Size(915, 609);
|
||||
tabs1.Style = styleLine1;
|
||||
tabs1.TabIndex = 1;
|
||||
tabs1.Text = "tabs1";
|
||||
//
|
||||
// SizeControl
|
||||
//
|
||||
@ -133,8 +198,10 @@
|
||||
Size = new Size(915, 609);
|
||||
tabPage3.ResumeLayout(false);
|
||||
tabPage4.ResumeLayout(false);
|
||||
tabs1.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
panel1.ResumeLayout(false);
|
||||
tabs1.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
@ -147,5 +214,10 @@
|
||||
private AntdUI.Panel panel1;
|
||||
private AntdUI.Button btnSizeDel;
|
||||
private AntdUI.Button btnSizeAdd;
|
||||
private AntdUI.FlowPanel flowCameraPanel;
|
||||
private AntdUI.Label label11;
|
||||
private AntdUI.Button btnCorrelatedCamera;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Panel panel3;
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,51 @@ namespace DHSoftware.Views
|
||||
btnSizeAdd.Click += BtnSizeAdd_Click;
|
||||
btnSizeDel.Click += BtnSizeDelete_Click;
|
||||
SizeTable.CellButtonClick += SizeTable_CellButtonClick;
|
||||
btnCorrelatedCamera.Click += BtnCorrelatedCamera_Click;
|
||||
}
|
||||
private void BtnCorrelatedCamera_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
var form = new CorrelatedCameraEdit(window, detectionConfig.CameraCollects) { Size = new Size(500, 400) };
|
||||
AntdUI.Modal.open(new AntdUI.Modal.Config(window, "", form, TType.None)
|
||||
{
|
||||
BtnHeight = 0,
|
||||
});
|
||||
if (form.submit)
|
||||
{
|
||||
flowCameraPanel.Controls.Clear();
|
||||
if (detectionConfig.CameraCollects.Count > 0)
|
||||
{
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
control.CloseChanged += (sender, e) =>
|
||||
{
|
||||
var tag = sender as Tag;
|
||||
foreach (var item in detectionConfig.CameraCollects)
|
||||
{
|
||||
if (item.CameraSourceId.Equals(tag.Text))
|
||||
{
|
||||
detectionConfig.CameraCollects.Remove(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
};
|
||||
// 通过主窗口设置DPI控制添加控件保持缩放比例
|
||||
window.AutoDpi(control);
|
||||
flowCameraPanel.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -75,7 +119,7 @@ namespace DHSoftware.Views
|
||||
case "3":
|
||||
case "4":
|
||||
case "5":
|
||||
FrmMain3 frmMain3 = new FrmMain3(sizeType);
|
||||
FrmMainSize frmMain3 = new FrmMainSize(sizeType, detectionConfig);
|
||||
frmMain3.ShowDialog();
|
||||
if (!string.IsNullOrEmpty(frmMain3.inputtext))
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
@ -117,6 +117,9 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnCorrelatedCamera.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
<data name="btnSizeDel.IconSvg" xml:space="preserve">
|
||||
<value><svg t="1741939836774" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21349" width="200" height="200"><path d="M1003.153333 404.96a52.933333 52.933333 0 0 0-42.38-20.96H896V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H461.253333a10.573333 10.573333 0 0 1-7.54-3.126666L344.46 100.953333A52.986667 52.986667 0 0 0 306.746667 85.333333H53.333333a53.393333 53.393333 0 0 0-53.333333 53.333334v704a53.393333 53.393333 0 0 0 53.333333 53.333333h796.893334a53.453333 53.453333 0 0 0 51.453333-39.333333l110.546667-405.333334a52.953333 52.953333 0 0 0-9.073334-46.373333zM53.333333 128h253.413334a10.573333 10.573333 0 0 1 7.54 3.126667l109.253333 109.253333A52.986667 52.986667 0 0 0 461.253333 256H842.666667a10.666667 10.666667 0 0 1 10.666666 10.666667v117.333333H173.773333a53.453333 53.453333 0 0 0-51.453333 39.333333L42.666667 715.366667V138.666667a10.666667 10.666667 0 0 1 10.666666-10.666667zm917.726667 312.14l-110.546667 405.333333a10.666667 10.666667 0 0 1-10.286666 7.86H63.226667a10.666667 10.666667 0 0 1-10.286667-13.473333l110.546667-405.333333A10.666667 10.666667 0 0 1 173.773333 426.666667h787a10.666667 10.666667 0 0 1 10.286667 13.473333z" fill="#5C5C66" p-id="21350"/></svg></value>
|
||||
</data>
|
||||
|
167
DHSoftware/Views/UserConfigFrm.Designer.cs
generated
167
DHSoftware/Views/UserConfigFrm.Designer.cs
generated
@ -1,167 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class UserConfigFrm
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
|
||||
pnlMenu = new AntdUI.Panel();
|
||||
panel3 = new AntdUI.Panel();
|
||||
btnSave = new AntdUI.Button();
|
||||
btnAdd = new AntdUI.Button();
|
||||
menu = new AntdUI.Menu();
|
||||
panel2 = new AntdUI.Panel();
|
||||
divider1 = new AntdUI.Divider();
|
||||
tabs = new AntdUI.Tabs();
|
||||
pnlMenu.SuspendLayout();
|
||||
panel3.SuspendLayout();
|
||||
panel2.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// pnlMenu
|
||||
//
|
||||
pnlMenu.Controls.Add(panel3);
|
||||
pnlMenu.Controls.Add(menu);
|
||||
pnlMenu.Dock = DockStyle.Left;
|
||||
pnlMenu.Location = new Point(0, 0);
|
||||
pnlMenu.Name = "pnlMenu";
|
||||
pnlMenu.Size = new Size(135, 542);
|
||||
pnlMenu.TabIndex = 0;
|
||||
pnlMenu.Text = "panel1";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
panel3.Back = SystemColors.Window;
|
||||
panel3.BackColor = SystemColors.Window;
|
||||
panel3.Controls.Add(btnSave);
|
||||
panel3.Controls.Add(btnAdd);
|
||||
panel3.Dock = DockStyle.Bottom;
|
||||
panel3.Location = new Point(0, 516);
|
||||
panel3.Name = "panel3";
|
||||
panel3.Size = new Size(135, 26);
|
||||
panel3.TabIndex = 2;
|
||||
panel3.Text = "panel3";
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
btnSave.BackActive = SystemColors.Control;
|
||||
btnSave.BackColor = SystemColors.Control;
|
||||
btnSave.Dock = DockStyle.Left;
|
||||
btnSave.ForeColor = Color.Black;
|
||||
btnSave.IconRatio = 1F;
|
||||
btnSave.IconSvg = "AppstoreAddOutlined";
|
||||
btnSave.Location = new Point(35, 0);
|
||||
btnSave.Name = "btnSave";
|
||||
btnSave.Size = new Size(35, 26);
|
||||
btnSave.TabIndex = 2;
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
btnAdd.BackActive = SystemColors.Control;
|
||||
btnAdd.BackColor = SystemColors.Control;
|
||||
btnAdd.Dock = DockStyle.Left;
|
||||
btnAdd.ForeColor = Color.Black;
|
||||
btnAdd.IconRatio = 1F;
|
||||
btnAdd.IconSvg = "AppstoreAddOutlined";
|
||||
btnAdd.Location = new Point(0, 0);
|
||||
btnAdd.Name = "btnAdd";
|
||||
btnAdd.Size = new Size(35, 26);
|
||||
btnAdd.TabIndex = 1;
|
||||
btnAdd.Click += btnAdd_Click;
|
||||
//
|
||||
// menu
|
||||
//
|
||||
menu.Dock = DockStyle.Fill;
|
||||
menu.Location = new Point(0, 0);
|
||||
menu.Name = "menu";
|
||||
menu.Size = new Size(135, 542);
|
||||
menu.TabIndex = 0;
|
||||
menu.Text = "menu1";
|
||||
menu.SelectChanged += Menu_SelectChanged;
|
||||
menu.MouseDown += Menu_MouseDown;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
panel2.Controls.Add(divider1);
|
||||
panel2.Controls.Add(tabs);
|
||||
panel2.Dock = DockStyle.Fill;
|
||||
panel2.Location = new Point(135, 0);
|
||||
panel2.Name = "panel2";
|
||||
panel2.Size = new Size(745, 542);
|
||||
panel2.TabIndex = 1;
|
||||
panel2.Text = "panel2";
|
||||
//
|
||||
// divider1
|
||||
//
|
||||
divider1.BackColor = SystemColors.ActiveCaption;
|
||||
divider1.Dock = DockStyle.Left;
|
||||
divider1.Location = new Point(0, 0);
|
||||
divider1.Name = "divider1";
|
||||
divider1.Size = new Size(10, 542);
|
||||
divider1.TabIndex = 1;
|
||||
divider1.Text = "";
|
||||
divider1.Vertical = true;
|
||||
//
|
||||
// tabs
|
||||
//
|
||||
tabs.Dock = DockStyle.Fill;
|
||||
tabs.Location = new Point(0, 0);
|
||||
tabs.Name = "tabs";
|
||||
tabs.Size = new Size(745, 542);
|
||||
tabs.Style = styleCard1;
|
||||
tabs.TabIndex = 0;
|
||||
tabs.Text = "tabs1";
|
||||
tabs.Type = AntdUI.TabType.Card;
|
||||
tabs.SelectedIndexChanged += tabs_SelectedIndexChanged;
|
||||
//
|
||||
// UserConfigFrm
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
Controls.Add(panel2);
|
||||
Controls.Add(pnlMenu);
|
||||
Name = "UserConfigFrm";
|
||||
Size = new Size(880, 542);
|
||||
pnlMenu.ResumeLayout(false);
|
||||
panel3.ResumeLayout(false);
|
||||
panel2.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private AntdUI.Tabs tabs;
|
||||
private AntdUI.Panel pnlMenu;
|
||||
private AntdUI.Panel panel2;
|
||||
private AntdUI.Menu menu;
|
||||
private AntdUI.Panel panel3;
|
||||
private AntdUI.Button btnSave;
|
||||
private AntdUI.Button btnAdd;
|
||||
private AntdUI.Divider divider1;
|
||||
// private AntdUI.Tabs tabs;
|
||||
}
|
||||
}
|
@ -1,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);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
70
DHSoftware/Views/UserDetetion.Designer.cs
generated
70
DHSoftware/Views/UserDetetion.Designer.cs
generated
@ -1,70 +0,0 @@
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
partial class UserDetetion
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
collapse1 = new AntdUI.Collapse();
|
||||
panel1 = new Panel();
|
||||
SuspendLayout();
|
||||
//
|
||||
// collapse1
|
||||
//
|
||||
collapse1.Dock = DockStyle.Fill;
|
||||
collapse1.Location = new Point(0, 0);
|
||||
collapse1.Name = "collapse1";
|
||||
collapse1.Size = new Size(842, 568);
|
||||
collapse1.TabIndex = 0;
|
||||
collapse1.Text = "collapse1";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
panel1.BackColor = SystemColors.GradientActiveCaption;
|
||||
panel1.Dock = DockStyle.Left;
|
||||
panel1.Location = new Point(0, 0);
|
||||
panel1.Name = "panel1";
|
||||
panel1.Size = new Size(2, 568);
|
||||
panel1.TabIndex = 0;
|
||||
//
|
||||
// UserDetetion
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(panel1);
|
||||
Controls.Add(collapse1);
|
||||
Name = "UserDetetion";
|
||||
Size = new Size(842, 568);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private AntdUI.Collapse collapse1;
|
||||
private Panel panel1;
|
||||
//private AntdUI.Button button1;
|
||||
}
|
||||
}
|
@ -1,226 +0,0 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Button = AntdUI.Button;
|
||||
|
||||
namespace DHSoftware.Views
|
||||
{
|
||||
public partial class UserDetetion : UserControl
|
||||
{
|
||||
private StackPanel panel, panel2, panel3, panel4;
|
||||
public Window _windows;
|
||||
//根据检测配置 将对应的相机配置、中处理预处理、尺寸测量
|
||||
public UserDetetion(Window windows,int parentWidth, int parentHeight)
|
||||
{
|
||||
InitializeComponent();
|
||||
_windows = windows;
|
||||
AntdUI.CollapseItem group1 = new CollapseItem();
|
||||
group1.Height = parentHeight / 4;
|
||||
group1.Text = "相机配置";
|
||||
AntdUI.CollapseItem group2 = new CollapseItem();
|
||||
group2.Text = "预处理";
|
||||
group2.Height = parentHeight/4;
|
||||
|
||||
AntdUI.CollapseItem group3 = new CollapseItem();
|
||||
group3.Text = "中处理";
|
||||
group3.Height = parentHeight - 300;
|
||||
|
||||
AntdUI.CollapseItem group4 = new CollapseItem();
|
||||
group4.Text = "尺寸测量";
|
||||
group4.Height = parentHeight / 4;
|
||||
|
||||
|
||||
// 初始化内容面板
|
||||
panel = CreateScrollPanel();
|
||||
panel2 = CreateScrollPanel();
|
||||
panel3 = CreateScrollPanel();
|
||||
panel4 = CreateScrollPanel();
|
||||
|
||||
// 添加预处理控件
|
||||
var ptuc = new PreTreatUserControl { AutoScroll = true, Dock = DockStyle.Top };
|
||||
var detect = new DetectConfigControl { AutoScroll = true , Dock = DockStyle.Fill };
|
||||
detect._window = this._windows;
|
||||
|
||||
// 添加尺寸测量控件
|
||||
//var sizeFrm = new SizeControl();
|
||||
|
||||
|
||||
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; // 只删除一个
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
Reference in New Issue
Block a user