使用MouseHover使PictureBox可见/不可见

时间:2015-08-03 14:32:03

标签: c# winforms visibility mouseleave

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

我使用此代码:

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用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;
    }

...

}

答案 1 :(得分:1)

我认为你的问题是,只要你徘徊在图片上它就会消失(这就是为什么你看到背面颜色变成黑色,事件发生了)。然而,图片消失,导致鼠标不在图片上的情况,因此Mouse_Leave事件被触发。