using HalconDotNet; using LB_SmartVision.Forms.Pages.ProcessPage; using LB_SmartVision.ProcessRun; using ReaLTaiizor.Controls; using System; using System.Collections.Concurrent; 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 VisionControl.Forms; namespace LB_SmartVision.Forms.Pages.SettingPage { public partial class LayoutSettingControl : UserControl { private Layout layout { get; set; } = new Layout(); private ProcessRunBll processRunBll { get { if (GlobalVar.dicProcesses.ContainsKey(cmbProcess.Text)) return GlobalVar.dicProcesses[cmbProcess.Text]; else return null; } } public bool IsSelected { get { return lblName.Checked; } } public string Title { get { return lblName.Text; } } public string ProcessName { get { return cmbProcess.Text; } } public string InputImage { get { return cmbInputImage.Text; } } public string SaveImageDir { get { return txtSavePath.Text; } } public string RecordImage1 { get { return cmbRecord1.Text; } } public string RecordImage2 { get { return cmbRecord2.Text; } } public string RecordImage3 { get { return cmbRecord3.Text; } } public LayoutSettingControl(Layout layout = null) { InitializeComponent(); this.layout = layout; txtSavePath.TextChanged += TextChanged; txtSavePath.MouseHover += MouseHover; txtSaveNameHead.TextChanged += TextChanged; txtSaveNameHead.MouseHover += MouseHover; cmbProcess.MouseClick += MouseClick; cmbInputImage.MouseClick += MouseClick; cmbRecord1.MouseClick += MouseClick; cmbRecord2.MouseClick += MouseClick; cmbRecord3.MouseClick += MouseClick; cmbProcess.SelectedIndexChanged += SelectedIndexChanged; cmbInputImage.SelectedIndexChanged += SelectedIndexChanged; cmbRecord1.SelectedIndexChanged += SelectedIndexChanged; cmbRecord2.SelectedIndexChanged += SelectedIndexChanged; cmbRecord3.SelectedIndexChanged += SelectedIndexChanged; cmbProcess.Items.Clear(); cmbProcess.Items.Add(""); cmbProcess.Items.AddRange(GlobalVar.dicProcesses.Keys.ToArray()); if (layout != null) { lblName.Text = layout.Title; cmbProcess.Text = layout.ProcessName; cmbInputImage.Text = layout.InputImage; cmbRecord1.Text = layout.RecordImage1; cmbRecord2.Text = layout.RecordImage2; cmbRecord3.Text = layout.RecordImage3; txtSavePath.Text = layout.SaveImageDir; txtSaveNameHead.Text = layout.SaveImageHead; } } private void MouseClick(object sender, EventArgs e) { switch ((sender as ComboBox).Name) { case "cmbProcess": cmbProcess.Items.Clear(); cmbProcess.Items.Add(""); cmbProcess.Items.AddRange(GlobalVar.dicProcesses.Keys.ToArray()); break; case "cmbInputImage": cmbInputImage.Items.Clear(); cmbInputImage.Items.Add(""); if (processRunBll == null) return; foreach (var lstOutput in processRunBll.dicOutputsMapping) { foreach (var output in lstOutput.Value) { if (output.Contains("Image")) cmbInputImage.Items.Add($"{lstOutput.Key}.Output.Image"); } } break; case "cmbRecord1": cmbRecord1.Items.Clear(); cmbRecord1.Items.Add(""); if (processRunBll == null) return; foreach (var lstOutput in processRunBll.dicOutputsMapping) { foreach (var output in lstOutput.Value) { if (output.Contains("Record")) cmbRecord1.Items.Add($"{lstOutput.Key}.Output.Record"); } } break; case "cmbRecord2": cmbRecord2.Items.Clear(); cmbRecord2.Items.Add(""); if (processRunBll == null) return; foreach (var lstOutput in processRunBll.dicOutputsMapping) { foreach (var output in lstOutput.Value) { if (output.Contains("Record")) cmbRecord2.Items.Add($"{lstOutput.Key}.Output.Record"); } } break; case "cmbRecord3": cmbRecord3.Items.Clear(); cmbRecord3.Items.Add(""); if (processRunBll == null) return; foreach (var lstOutput in processRunBll.dicOutputsMapping) { foreach (var output in lstOutput.Value) { if (output.Contains("Record")) cmbRecord3.Items.Add($"{lstOutput.Key}.Output.Record"); } } break; } } private void SelectedIndexChanged(object sender, EventArgs e) { switch ((sender as ComboBox).Name) { case "cmbProcess": layout.ProcessName = cmbProcess.Text; break; case "cmbInputImage": layout.InputImage = cmbInputImage.Text; break; case "cmbRecord1": layout.RecordImage1 = cmbRecord1.Text; break; case "cmbRecord2": layout.RecordImage2 = cmbRecord2.Text; break; case "cmbRecord3": layout.RecordImage3 = cmbRecord3.Text; break; } } private void TextChanged(object sender, EventArgs e) { switch ((sender as TextBox).Name) { case "txtSavePath": layout.SaveImageDir = txtSavePath.Text; break; case "txtSaveNameHead": layout.SaveImageHead = txtSaveNameHead.Text; break; } } private void txtSavePath_MouseDoubleClick(object sender, MouseEventArgs e) { // 创建文件夹选择对话框 using (var folderDialog = new FolderBrowserDialog()) { folderDialog.Description = "请选择文件夹"; folderDialog.ShowNewFolderButton = true; // 允许创建新文件夹 folderDialog.RootFolder = Environment.SpecialFolder.MyComputer; // 起始目录 // 显示对话框 DialogResult result = folderDialog.ShowDialog(); if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPath)) { string selectedFolder = folderDialog.SelectedPath; txtSavePath.Text = selectedFolder; // 设置文本框的值为选择的文件夹路径 } } } private void txtSaveNameHead_MouseDoubleClick(object sender, MouseEventArgs e) { ProcessOutputsSelectForm processOutputsSelectForm = new ProcessOutputsSelectForm(GlobalVar.dicProcesses[ProcessName].dicInputsMapping, GlobalVar.dicProcesses[ProcessName].dicOutputsMapping); processOutputsSelectForm.ShowDialog(); if (!string.IsNullOrEmpty(processOutputsSelectForm.SelectedOutput)) txtSaveNameHead.Text += $"{{{processOutputsSelectForm.SelectedOutput}}}"; } private void MouseHover(object sender, EventArgs e) { if (sender is TextBox txt) { new ToolTip() { ToolTipIcon = ToolTipIcon.Info, // 设置提示图标 UseAnimation = true, // 启用动画效果 UseFading = true // 启用淡入淡出效果 }.Show(txt.Text , txt , txt.Width / 2, txt.Height // 显示在控件底部中间 , 1000); // 显示1秒 } } private void lblName_MouseDown(object sender, MouseEventArgs e) { if (e.Button.ToString() == "Right") { RenameForm renameForm = new RenameForm(lblName.Text); renameForm.ShowDialog(); if (renameForm.bRename) { string oriName = renameForm.strOriName; string newName = renameForm.strNewName; foreach (var layout in GlobalVar.dicLayout.Values) { if (layout.Title == newName) { MessageBox.Show($"变量【{newName}】已存在,请更换名称!", "异常"); return; } } foreach (var layout in GlobalVar.dicLayout.Values) { if (layout.Title == oriName && lblName.Checked) { layout.Title = newName; lblName.Text = newName; return; } } } } } } }