[英]Make event for any panel c#
所以我有一个面板矩阵 (将来可能会更改为“图片框”),而我想要的是,每次我在按下工具箱上的按钮后按下其中一个面板时,都会将其背景更改为特定图片。
现在我所拥有的是:
private void EtapaInicial_Click(object sender, EventArgs e)
{
EtapaInicialWasClicked = true;
}
private void panel_Click(object sender, EventArgs e)
{
if (EtapaInicialWasClicked)
{
panel1.BackgroundImage = Symbols.EtapaInicialbm;
EtapaInicialWasClicked = false;
}
}
我要更改的是panel1以使其适用于每个面板(否则,它将仅独立于我单击的面板更改panel1),这可能吗?
尝试以下
private void EtapaInicial_Click(object sender, EventArgs e)
=> EtapaInicialWasClicked = true;
private void panel_Click(object sender, EventArgs e)
{
if (EtapaInicialWasClicked)
{
(sender as Panel).BackgroundImage = Symbols.EtapaInicialbm;
EtapaInicialWasClicked = false;
}
}
是的。 您必须遍历每个面板并分配相同的事件处理程序,但必须在事件处理程序本身中进行一些更改
foreach(var p in allPanels)
{
p.Click += panel_Click;
}
然后像这样更改事件处理程序
private void panel_Click(object sender, EventArgs e)
{
var p = (Panel)sender;
if (EtapaInicialWasClicked)
{
p .BackgroundImage = Symbols.EtapaInicialbm;
EtapaInicialWasClicked = false;
}
}
请记住, sender
参数包含对引发事件的实际控件的引用,但是必须首先强制转换它才能使用它。
但是,如果您想为刚刚处理的事件存储更多数据,则可以使用panel.Tag
属性。 例如,这可以用于存储EtapaInicialWasClicked
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.