C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# winform窗口抖动

C#实现winform窗口抖动效果的示例代码

作者:caifox

在WinForms应用程序中,实现窗口抖动效果可以为用户界面增添一些趣味性和互动性,想象一下,当你点击一个按钮时,窗口会轻微地“颤抖”几下,就像它在对你表示不满或提醒你注意某些事情,这个效果可以通过定时改变窗口的位置来实现,需要的朋友可以参考下

1. 创建 WinForms 项目

首先,确保你已经创建了一个 WinForms 项目。如果你还没有创建,请按照以下步骤操作:

2. 添加按钮和事件处理程序

接下来,我们在窗体上添加一个按钮,并为其添加点击事件处理程序。当用户点击按钮时,我们将触发窗口抖动效果。

3. 实现窗口抖动效果

我们可以通过定时改变窗口的位置来实现抖动效果。具体来说,我们可以使用 System.Windows.Forms.Timer 来定期移动窗口的位置,使其在水平方向上左右移动,从而产生抖动的效果。

以下是完整的代码示例:

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; // 抖动次数
        private const int shakeOffset = 5; // 抖动偏移量
        private Point originalLocation;
 
        public Form1()
        {
            InitializeComponent();
            InitializeShakeTimer();
        }
 
        private void InitializeShakeTimer()
        {
            shakeTimer = new Timer();
            shakeTimer.Interval = 20; // 每20毫秒触发一次
            shakeTimer.Tick += ShakeTimer_Tick;
        }
 
        private void btnShake_Click(object sender, EventArgs e)
        {
            // 保存原始位置
            originalLocation = this.Location;
            // 重置抖动计数
            shakeCount = 0;
            // 启动定时器
            shakeTimer.Start();
        }
 
        private void ShakeTimer_Tick(object sender, EventArgs e)
        {
            if (shakeCount < shakeTimes * 2) // 乘以2是因为我们要左右各抖动一次
            {
                // 计算新的位置
                int newX = originalLocation.X + (shakeCount % 2 == 0 ? -shakeOffset : shakeOffset);
                this.Location = new Point(newX, originalLocation.Y);
                shakeCount++;
            }
            else
            {
                // 恢复原始位置并停止定时器
                this.Location = originalLocation;
                shakeTimer.Stop();
            }
        }
    }
}

4. 解释代码

5. 运行效果

当你运行这个程序并点击按钮时,窗体会在水平方向上轻微地左右移动,产生抖动的效果。你可以通过调整 shakeOffset 和 shakeTimes 来控制抖动的幅度和次数,以达到你想要的效果。

6. 进一步优化

如果你想让抖动效果更加自然,可以尝试以下几种优化方法:

另一种程序实现的方法:

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private Timer timer;
        private int count = 0; //这是一个计数器,用于跟踪当前抖动的次数。每次 Timer 触发时,count 会递增。
        private int count_max = 10; //这是抖动的最大次数。当 count 达到 count_max 时,抖动结束。
        private int X原始位置;   //抖动开始时的X原始位置
        private int Y原始位置;   //抖动开始时的Y原始位置
        public Form1()
        {
            InitializeComponent();
 
            // 记录窗口移动时的原始位置
            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);    // 向右下角移动
                }
                else
                {
                    p.Offset(-2, -2);  // 向左上角移动
                }
                Location = p;         // 更新窗口位置
                count++;
                if (count >= count_max)
                {
                    count = 0;
                    timer.Stop();         // 停止定时器
                    Location = new Point(X原始位置, Y原始位置);  // 恢复原始位置
                }
            };
            timer.Interval = 25;         // 设置定时器间隔为 25 毫秒
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!timer.Enabled)       //检查定时器是否已经启动。如果定时器没有启动,则允许启动抖动效果。
            {
                timer.Start();          // 启动定时器
            }
        }
    }
}

实现方法:

  1. 初始化:当窗体加载时,Form1 构造函数会被调用。它会初始化 Move 事件处理程序和 Timer,并设置定时器的间隔为 25 毫秒。

  2. 记录原始位置:每当窗体的位置发生变化时,Move 事件处理程序会记录窗口的当前位置,作为抖动前的原始位置。

  3. 启动抖动:当用户点击按钮时,button1_Click 事件处理程序会被触发。如果定时器没有启动,则启动定时器,开始抖动效果。

  4. 抖动过程:定时器每 25 毫秒触发一次 Tick 事件,窗口会在水平和垂直方向上交替移动 2 个像素,产生抖动效果。抖动次数由 count_max 控制,总共抖动 10 次。

  5. 恢复原始位置:当抖动次数达到 count_max 时,定时器停止,窗口恢复到抖动前的原始位置。

这两种方法都是通过使用 System.Windows.Forms.Timer 和简单的数学运算,轻松实现 WinForms 窗口的抖动效果。这个效果不仅增加了用户的互动体验,还可以用于提醒用户注意某些重要的信息或操作。你可以根据需要进一步调整抖动的幅度、速度和次数,以达到最佳的效果。

以上就是C#实现winform窗口抖动效果的示例代码的详细内容,更多关于C# winform窗口抖动的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文