繁体   English   中英

Visual Studio 2010-C#UserControl事件触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM