[英]Visual Studio 2010 - C# UserControl event firing
目前,我正在尝试在Visual Studio 2010中构建基于网格的地牢系统。我有一个主用户控件,其中包含64个其他较小的用户控件对象(我称为GridSquares),组织为8x8网格。 网格正方形背后的想法是充当“地牢”内潜在的移动空间。 我目前遇到的问题是,我需要能够调用用户控件(GridSquares)本身的click事件,该控件已放置在屏幕上,因此我可以检索其坐标(名称)以进行比较。 但是,当我调用该事件(通过单击)时,该事件不起作用。
我知道,将事件放在用户控件(GridSquare对象)中时,这些事件就起作用了,但是当用户控件本身被单击时,甚至需要单击才能起作用。
鉴于所有放置的64个对象都是同一类型,因此我无法在GridSquare类中工作,因为我要求通过事件返回用户控件的名称。
我希望这是有道理的,但请问是否需要进一步解释。
非常感谢,利亚姆
编辑:我不确定这将有多少帮助或要显示什么代码,但GridSpace控件已被添加到“地牢”用户控件中。 然后在其中将所有64个添加到字典中:
gridSpaces.Add(gs11.Name, gs11);
其中gs11是GridSquare的名称。
从这里开始,我尝试在地牢屏幕上为单个用户控件创建事件处理程序,但调用失败。
您可以对每个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
}
我想我明白你的意思。 将此代码添加到您的用户控件:
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;
}
}
}
这会将click事件添加到用户控件中的所有内容,我希望我没有犯任何错误,这对您有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.