2014-02-06 69 views
1

我試圖創建一個特效,因此當用戶將鼠標懸停在圖片框上時,該按鈕會淡入到hoverimage,並且當它們離開時,它會淡出到原始位置。我在程序中使用圖片框作爲按鈕。我這樣做是因爲所有按鈕都是沒有按鈕紋理的圖片,所以我沒有看到使用按鈕的重點。只是讓你可以想像它,這裏是原始圖像:如何使用圖片框創建淡入淡出按鈕效果

enter image description here

而且圖像褪色:

enter image description here

我仍然可以改變這些圖像的一點,但多數民衆贊成在大概的概念。

我該如何去創造這種淡化效果?我使用計時器和不透明度設置來描繪某些東西,但我不知道這些東西是如何幫助我解決這個問題的。 E:我有一些代碼我有。當我懸停時,它會從圖像變成圖像,但它不會褪色,而且看起來非常波濤洶涌。

private void pictureBox3_MouseEnter(object sender, EventArgs e) 
    { 
     pictureBox3.Image = pictureBox37.Image; 
    } 

    private void pictureBox3_MouseLeave(object sender, EventArgs e) 
    { 
     pictureBox3.Image = pictureBox38.Image; 
    } 

pictureBox37 and pictureBox38是看不見的參考pictureboxes與我所需要的圖像。

+0

http://social.msdn.microsoft.com/Forums/windows/en-US/2b4c5c41-8f3c-4e81-9169-78082b80c747/gdic-transition-between -two-images?forum = winforms –

回答

1

我不認爲有這種動畫的任何WinForms支持,所以你必須手動執行此操作。如果您有多個這些按鈕,我建議使用此功能創建您自己的UserControl。我可以給你一些指點如何做到這一點:

  • 你的用戶控件將有兩個圖片的屬性,一個是正常的,一個用於懸停圖像
  • 你必須重寫OnPaint方法做你的自己的自定義繪畫,根據position屬性將這兩個圖像混合到您的圖形中。這是一個浮點,其中0表示正常圖像,1表示懸停圖像。中間的任何值意味着這兩個圖像的混合。我發現一些很好的混合代碼here
  • 然後,你需要一個定時器來動態更新這個位置並重新繪製按鈕(通過調用Invalidate)。我推薦使用Windows.Forms.Timer,它的優點是它的Tick事件總是在主線程上執行,所以你不必使用Invoke來修改你的控件。
  • 最後但並非最不重要的是,您重寫了OnMouseEnter和OnMouseLeave方法,將其全部設置爲運動。這些方法可以設置一個positionChange屬性,指示position正在更改哪個方向。

希望這有助於...

+0

這可能和它一樣好。 – DonBoitnott