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) =>
{
...
};
大家好,我在创建子菜单的点击菜单时遇到问题,通常我可以将其投射到它们的每个属性上,但我的子菜单来自数据库,我不知道如何添加硬编码的点击事件
到目前为止我的代码
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) =>
{
...
};