Visual Studio 2010 - C# UserControl 事件触发
本文关键字:事件 UserControl Studio 2010 Visual | 更新日期: 2023-09-27 18:31:34
我目前正在尝试在Visual Studio 2010中制作一个基于网格的地下城系统。我有一个主用户控件,其中包含 64 个其他较小的用户控件对象,我称之为 GridSquares,组织成一个 8x8 网格。网格方块背后的想法是充当"地牢"内的潜在移动空间。我目前遇到的问题是,我需要能够在用户控件(GridSquares)本身上调用单击事件,这些控件已放置在屏幕上,以便我可以检索它们的坐标(名称)进行比较。但是,当我调用它(通过单击)时,该事件不起作用。
我知道当我将它们放置在用户控件(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;
}
}
}
这会将 Click 事件添加到用户控件中的所有内容中,我希望我没有犯任何错误,并且这有助于
您可以对每个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
}