我一直在玩遊戲的想法,並且實現進行得相當順利,但是我碰到了一個絆腳石。在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模型。但這超出了簡單答案的範圍。 –