C# 如何在上下文子菜单上动态添加单击事件

C# How do i add click event on context sub menu each dynamically

大家好,我在创建子菜单的点击菜单时遇到问题,通常我可以将其投射到它们的每个属性上,但我的子菜单来自数据库,我不知道如何添加硬编码的点击事件

到目前为止我的代码

void loadTechnicianData()
        {
            TechnicianPanel.Controls.Clear();
            query = "SELECT * FROM `tbl_technician`";
            using (MySqlConnection conn = constrings.GetDBConnection())
            {
                try
                {
                    conn.Open();
                    using (MySqlCommand cmd = new MySqlCommand(query, conn))
                    {
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Tech_UC uc = new Tech_UC();
                                uc.TechHeader.Text = reader["technician"].ToString();
                                uc.TechHeader.BackColor = Color.FromName(reader["color_assigned"].ToString());
                                uc.id = Convert.ToInt32(reader["t_id"].ToString());
                                TechnicianPanel.Controls.Add(uc);

                                ToolStripMenuItem cm = startToolStripMenuItem as ToolStripMenuItem;
                                cm.DropDownItems.Add(reader["technician"].ToString());

                            //here i need to call a click event to call a method void outside the loop
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    CMessageBox m = new CMessageBox("error\n" + ex);
                    m.ShowDialog();
                }
                finally
                {
                    conn.Close();
                }
            }
        }

试试这个:

cm.DropDownItems.Add(reader["technician"].ToString()).Click += MyMethod;

与:

void MyMethod(object sender, EventArgs e);

如果简短且不可重用,您可以使用委托或 lambda 表达式代替方法:

cm.DropDownItems.Add(reader["technician"].ToString()).Click += (_sender, _e) =>
{
  ...
};