C# - 在多个动态创建的用户控件上捕获事件
C# - Capture event on multiple dynamically created user controls
我有一个包含 4 个标签的用户控件。
我用这个用户控件的多个副本动态填充一个面板(一个用于数据库中的每个条目)。
我想捕获任何一个用户控件上的单击事件并获取与其关联的 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;
}
有没有人能推荐一些代码,我可以用它来捕获点击事件(用户控件上的任何地方)并从控制哪个被点击?
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
如果我点击任何一个浅灰色背景,点击事件就会被触发,我就可以抓取灯具事件ID。但是,如果我单击任何标签或图片框,则不会触发该事件。
无论单击控件的哪一部分,我仍然需要捕获夹具 eventID。有任何想法吗?
你应该能够在输入 cast
后从 sender
获取数据
public void Fixture_Click(object sender, EventArgs e)
{
var ctrl = ((TeamVsTeam.TeamVsTeam)sender);
int ID = ctrl.eventID;
}
我有一个包含 4 个标签的用户控件。 我用这个用户控件的多个副本动态填充一个面板(一个用于数据库中的每个条目)。 我想捕获任何一个用户控件上的单击事件并获取与其关联的 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;
}
有没有人能推荐一些代码,我可以用它来捕获点击事件(用户控件上的任何地方)并从控制哪个被点击?
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
如果我点击任何一个浅灰色背景,点击事件就会被触发,我就可以抓取灯具事件ID。但是,如果我单击任何标签或图片框,则不会触发该事件。 无论单击控件的哪一部分,我仍然需要捕获夹具 eventID。有任何想法吗?
你应该能够在输入 cast
后从sender
获取数据
public void Fixture_Click(object sender, EventArgs e)
{
var ctrl = ((TeamVsTeam.TeamVsTeam)sender);
int ID = ctrl.eventID;
}