将click事件添加到许多控件

时间:2014-01-22 12:10:41

标签: c# .net

我的表单中有很多控件。例如,一个面板中的120个标签。我希望当用户点击每个标签时,只需使用相同的参数调用相同的函数。 现在我像这样使用:

        private void label67_Click(object sender, EventArgs e)
    {
        ChangeToTextbox(sender);
    }

    private void label66_Click(object sender, EventArgs e)
    {
        ChangeToTextbox(sender);
    }

    private void label65_Click(object sender, EventArgs e)
    {
        ChangeToTextbox(sender);
    }

    private void label64_Click(object sender, EventArgs e)
    {
        ChangeToTextbox(sender);
    }

现在我可以轻松地在用户点击任何标签时调用ChangeToTextbox功能吗?

3 个答案:

答案 0 :(得分:2)

为面板上的所有标签添加相同的OnClick处理程序:

private void Form1_Load(object sender, EventArgs e)
{
    panel1.Controls.OfType<Label>().ToList().ForEach(l => l.Click += label_Click);
}

private void label_Click(object sender, EventArgs e)
{
    ChangeToTextbox(sender);
}

答案 1 :(得分:1)

找到所有控件然后只需通过代码添加处理程序;

List<Control> controls = GetAllMyControls();
foreach(Control control in controls)
{
   control.OnClick += (o, e) => { ChangeToTextBox(o); }
}

对于web和winform解决方案,语法应该非常相似。

答案 2 :(得分:1)

使用以下方法可以很容易地实现:请尝试一下,

1)转到Windows窗体设计器,然后单击第一个Label控件以将其选中。然后在单击其他每个标签时按住CTRL键以选择它们。确保选择了每个标签。

2)然后转到“属性”窗口中的“事件”页面。向下滚动到Click事件,然后在框中键入label_Click

3)按ENTER。 IDE将一个名为label_Click()的Click事件处理程序添加到代码中,并将其挂钩到每个标签。

private void label_Click(object sender, EventArgs e)
{
   ChangeToTextbox(sender);
}

参考:http://msdn.microsoft.com/en-us/library/dd553231.aspx