using HalconDotNet; using LB_SmartVision.Forms.Pages.ProcessPage; using LB_SmartVision.ProcessRun; using LB_VisionControls; using LB_VisionControls.Forms; using LB_VisionProcesses; 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; 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 RecordImage { get { return txtRecord.Text; } } public LayoutSettingControl(Layout layout = null) { InitializeComponent(); this.layout = layout; txtSavePath.TextChanged += TextChanged; txtSavePath.MouseHover += MouseHover; txtSaveNameHead.TextChanged += TextChanged; txtSaveNameHead.MouseHover += MouseHover; txtRecord.TextChanged += TextChanged; txtRecord.TextChanged += TextChanged; cmbProcess.MouseClick += MouseClick; cmbInputImage.MouseClick += MouseClick; cmbProcess.SelectedIndexChanged += SelectedIndexChanged; cmbInputImage.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; txtRecord.Text = layout.RecordImage; 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) { cmbInputImage.Items.Add($"{lstOutput.Key}"); } 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; } } } 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; } case "txtRecord": { layout.RecordImage = txtRecord.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; } } } } } } }