DHDHSoftware/DHSoftware/Views/CorrelatedCameraEdit.cs
2025-03-21 08:51:20 +08:00

123 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.ComponentModel;
using System.Reflection;
using AntdUI;
using DH.Commons.Base;
using DH.Devices.Vision;
namespace DHSoftware.Views
{
public partial class CorrelatedCameraEdit : UserControl
{
List<KeyValuePair<string, int>> resultStates = GetFilteredEnumDescriptionsAndValuesres<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();
}
private AntdUI.Window window;
private List<RelatedCamera> Cameras;
public bool submit;
public CorrelatedCameraEdit(AntdUI.Window _window, List<RelatedCamera> cameras)
{
this.window = _window;
Cameras = cameras;
InitializeComponent();
//设置默认值
InitData();
// 绑定事件
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)
{
if (flowPanel1.Controls.Count > 0)
{
Cameras.Clear();
foreach (Control control in flowPanel1.Controls)
{
if (control is AntdUI.Checkbox checkbox)
{
// 操作 CheckBox
bool isChecked = checkbox.Checked;
if (isChecked)
{
string name = checkbox.Text;
RelatedCamera relatedCamera = new RelatedCamera(name);
Cameras.Add(relatedCamera);
}
}
}
}
submit = true;
this.Dispose();
}
private void InitData()
{
for (int i = 1; i < 15; i++)
{
string name = $"Cam{i}";
var control = new AntdUI.Checkbox()
{
AutoCheck = true,
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
Size = new Size(90, 42),
Text = name,
};
foreach (var item in Cameras)
{
if (item.CameraSourceId.Equals(name))
{
control.Checked = true;
break;
}
}
// 通过主窗口设置DPI控制添加控件保持缩放比例
window.AutoDpi(control);
flowPanel1.Controls.Add(control);
control.BringToFront();
}
}
private void CorrelatedCameraEdit_Load(object sender, EventArgs e)
{
}
}
}