C# 将参数传递给循环中的事件
我已经从数据库中加载了一些带有图像位置的Picturebox,我想传递参数(价格和名称)来单击循环中的事件处理程序 代码如下所示:C# 将参数传递给循环中的事件,c#,winforms,events,event-handling,parameter-passing,C#,Winforms,Events,Event Handling,Parameter Passing,我已经从数据库中加载了一些带有图像位置的Picturebox,我想传递参数(价格和名称)来单击循环中的事件处理程序 代码如下所示: private void Caisse_Load(object sender, EventArgs e) { int repetition = 0; int rep = 1; textMontant.Text = mont; SqlConnection con = new SqlConnect
private void Caisse_Load(object sender, EventArgs e)
{
int repetition = 0;
int rep = 1;
textMontant.Text = mont;
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Test"].ToString());
con.Open();
SqlCommand cmd = new SqlCommand( "select desig_prd,prix_prd ,image from Produit ",con);
using (SqlDataReader reader1 = cmd.ExecuteReader())
{
while (reader1.Read())
{
if (repetition % 3== 0)
repetition = 0;
PictureBox p = new PictureBox();
p.Click += new System.EventHandler(P_Click(sender,
new MyEventArgs { design = reader1["desig_prd"].ToString(), prix = (float)reader1["prix_prd"] }));
p.ImageLocation = reader1["image"].ToString();
p.Height = 100;
p.Width = 160;
p.Location = new System.Drawing.Point(4+ repetition * 150, (int)(rep/4)*130+4);
panel1.Controls.Add(p);
repetition++;
rep++;
}
}
}
在picturebox下单击,我想传递2个参数(价格:reader1[“prix_prd”]和产品名称:reader1[“desig_prd”]),别忘了它们在循环中!
我知道
p.Click += new System.EventHandler(P_Click(sender,
new MyEventArgs { design = reader1["desig_prd"].ToString(), prix = (float)reader1["prix_prd"] }));
触发错误“预期事件名称”,但如何在循环中将参数传递给事件?
提前感谢使用lambda关闭相关变量:
string design = reader1["desig_prd"].ToString();
fload prix = (float)reader1["prix_prd"];
p.Click += (s, args) => P_Click(p,
new MyEventArgs
{
design = design,
prix = prix,
});
使用lambda关闭相关变量:
string design = reader1["desig_prd"].ToString();
fload prix = (float)reader1["prix_prd"];
p.Click += (s, args) => P_Click(p,
new MyEventArgs
{
design = design,
prix = prix,
});
您不能将自定义参数传递给
Click
事件处理程序,因为您不是引发事件的人
但是,可以使用匿名方法或lambda表达式指定捕获必要数据的处理程序:
var design = reader1["desig_prd"].ToString();
var prix = (float)reader1["prix_prd"];
p.Click += (sender1, e1) => SomeMethod(design, prix);
您不能将自定义参数传递给
Click
事件处理程序,因为您不是引发事件的人
但是,可以使用匿名方法或lambda表达式指定捕获必要数据的处理程序:
var design = reader1["desig_prd"].ToString();
var prix = (float)reader1["prix_prd"];
p.Click += (sender1, e1) => SomeMethod(design, prix);
“当读卡器关闭时,尝试调用元数据无效”时发生此错误。在p.Click+=(s,args)=>p_Click(p,newmyeventargs{design=design,prix=prix,});您没有在该行代码上访问读卡器,您也不需要使用
P_单击
访问读卡器,因此您不能显示您正在使用的确切代码。出现此错误“当读卡器关闭时尝试调用元数据无效”。在p.Click+=(s,args)=>p_Click(p,newmyeventargs{design=design,prix=prix,});您没有在该行代码上访问读卡器,也不需要使用P_单击
访问读卡器,因此您不能显示您正在使用的确切代码。