使用鼠标悬停使PictureBox可见/不可见

本文关键字:PictureBox 鼠标 悬停 可见 | 更新日期: 2023-09-27 18:06:18

我认为这是一个愚蠢的问题,但我不明白这里发生了什么。

我使用以下代码:

   private void pictureBox1_MouseHover(object sender, EventArgs e)
    {
        pictureBox1.Visible = false;
        pictureBox1.BackColor = Color.Black;
    }
    private void pictureBox1_MouseLeave(object sender, EventArgs e)
    {
        pictureBox1.Visible = true;
    }

问题是:如果鼠标在图片框上,图片框将颜色变为黑色,但可见性没有改变。为什么?

使用鼠标悬停使PictureBox可见/不可见

我认为你的问题是一旦你悬停的图片,它真的消失了(这就是为什么你看到的背面颜色变成黑色,事件正在发射)。然而,图片消失,导致你的鼠标不在图片上的情况,因此Mouse_Leave事件触发。

您可以使用MouseEnter事件代替MouseHover和bool字段isHover,您可以使用它们来尝试减少闪烁:

public partial class Form1: Form
{
    bool isHover = false;
    private void pictureBox1_MouseEnter(object sender, EventArgs e)
    {
        if(isHover) return;
        // with MouseHover this control visibility appears to be locked with MouseEnter it is not
        pictureBox2.Visible = false;
        pictureBox2.BackColor = Color.Black;
    }
    private void pictureBox1_MouseLeave(object sender, EventArgs e)
    {            
        if(!isHover) return;
        isHover = false;
        pictureBox2.Visible = true;
    }
...
}