C# 如何确定事件内的标签索引。

C# 如何确定事件内的标签索引。,c#,controls,C#,Controls,我有一个标签列表,作为小游戏的一部分,这些标签表示动态创建的网格条。有问题的标签是下图中红色的元素 我有两个循环,每个循环将创建一个标签。第一个循环创建垂直标签,另一个循环创建水平标签 // Build the next grid unit lblGridUnit = new Label { Location = new Point(CurrentX, CurrentY), BackColor = Color.Red, AutoSize = false, //

我有一个
标签列表
,作为小游戏的一部分,这些标签表示动态创建的网格条。有问题的标签是下图中红色的元素

我有两个循环,每个循环将创建一个标签。第一个循环创建垂直标签,另一个循环创建水平标签

// Build the next grid unit
lblGridUnit = new Label
{
    Location = new Point(CurrentX, CurrentY),
    BackColor = Color.Red,
    AutoSize = false,
    // The unit will be the size and width as defined by variables. Since this units are vertical the width and height are reversed. 
    Size = new Size { Width = gridUnitHeight, Height = gridUnitWidth },
    Text = ""
};

lblGridUnit.Click += new EventHandler ( label_Click);

// Add the label the list and attach it to the form
gridUnits.Add(lblGridUnit);
ParentForm.Controls.Add(lblGridUnit);
我有一个非常基本的事件
label\u Click
,我正在使用它进行测试

private void label_Click(object sender, EventArgs e)
{
    Label clickedLabel = sender as Label;

    if (clickedLabel != null)
    {
        clickedLabel.BackColor = Color.Aquamarine;
    }
    else
    {
        MessageBox.Show("Null");
    }
}
我可以使用事件与特定标签交互,也可以使用列表
gridUnits
查找特定标签。例如:
GameBoard.GridUnits[5]。BackColor=Color.Blue

问题是我制作了这个列表,这样我就可以使用特定标签的索引来知道它在网格中的位置,并确定相邻的网格单元。如何让事件知道其在
列表中的索引

我还没有给我的任何控件命名,所以我想我可以用数字后缀来命名它们,但这似乎是一个难题,所以我想知道是否还有其他选择。事实上,直到几天前才开始编写c#代码

控件具有为此目的而设计的属性—存储任意数据段,使您可以直接或通过某个id/名称将控件映射到模型

因为您已经使用代码设置
标记
到网格索引或其他更方便的值创建了所有标签,所以这很简单

请注意,由于
Tag
属于
object
类型,所以需要将其转换为正确的数据类型。如果具有非常通用的单击处理程序,则更喜欢将
target.Tag作为MyType
而不是
(MyType)target.Tag)
,因为在使用
as
控件时,可以检查空值。控件具有为此目的而设计的属性—存储任意数据段,使您可以直接或通过某个id/名称将控件映射到模型

因为您已经使用代码设置
标记
到网格索引或其他更方便的值创建了所有标签,所以这很简单


请注意,由于
Tag
属于
object
类型,所以需要将其转换为正确的数据类型。如果具有非常通用的单击处理程序,则更喜欢将
target.Tag作为MyType
而不是
(MyType)target.Tag)
,因为在使用
作为
时可以检查null。那就行了。因此,在构建属性时,使用索引填充该属性。这张单子有点多余,所以我想我根本不需要它。听起来像是对我的回答。使用
lblGridUnit.Name
来确定每个
标签的索引如何?@HariPrasad我曾经提到过这是一种可能性,但使用
标记
似乎比试图从名称中解析整数更简单。@AlexeiLevenkov是的。那就行了。因此,在构建属性时,使用索引填充该属性。这张单子有点多余,所以我想我根本不需要它。听起来像是对我的回答。使用
lblGridUnit.Name
来确定每个
标签的索引如何?@HariPrasad我曾经提到过,作为一种可能性,但是使用
tag
似乎比试图从名称中解析整数更简单。我已经用index属性创建了自己的用户控件。不需要,因为标签已经存在。感谢您为我指出这一点。我已经用索引属性创建了自己的用户控件。不需要,因为标签已经存在。谢谢你为我指出这一点。