事件用于c#中的运行时控件

本文关键字:运行时 控件 用于 事件 | 更新日期: 2023-09-27 17:54:31

我尝试在运行时创建一个控件(不是一个,而是"n"个)但现在我想为每个控件创建事件我做了一个,但它只适用于我在运行时创建的最后一个控件如何为每个控件创建事件?

        private void CreateRuntimeControl(PictureBox pic)
    {
        lbl = new Label();
        number++;
        locationX = locationX + 20;
        locationY = locationY + 20;
        lbl.Name = number.ToString();
        lbl.Size = new System.Drawing.Size(30, 20);
        lbl.Location = new System.Drawing.Point(10 + locationX, 10 + locationY);
        lbl.Text = number.ToString();
        lbl.BackColor = Color.Gray;
        pic.Controls.Add(lbl);
        lbl.MouseDown += lbl_MouseDown;
    }

和事件

        private void lbl_MouseDown(object sender, MouseEventArgs e)
    {
        MessageBox.Show(lbl.Name);
    }

事件用于c#中的运行时控件

创建标签时。做这个lbl.MouseDown += lbl_MouseDown;然后在你的eventandler中:

MessageBox.Show(((Label)sender).Name);

澄清;sender将是触发事件的对象,因此您需要将其强制转换为Label,然后您将能够使用其属性。

你的lbl_MouseDown法中的lbl是什么?如果它是一个类范围的成员字段,您将其用作刚刚创建的标签对象的临时存储,那么您将经历相当预期的行为。请使用方法的sender参数。

可以使用闭包。它使你的代码整洁。

:

var lbl = new Label();
lbl.MouseDown += (s,e) => this.HandleMouseDownOnLabel(lbl);
private void HandleMouseDownOnLabel(Label lbl)
{
    Messagabox.Show(lbl.Name);
}