using System.Drawing; using System.Xml.Linq; using static System.Net.Mime.MediaTypeNames; using static System.Windows.Forms.AxHost; namespace LB_VisionControls { public enum State { None, Pass, Error, Warn }; public partial class UserItem : PictureBox { // 定义一个委托和事件 public delegate void MenuItem1ClickedHandler(string name, string text); public event MenuItem1ClickedHandler MenuItem1ClickedEvent; // 定义一个委托和事件 public delegate void MenuItem2ClickedHandler(string name, string text); public event MenuItem2ClickedHandler MenuItem2ClickedEvent; // 定义一个委托和事件 public delegate void MenuItem3ClickedHandler(string name, string text); public event MenuItem3ClickedHandler MenuItem3ClickedEvent; // 定义一个委托和事件 public delegate void MenuItem4ClickedHandler(string name, string text); public event MenuItem4ClickedHandler MenuItem4ClickedEvent; // 定义一个委托和事件 public delegate void MenuItem5ClickedHandler(string name, string text); public event MenuItem5ClickedHandler MenuItem5ClickedEvent; // 定义一个委托和事件 public delegate void MenuItem6ClickedHandler(string name, string text); public event MenuItem6ClickedHandler MenuItem6ClickedEvent; public State state = State.None; public UserItem() { InitializeComponent(); } public UserItem(string[] arrMenuItems) { InitializeComponent(); if (arrMenuItems.Length <= 0) return; uiContextMenuStrip1.Items.Clear(); ToolStripItem[] toolStripItems = new ToolStripItem[arrMenuItems.Length]; for (int i = 0; i < arrMenuItems.Length; i++) { ToolStripMenuItem ToolStripMenuItem = new ToolStripMenuItem(); ToolStripMenuItem.Name = $"ToolStripMenuItem{i}"; ToolStripMenuItem.Size = new Size(180, 22); ToolStripMenuItem.Text = arrMenuItems[i]; toolStripItems[i] = ToolStripMenuItem; } uiContextMenuStrip1.Items.AddRange(toolStripItems); } public void UserItem_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { // 绘制填充椭圆(使用坐标和大小参数) // 绘制一个圆用于显示状态 switch (state) { case State.None: e.Graphics.FillEllipse(Brushes.Black, 10, 10, 15, 15); break; case State.Pass: e.Graphics.FillEllipse(Brushes.DarkGreen, 10, 10, 15, 15); break; case State.Error: e.Graphics.FillEllipse(Brushes.MediumVioletRed, 10, 10, 15, 15); break; case State.Warn: e.Graphics.FillEllipse(Brushes.Yellow, 10, 10, 15, 15); break; } // 绘制背景矩形显示Name RectangleF bgRect = new RectangleF(35, 0, Width, 40); e.Graphics.FillRectangle(Brushes.AliceBlue, bgRect); e.Graphics.DrawString(Name, Font, Brushes.Black, bgRect); // 绘制背景矩形显示Text RectangleF btRect = new RectangleF(10, 40, Width, Height - 40); e.Graphics.FillRectangle(Brushes.AliceBlue, btRect); e.Graphics.DrawString(Text, Font, Brushes.Black, btRect); } private void uiContextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { // 获取被点击的菜单项 ToolStripMenuItem clickedItem = e.ClickedItem as ToolStripMenuItem; if (clickedItem != null) { // 根据被点击的菜单项执行不同的操作 switch (clickedItem.Name) { case "ToolStripMenuItem0": // 执行菜单项0的逻辑 MenuItem1ClickedEvent?.Invoke(Name, Text); break; case "ToolStripMenuItem1": // 执行菜单项1的逻辑 MenuItem2ClickedEvent?.Invoke(Name, Text); break; case "ToolStripMenuItem2": // 执行菜单项2的逻辑 MenuItem3ClickedEvent?.Invoke(Name, Text); break; case "ToolStripMenuItem3": // 执行菜单项3的逻辑 MenuItem4ClickedEvent?.Invoke(Name, Text); break; case "ToolStripMenuItem4": // 执行菜单项4的逻辑 MenuItem5ClickedEvent?.Invoke(Name, Text); break; case "ToolStripMenuItem5": // 执行菜单项5的逻辑 MenuItem6ClickedEvent?.Invoke(Name, Text); break; default: // 执行其他操作 break; } } } } }