繁体   English   中英

为任何面板C#制作事件

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

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