2015-08-03 1 views
4

Я думаю, что это глупый вопрос, но я не понимаю, что здесь происходит.Сделать PictureBox видимым/непонятным с помощью MouseHover

Я использую этот код:

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 меняет цвет на черный цвет, если мышь находится над PictureBox, но видимость не меняется. Зачем?

+2

Я полагаю, что событие MouseLeave вызывается, когда вы устанавливаете видимость видимого окна. – Graffito

+0

Мне нужно нажать и нажать кнопку, чтобы исчезнуть. после того, как я не нажимаю кнопку мыши, нажмите на картинку, чтобы снова увидеть \t , но я не понимаю, почему .... почему мне нужно нажимать кнопку, когда я использую событие MouseHover ???? – RedoColor

+1

Это так же, как Graffito говорит: «Когда PB больше не __visible__, мышь больше не над ним. Поэтому MouseLeave запускается сразу. Если вы используете MouseEnter, вы получите мерцание, но MouseHover не будет вызываться без перемещения мыши. BTW: Я не могу ни думать о простом решении, ни о какой причине, почему в первую очередь нужно было бы написать такую ​​вещь. – TaW

ответ

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

... 

} 
+0

Это не проблема, а не решение. Вы должны проверить код, который вы публикуете ..! – TaW

+1

@TaW просто протестировал его, и он работает. Управление исчезает, и с помощью Hover он не делает – Fabjan

+0

На самом деле это не работает. Это только заставляет вас думать, что это так. Чтобы доказать это, добавьте 'Text + =" + ";' в 'MouseEnter' и' Text + = "-"; 'в' MouseLeave', и вы увидите, как он мерцает много, форма tittle получит много таких '' + - + - + -... "' только на одной мыши, перемещающейся внутри. Но вы этого не видите, потому что он становится невидимым быстрее, чем перерисовывается по некоторым причинам (чего я не знаю). – Sinatr

1

Я думаю, ваша проблема в том, как только вы наведете картину, действительно исчезает (это почему вы видите, что задний цвет превращается в черный, событие срабатывает). Однако изображение исчезает, что приводит к ситуации, когда ваша мышь больше не на картинке, поэтому стрельба Mouse_Leave.