Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递给循环中的事件_C#_Winforms_Events_Event Handling_Parameter Passing - Fatal编程技术网

C# 将参数传递给循环中的事件

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

我已经从数据库中加载了一些带有图像位置的Picturebox,我想传递参数(价格和名称)来单击循环中的事件处理程序

代码如下所示:

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_单击
访问读卡器,因此您不能显示您正在使用的确切代码。