我一直在玩游戏的想法,并且实现进行得相当顺利,但是我碰到了一个绊脚石。在C#中创建自定义标签并在事件中传递数据
基本上,我有一个表格,它会显示天赋树。我只是要使用标签来显示相关的细节,我想以编程方式创建它们。显示部分工作正常,我遇到的问题是向标签添加事件处理程序。
我希望能够在事件处理过程中传递数据,以便我可以识别哪个特定的标签被点击,但我正在打砖墙。所以当一个特定的标签被点击时,其关联技能的名称(只是传递一个字符串)将被发送到事件处理程序。任何帮助,将不胜感激。下面是相关的代码,我有:
public void DisplayTree()
{
int i=0;
startPoint.X = 40;
startPoint.Y = 125;
foreach(SkillNode s in tree.tier1)
{
for (i=0; i < s.labels.Count;i++)
{
//Displays a label for each available rank for a skill
s.labels.ElementAt(i).Text = (i+1).ToString()+"/"+s.maxRank.ToString();
s.labels.ElementAt(i).Location = startPoint;
startPoint.Y += s.labels.ElementAt(i).Height + 2;
s.labels.ElementAt(i).Name = "lbl"+s.name+i.ToString();
//Only enable it to be clicked if the user is at the correct rank
if (s.rank == i)
{
s.labels.ElementAt(i).Enabled = true;
}
else
{
s.labels.ElementAt(i).Enabled = false;
}
//Add Event here
//I want to pass the name of the skill with the event
this.Controls.Add(s.labels.ElementAt(i));
}
startPoint.X += s.title.Width + 5;
startPoint.Y = 125;
}
}
public void LabelClick()
{
//Code here to pick out the name of the label
}
如果你将'Click'处理程序附加到一个标签,那么第一个参数通常是'sender',它是发送event_的对象。 –
谢谢你回复马特。我最初是这样做的,但我无法将自定义数据添加到它。有没有办法附加额外的数据? – rm46
Winforms和WPF控件都有一个'Tag'属性,您可以指定任意对象。但是,请注意,这不是执行这些事情的特别好方法。正确的方法是使用数据绑定并拥有MVC或MVVM模型。但这超出了简单答案的范围。 –