Visual Studio 2010 - C#UserControl事件触发
问题描述:
我试图在Visual Studio 2010中制作基于网格的地牢系统。我有一个主要的用户控件,其中包含64个其他较小的用户控件对象,我称之为GridSquares,组织成8x8网格。网格广场背后的想法是充当“地下城”内潜在的运动空间。我目前遇到的问题是我需要能够在用户控件(GridSquares)上自己调用点击事件,这些事件已放置在屏幕上,因此我可以检索它们的坐标(名称)以进行比较。然而,当我打电话时(通过点击)该事件不起作用。Visual Studio 2010 - C#UserControl事件触发
我知道,当我把它们放在usercontrol(GridSquare对象)内时,这些事件工作,但当用户控件本身被点击时,我甚至需要点击来工作。
鉴于所有放置的64个对象都是相同的类型,我不能在GridSquare类中工作,因为我需要通过事件返回用户控件的名称。
我希望这是有道理的,但请询问是否需要进一步解释。
非常感谢,利亚姆
编辑: 我不知道有多少,这将有助于或显示什么代码,但GridSpace控制已经被添加到“地牢”用户控制。然后,我将所有64添加到字典中:
gridSpaces.Add(gs11.Name, gs11);
其中gs11是GridSquare的名称。
从这里我试图创建事件处理程序为地牢屏幕上的个人用户控件,未能调用。
答
我觉得我得到了你的说法。此代码添加到您的用户控件:
public new event EventHandler Click {
Add {
base.Click += value;
foreach(Control i in Controls) {
i.Click+=value;
}
}
remove {
base.Click -= value;
foreach(Control i in Controls) {
i.Click -= value;
}
}
}
这会在你的用户控件,我希望我没有做任何的错误,单击事件添加到的一切,这有助于
答
您可以使用每个GridSquare
相同的处理程序,并使用sender
参数来决定被点击了其中一个:
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 64; i++)
{
GridSquare square = new GridSquare();
square.Click += new EventHandler(gridSquare_Click);
grid.Add(gridSquare);
}
}
void gridSquare_Click(object sender, EventArgs e)
{
GridSquare square = (GridSquare)sender;
// do something cool with the clicked square here
}
Windows窗体或WPF? – 2012-04-17 13:48:39
我正在使用Windows Forms – Lazz 2012-04-17 14:07:45
你能发表一些代码吗? – 2012-04-17 14:33:09