最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)winform窗口抖動(dòng)效果的示例代碼

 更新時(shí)間:2024年12月16日 10:06:35   作者:caifox  
在WinForms應(yīng)用程序中,實(shí)現(xiàn)窗口抖動(dòng)效果可以為用戶界面增添一些趣味性和互動(dòng)性,想象一下,當(dāng)你點(diǎn)擊一個(gè)按鈕時(shí),窗口會(huì)輕微地“顫抖”幾下,就像它在對(duì)你表示不滿或提醒你注意某些事情,這個(gè)效果可以通過定時(shí)改變窗口的位置來實(shí)現(xiàn),需要的朋友可以參考下

1. 創(chuàng)建 WinForms 項(xiàng)目

首先,確保你已經(jīng)創(chuàng)建了一個(gè) WinForms 項(xiàng)目。如果你還沒有創(chuàng)建,請(qǐng)按照以下步驟操作:

  • 打開 Visual Studio。
  • 選擇“創(chuàng)建新項(xiàng)目”。
  • 選擇“Windows Forms App (.NET Framework)”或“Windows Forms App (.NET Core/.NET 6+)”,然后點(diǎn)擊“下一步”。
  • 輸入項(xiàng)目名稱,選擇保存位置,然后點(diǎn)擊“創(chuàng)建”。

2. 添加按鈕和事件處理程序

接下來,我們?cè)诖绑w上添加一個(gè)按鈕,并為其添加點(diǎn)擊事件處理程序。當(dāng)用戶點(diǎn)擊按鈕時(shí),我們將觸發(fā)窗口抖動(dòng)效果。

  • 在設(shè)計(jì)器中,從工具箱中拖拽一個(gè) Button 控件到窗體上。
  • 雙擊按鈕,Visual Studio 會(huì)自動(dòng)生成按鈕的點(diǎn)擊事件處理程序。

3. 實(shí)現(xiàn)窗口抖動(dòng)效果

我們可以通過定時(shí)改變窗口的位置來實(shí)現(xiàn)抖動(dòng)效果。具體來說,我們可以使用 System.Windows.Forms.Timer 來定期移動(dòng)窗口的位置,使其在水平方向上左右移動(dòng),從而產(chǎn)生抖動(dòng)的效果。

以下是完整的代碼示例:

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowShakeEffect
{
    public partial class Form1 : Form
    {
        private Timer shakeTimer;
        private int shakeCount = 0;
        private const int shakeTimes = 5; // 抖動(dòng)次數(shù)
        private const int shakeOffset = 5; // 抖動(dòng)偏移量
        private Point originalLocation;
 
        public Form1()
        {
            InitializeComponent();
            InitializeShakeTimer();
        }
 
        private void InitializeShakeTimer()
        {
            shakeTimer = new Timer();
            shakeTimer.Interval = 20; // 每20毫秒觸發(fā)一次
            shakeTimer.Tick += ShakeTimer_Tick;
        }
 
        private void btnShake_Click(object sender, EventArgs e)
        {
            // 保存原始位置
            originalLocation = this.Location;
            // 重置抖動(dòng)計(jì)數(shù)
            shakeCount = 0;
            // 啟動(dòng)定時(shí)器
            shakeTimer.Start();
        }
 
        private void ShakeTimer_Tick(object sender, EventArgs e)
        {
            if (shakeCount < shakeTimes * 2) // 乘以2是因?yàn)槲覀円笥腋鞫秳?dòng)一次
            {
                // 計(jì)算新的位置
                int newX = originalLocation.X + (shakeCount % 2 == 0 ? -shakeOffset : shakeOffset);
                this.Location = new Point(newX, originalLocation.Y);
                shakeCount++;
            }
            else
            {
                // 恢復(fù)原始位置并停止定時(shí)器
                this.Location = originalLocation;
                shakeTimer.Stop();
            }
        }
    }
}

4. 解釋代碼

  • InitializeShakeTimer():初始化一個(gè) Timer 對(duì)象,設(shè)置其間隔時(shí)間為 20 毫秒(即每 20 毫秒觸發(fā)一次),并為 Tick 事件添加處理程序 ShakeTimer_Tick。

  • btnShake_Click():這是按鈕的點(diǎn)擊事件處理程序。當(dāng)用戶點(diǎn)擊按鈕時(shí),保存當(dāng)前窗口的原始位置,重置抖動(dòng)計(jì)數(shù)器,并啟動(dòng)定時(shí)器。

  • ShakeTimer_Tick():這是定時(shí)器的 Tick 事件處理程序。每次定時(shí)器觸發(fā)時(shí),窗口會(huì)在水平方向上左右移動(dòng),移動(dòng)的距離由 shakeOffset 決定。抖動(dòng)次數(shù)由 shakeTimes 決定,每次抖動(dòng)包括向左和向右各移動(dòng)一次,因此總共抖動(dòng) shakeTimes * 2 次。抖動(dòng)結(jié)束后,窗口會(huì)恢復(fù)到原始位置,并停止定時(shí)器。

5. 運(yùn)行效果

當(dāng)你運(yùn)行這個(gè)程序并點(diǎn)擊按鈕時(shí),窗體會(huì)在水平方向上輕微地左右移動(dòng),產(chǎn)生抖動(dòng)的效果。你可以通過調(diào)整 shakeOffset 和 shakeTimes 來控制抖動(dòng)的幅度和次數(shù),以達(dá)到你想要的效果。

6. 進(jìn)一步優(yōu)化

如果你想讓抖動(dòng)效果更加自然,可以嘗試以下幾種優(yōu)化方法:

  • 隨機(jī)化抖動(dòng)方向:每次抖動(dòng)時(shí)隨機(jī)選擇向左或向右移動(dòng),而不是嚴(yán)格按照順序。

  • 添加垂直抖動(dòng):除了水平抖動(dòng)外,還可以在垂直方向上添加輕微的抖動(dòng),使效果更加立體。

  • 平滑過渡:使用 System.Windows.Forms.Timer 的 Interval 屬性來控制抖動(dòng)的速度,或者使用 System.Threading.Thread.Sleep 來實(shí)現(xiàn)更平滑的過渡效果。

  • 結(jié)合其他動(dòng)畫效果:你還可以結(jié)合其他動(dòng)畫效果,比如縮放、旋轉(zhuǎn)等,使窗口抖動(dòng)更加有趣。

另一種程序?qū)崿F(xiàn)的方法:

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private Timer timer;
        private int count = 0; //這是一個(gè)計(jì)數(shù)器,用于跟蹤當(dāng)前抖動(dòng)的次數(shù)。每次 Timer 觸發(fā)時(shí),count 會(huì)遞增。
        private int count_max = 10; //這是抖動(dòng)的最大次數(shù)。當(dāng) count 達(dá)到 count_max 時(shí),抖動(dòng)結(jié)束。
        private int X原始位置;   //抖動(dòng)開始時(shí)的X原始位置
        private int Y原始位置;   //抖動(dòng)開始時(shí)的Y原始位置
        public Form1()
        {
            InitializeComponent();
 
            // 記錄窗口移動(dòng)時(shí)的原始位置
            this.Move += (s, e) =>
            {
                if (!timer.Enabled)
                {
                    X原始位置 = this.Location.X;
                    Y原始位置 = this.Location.Y;
                }
            };
            timer = new Timer();
            timer.Tick += (s, e) =>
            {
                Point p = Location;
                if ((count & 1) == 0)
                {
                    p.Offset(2, 2);    // 向右下角移動(dòng)
                }
                else
                {
                    p.Offset(-2, -2);  // 向左上角移動(dòng)
                }
                Location = p;         // 更新窗口位置
                count++;
                if (count >= count_max)
                {
                    count = 0;
                    timer.Stop();         // 停止定時(shí)器
                    Location = new Point(X原始位置, Y原始位置);  // 恢復(fù)原始位置
                }
            };
            timer.Interval = 25;         // 設(shè)置定時(shí)器間隔為 25 毫秒
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!timer.Enabled)       //檢查定時(shí)器是否已經(jīng)啟動(dòng)。如果定時(shí)器沒有啟動(dòng),則允許啟動(dòng)抖動(dòng)效果。
            {
                timer.Start();          // 啟動(dòng)定時(shí)器
            }
        }
    }
}

實(shí)現(xiàn)方法:

  1. 初始化:當(dāng)窗體加載時(shí),Form1 構(gòu)造函數(shù)會(huì)被調(diào)用。它會(huì)初始化 Move 事件處理程序和 Timer,并設(shè)置定時(shí)器的間隔為 25 毫秒。

  2. 記錄原始位置:每當(dāng)窗體的位置發(fā)生變化時(shí),Move 事件處理程序會(huì)記錄窗口的當(dāng)前位置,作為抖動(dòng)前的原始位置。

  3. 啟動(dòng)抖動(dòng):當(dāng)用戶點(diǎn)擊按鈕時(shí),button1_Click 事件處理程序會(huì)被觸發(fā)。如果定時(shí)器沒有啟動(dòng),則啟動(dòng)定時(shí)器,開始抖動(dòng)效果。

  4. 抖動(dòng)過程:定時(shí)器每 25 毫秒觸發(fā)一次 Tick 事件,窗口會(huì)在水平和垂直方向上交替移動(dòng) 2 個(gè)像素,產(chǎn)生抖動(dòng)效果。抖動(dòng)次數(shù)由 count_max 控制,總共抖動(dòng) 10 次。

  5. 恢復(fù)原始位置:當(dāng)抖動(dòng)次數(shù)達(dá)到 count_max 時(shí),定時(shí)器停止,窗口恢復(fù)到抖動(dòng)前的原始位置。

這兩種方法都是通過使用 System.Windows.Forms.Timer 和簡單的數(shù)學(xué)運(yùn)算,輕松實(shí)現(xiàn) WinForms 窗口的抖動(dòng)效果。這個(gè)效果不僅增加了用戶的互動(dòng)體驗(yàn),還可以用于提醒用戶注意某些重要的信息或操作。你可以根據(jù)需要進(jìn)一步調(diào)整抖動(dòng)的幅度、速度和次數(shù),以達(dá)到最佳的效果。

以上就是C#實(shí)現(xiàn)winform窗口抖動(dòng)效果的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C# winform窗口抖動(dòng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式

    C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式

    C#中實(shí)現(xiàn)Json的序列化與反序列化也算是個(gè)老話題,那么在這篇文章中我們將老話重提,本文中將會(huì)學(xué)到如何使用C#,來序列化對(duì)象成為Json格式的數(shù)據(jù),以及如何反序列化Json數(shù)據(jù)到對(duì)象。有需要的朋友們可以參考借鑒,下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • C#跨PC遠(yuǎn)程調(diào)用程序并顯示UI界面

    C#跨PC遠(yuǎn)程調(diào)用程序并顯示UI界面

    這篇文章主要為大家介紹了使用C#跨PC遠(yuǎn)程調(diào)用程序并顯示UI界面,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C#使用SharpZipLib壓縮解壓文件

    C#使用SharpZipLib壓縮解壓文件

    這篇文章介紹了C#使用SharpZipLib壓縮解壓文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WPF實(shí)現(xiàn)篩選下拉多選控件的示例代碼

    WPF實(shí)現(xiàn)篩選下拉多選控件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)篩選下拉多選控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-06-06
  • 使用C#實(shí)現(xiàn)在word中插入頁眉頁腳的方法

    使用C#實(shí)現(xiàn)在word中插入頁眉頁腳的方法

    這篇文章主要介紹了使用C#實(shí)現(xiàn)在word中插入頁眉頁腳的方法,是操作Word的常見方法,有一定的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C#如何在Excel文檔中獲取分頁信息

    C#如何在Excel文檔中獲取分頁信息

    在日常工作中,我們經(jīng)常需要處理大量的Excel數(shù)據(jù),本文將深入探討如何利用 Spire.XLS for .NET ,高效準(zhǔn)確地獲取Excel文檔中的分頁信息,包括水平分頁符和垂直分頁符,感興趣的可以了解下
    2025-12-12
  • C#通過NPOI操作Excel的實(shí)例代碼

    C#通過NPOI操作Excel的實(shí)例代碼

    C#操作Excel的方法有很多種,本文介紹了C#通過NPOI操作Excel,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • 基于WPF實(shí)現(xiàn)驗(yàn)證碼控件

    基于WPF實(shí)現(xiàn)驗(yàn)證碼控件

    這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)一個(gè)簡單的驗(yàn)證碼控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-08-08
  • c#棧變化規(guī)則圖解示例(棧的生長與消亡)

    c#棧變化規(guī)則圖解示例(棧的生長與消亡)

    多數(shù)情況下我們不需要關(guān)心棧的變化,下文會(huì)給出一個(gè)具體的示例。另外,理解棧的變化對(duì)于理解作用域也有一定的好處,因?yàn)镃#的局部變量作用域是基于棧的。
    2013-11-11
  • 如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境詳解

    如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境詳解

    這篇文章主要給大家介紹了關(guān)于如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

广元市| 肥城市| 甘洛县| 东乌珠穆沁旗| 敖汉旗| 莫力| 彭山县| 新蔡县| 英吉沙县| 仁寿县| 龙海市| 澄城县| 鹿邑县| 丽江市| 广饶县| 峡江县| 开平市| 武定县| 隆化县| 滨海县| 禹州市| 五常市| 涿州市| 郓城县| 甘南县| 丰县| 分宜县| 常州市| 平顺县| 和平区| 奉化市| 河津市| 高陵县| 石嘴山市| 宁陕县| 古蔺县| 东安县| 海门市| 冕宁县| 浙江省| 和田县|