适用于面板

时间:2016-02-17 17:57:32

标签: c# controls panels

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

到目前为止,我已经制作了这些方法:

    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;
    }

这些工作正常,但在运行系统时,只有当鼠标悬停在标签或图片框 覆盖的部分面板上时,这些方法才会运行。

当鼠标悬停在面板内的区域(由标签或图片框覆盖)上时,如何更改此项,背景图像会发生变化?

1 个答案:

答案 0 :(得分:1)

解决这个问题的可能性是无穷无尽的。这是一种方式。

输入&离开

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;

    }
}