2014-02-05 246 views
1

我想重新創建一個mac風格的菜單欄是visual studio 2012上的c#。我可以在mouseEnter上移動圖像並將其移回到mouseLeave上的原始位置。我通過設置picturebox的位置來做到這一點。在鼠標懸停上移動圖像

我遇到的問題是當鼠標輸入圖像時,如果我將鼠標放在舊圖像位置底部和新圖像位置底部之間的圖像底部區域,圖像將不斷在兩個位置。

任何人都可以建議如何阻止或避免它。

private void pic1_MouseEnter(object sender, EventArgs e) 
{ 
    pic1.Location = new Point(328, 300); 
} 

private void pic1_MouseLeave(object sender, EventArgs e) 
{ 
    pic1.Location = new Point(328, 316); 
} 
+0

我想在WinsForms中做到這一點 –

+0

總是讚賞某種反饋(評論/ upvote /標記正確答案)。 –

回答

1

真實的,因爲移動圖像觸發MouseLeave事件,發表回調將其發送到原來的位置,從而引發MouseEnter等等,直到永遠(除非你把鼠標移動的距離)。

我建議你消除鼠標離開回調並保持該圖像是一個狀態:

private bool retracted = false; 
private void pic1_MouseEnter(object sender, EventArgs e) 
{ 
    if (retracted) 
    { 
     pic1.Location = new Point(328, 316); 
    } 
    else 
    { 
     pic1.Location = new Point(328, 300); 
    } 
    retracted = !retracted; 
} 
2

嘗試在移動圖像位置之前分離事件處理程序,然後再將其附加回來。事情是這樣的:

private void pic1_MouseEnter(object sender, EventArgs e) 
{ 
    pic1.MouseEnter -= pic1_MouseEnter; 
    pic1.MouseLeave -= pic1_MouseLeave; 

    pic1.Location = new Point(328, 300); 

    pic1.MouseEnter += pic1_MouseEnter; 
    pic1.MouseLeave += pic1_MouseLeave; 
} 
+0

乾杯,但跳躍的效果仍然存在。 –

1

感謝所有的解決方案,但沒有取得預期的效果,但我已經想出了使用mouseHover和解決方案鼠標離開。懸停時,將圖像移動到所需的位置,然後將其返回到原始位置。

private void pic1_MouseLeave(object sender, EventArgs e) 
    { 
     pic1.Location = new Point(328, 316); 
    } 

    private void pic1_MouseHover(object sender, EventArgs e) 
    { 
     pic1.Location = new Point(328, 310); 
    }