繁体   English   中英

C#中运行时控件的事件

[英]event for runtime controls in c#

我尝试在运行时中创建一个控件(而不是运行时中的“ 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);
    }

最好的祝福

创建标签时。 这样做lbl.MouseDown += lbl_MouseDown; 然后在您的EventHandler中:

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM