c# 為你的Form實現動畫的效果

來源:互聯網
上載者:User

在WPF中可以很方便的實現動畫的效果,而在普通的WinForm程式裡實現卻有點麻煩,這裡我用一種類比的方式來實現WinForm有關的動畫

回憶一下在WPF中動畫效果的實現,首先建立一個故事板 Storyboard,然後建立一個動畫 Animation,並把要產生動畫的屬性與Animation綁定後添加到故事板,最後執行,得到了我們想要的效果,這裡我們只考慮線性變化效果

這裡我主要是用來改變WinForm上控制項的大小位置來產生一些動畫的效果 。

一 StoryBoard 故事板

    由於是要控制介面上的面板所以需要非同步來改變介面控制項的一些屬性  。而動畫效果需要一個定時器來迴圈的執行產生動畫的效果 。所以首先用Start函數來開啟一個線程,然後線上程sta()中開啟一個定時器用來執行相關的操作  這裡我設定的定時器執行一次為8毫秒.

timeInt為一個靜態變數來作為計數器判斷定時器執行了多少次當執行完成的時候歸零。_control為建構函式裡傳入的執行的面板控制項 可以是一個Form或Control。然後讓

_control.BeginInvoke(new Sta(too));

通知介面改變。代碼如下

 

 

  

最後一步中迴圈執行的ControlAnimation用來儲存動畫執行的相關資訊

其中包括了動畫的效果animation 要綁定的控制項 control  繫結控制項的屬性值  我們看too()函數中利用

              PropertyInfo value = tp.GetProperty(a.name);
              if (value != null)
              {
                  value.SetValue(a.control, a.animation.Change(), null);
              }

來實現給屬性的賦值。

 

最後就是實現動畫   ,主要是儲存起始值From 結束值To 所需要的事件Time這三個值,傳入這三個值後,求出需要變化的Num,實現每次變化Change()的值,

代碼如下:

 

 

這樣就簡單的完成了一個類比動畫效果的類 :看看AnimationPoint類,只是用類兩個AnimationInt類來實現的,當然也可以用三個來實現一個Color類。。。

好我們來調用一下

       

看看我實現了一個控制項的位置在200毫秒的時間位置向後移動了200和向移動200的位置。效果如下 :

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.