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#_Onclick_Label - Fatal编程技术网

C# 事件,该事件将侦听表单中的任何标签单击

C# 事件,该事件将侦听表单中的任何标签单击,c#,onclick,label,C#,Onclick,Label,嗯,我在做一个基于标签的国际象棋游戏。我需要监听标签点击,所以当用户点击标签时,我得到他点击的标签的名称。我知道我可以为每个标签做这件事,但是否有一个通用事件可以帮助我在一个事件/循环中为所有标签做同样的事情?您可以使用 结构对标签进行分组,然后在该面板上调用所需的事件,以便在单击其中一个元素时触发该事件 另一个解决方案是用鼠标点击的坐标来识别标签(当然,所需的代码量取决于您放置它们的方式)。如注释中所述,您可以将一个事件分配给所有 List<Label> lbls = this.

嗯,我在做一个基于标签的国际象棋游戏。我需要监听标签点击,所以当用户点击标签时,我得到他点击的标签的名称。我知道我可以为每个标签做这件事,但是否有一个通用事件可以帮助我在一个事件/循环中为所有标签做同样的事情?

您可以使用 结构对标签进行分组,然后在该面板上调用所需的事件,以便在单击其中一个元素时触发该事件


另一个解决方案是用鼠标点击的坐标来识别标签(当然,所需的代码量取决于您放置它们的方式)。

如注释中所述,您可以将一个事件分配给所有

 List<Label> lbls = this.Controls.OfType<Label>().ToList();

 foreach (var lbl in lbls)
 {
     lbl.Click += lbl_Click;
 }

 void lbl_Click(object sender, EventArgs e)
 {
     Label lbl = sender as Label;

     MessageBox.Show(lbl.Name);
 }
List lbls=this.Controls.OfType().ToList();
foreach(lbl中的变量lbl)
{
lbl.Click+=lbl\u Click;
}
无效lbl_单击(对象发送者,事件参数e)
{
标签lbl=发送者作为标签;
MessageBox.Show(lbl.Name);
}

您可以将这些方法分配给需要在VS表单设计器中管理的每个标签(您转到控件事件,在单击行选择列表中的方法,而不是双击):

如果您需要,可以添加光标更改以方便使用


如果要动态分配事件,可以使用@caner answer,并且可以将面板中的所有对象分组,以分析panel.Controls并分配事件。

您可以创建一个从
标签继承的自定义标签类。然后,您可以订阅基类的
单击
事件并执行您的操作

public class MyLabel : Label
{
    public MyLabel()
    : base()
    {
        Click += ProcessClickEvent;
    }

    private void ProcessClickEvent(object sender, System.EventArgs e)
    {
        // Do what you want to do
    }
}

假设您使用了64个标签


在windows窗体中,单击Label1的事件,您将编写以下代码:



对于其余63个标签,在设计视图中,使用Ctrl键-->转到属性窗口-->在事件选项下选择单击选项-->从下拉列表中选择“标签1\u单击”选项,选择所有63个标签



只需完成并运行应用程序。

您可以在VS forms designer的属性中同时将一个事件分配给多个标签。您可以按代码解析控件(例如窗体或面板)的控件列表的标签,并为同一委托指定哪些标签。你想做什么?嗯,我的英语不是很好,但我会尽力解释的。我需要一个当用户单击任何标签时触发的事件,该事件将告诉我用户单击的标签的名称。
public class MyLabel : Label
{
    public MyLabel()
    : base()
    {
        Click += ProcessClickEvent;
    }

    private void ProcessClickEvent(object sender, System.EventArgs e)
    {
        // Do what you want to do
    }
}
private void Label1_Click(object sender, EventArgs e)
{
    var label = sender as Label;
    MessageBox.Show(label.Name);
}