适用于面板中所有控件的 C# 方法

C# Method applying to all controls in a panel

我正在尝试开发一个系统,用户可以在其中滚动浏览 flowLayoutPanel,其中包含面板上的列表(动态创建)。每个面板都有一个图片框和两个标签。 当用户将鼠标悬停在面板上时,我希望面板的背景图像发生变化。

到目前为止我已经做了这些方法:

    private void pnlMouseHover(object sender, EventArgs e)
    {
        Panel panel1 = sender as Panel;
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackgroundmouseover;
    }
    private void pnlMouseLeave(object sender, EventArgs e)
    {
        Panel panel1 = sender as Panel;
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackground;
    }

这些工作得很好,但是当 运行 在系统中使用这些方法时 运行 当鼠标悬停在面板的一部分时 而不是 被标签或图片框覆盖。

如何更改此设置,以便当鼠标悬停在面板内被标签或图片框覆盖的区域时,背景图像会发生变化?

解决这个问题的可能性是无限的。这是一种方法。

进入&离开

将您的 panel_Hover 事件更改为 panel_Enter,这样事件就不会持续触发。

有条件退出

删除图片前检查指针的位置。

private void pnlMouseLeave(object sender, EventArgs e)
{
    Panel panel1 = sender as Panel; // ← Your code

    Point mousePosition = PointToClient(Control.MousePosition);
    bool hasPointerInside = panel1.ClientRectangle.Contains(mousePosition);

    if (!hasPointerInside)
    {
        // Your code ↓
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackground;

    }
}