C# - 在多个动态创建的用户控件上捕获事件

时间:2015-09-30 12:35:51

标签: c# events controls

我有一个包含4个标签的用户控件。 我使用此用户控件的多个副本动态填充面板(数据库中的每个条目一个)。 我想在任何一个用户控件上捕获click事件并获取与之关联的id。

这是我的用户控件中包含的代码:

public partial class TeamVsTeam: UserControl
{
    public TeamVsTeam()
    {
        InitializeComponent();
    }

    public int eventID { get; set; }
    public int idHomeTeam { get; set; }
    public int idAwayTeam { get; set; }
}

在我的应用程序中,我填充了一个包含多个控件的面​​板:

TeamVsTeam.TeamVsTeam[] teamLabel = new TeamVsTeam.TeamVsTeam[n];

for (int i = 0; i < m_fixtures.lstTeams.Count; i++)
{
    teamLabel[i] = new TeamVsTeam.TeamVsTeam();

    teamLabel[i].eventID = m_fixtures.lstTeams[i].idEvent;

    teamLabel[i].lblHome.Text = m_fixtures.lstTeams[i].homeTeam.ToString();
    teamLabel[i].lblAway.Text = m_fixtures.lstTeams[i].awayTeam.ToString();

    teamLabel[i].Clicked += new EventHandler(Fixture_Click);

   //Location
    teamLabel[i].Top = 80 * i;
    teamLabel[i].Parent = panel1;
}

是否有人能够推荐一些我可以用来捕获点击事件的代码(在用户控件的任何位置)并从控件中获取eventIDhomeTeamawayTeam被点击了?

    public void Fixture_Click(object sender, EventArgs e)
    {
        var ctrl = ((TeamVsTeam.TeamVsTeam)sender);
        int ID = ctrl.eventID;
        MessageBox.Show(ID.ToString());
    }

修改 我已经更新了上面的代码,以显示我现在正在使用的内容,但是,它并没有完全解决我的问题。

以下是完全填充的用户控件(3个标签和2个图片框)的示例

https://www.dropbox.com/s/0tidlarzfoy6j2u/2015-09-30%2015_48_35-Super-6.jpg?dl=0

如果我点击任何浅灰色背景,则会触发点击事件,我可以抓住夹具eventID。但是,如果我点击任何标签或图片框,则不会触发该事件。 无论单击控件的哪个部分,我仍然需要捕获fixture eventID。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您应该能够在输入

之后从sender获取数据
public void Fixture_Click(object sender, EventArgs e)
{
     var ctrl = ((TeamVsTeam.TeamVsTeam)sender);
     int ID = ctrl.eventID;
}