C#实现Winform程序右下角弹窗消息提示

前言

消息通知在应用程序中,是一种非常有用的功能,实现对一些重要信息、提醒或警告及时向用户展示。我们在使用软件时,通常会收到一种从桌面右下角弹出的(提示信息或广告)信息框。本文将介绍使用 C# 实现此种方式的信息通知窗口。

实现

1、使用 API 的 AnimateWindow 函数

定义 AnimateWindows

using System;using System.Runtime.InteropServices;
namespace Fountain.WinForm.MessageBoxDemo{    public class Win32    {        /// <summary>        /// 自左向右显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记        /// </summary>        public const int AW_HOR_POSITIVE = 0x0001;        /// <summary>        /// 自右向左显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记        /// </summary>        public const int AW_HOR_NEGATIVE = 0x0002;        /// <summary>        /// 自顶向下显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记        /// </summary>        public const int AW_VER_POSITIVE = 0x0004;        /// <summary>        /// 自下向上显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记该标记        /// </summary>        public const int AW_VER_NEGATIVE = 0x0008;        /// <summary>        /// 若应用了AW_HIDE标记,则使窗口向内重叠;不然向外扩大        /// </summary>        public const int AW_CENTER = 0x0010;        /// <summary>        /// 隐蔽窗口        /// </summary>        public const int AW_HIDE = 0x10000;        /// <summary>        /// 激活窗口,在应用了AW_HIDE标记后不要应用这个标记        /// </summary>        public const int AW_ACTIVE = 0x20000;        /// <summary>        /// 滑动类型动画结果,默认为迁移转变动画类型,当应用AW_CENTER标记时,这个标记就被忽视        /// </summary>        public const int AW_SLIDE = 0x40000;        /// <summary>        /// 淡入淡出结果        /// </summary>        public const int AW_BLEND = 0x80000;        /// <summary>        /// 窗体动画函数        /// </summary>        /// <param name="hwnd"></param>        /// <param name="dwTime"></param>        /// <param name="dwFlags"></param>        /// <returns></returns>        [DllImport("user32")]        public static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);    }}

定义显示消息窗体

using System;using System.Drawing;using System.Windows.Forms;
namespace Fountain.WinForm.MessageBoxDemo{    public partial class FormMessageBox : Form    {        /// <summary>        /// 关闭窗口的定时器        /// </summary>        private Timer formCloseTime = new Timer();        /// <summary>        /// 构造方法        /// </summary>        public FormMessageBox()        {            InitializeComponent();        }        /// <summary>        /// 窗体加载        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FormMessageBox_Load(object sender, EventArgs e)        {            // 手动设置起始位置            this.StartPosition = FormStartPosition.Manual;            // 计算屏幕尺寸并将窗体放置在右下角            Rectangle screenRectangle = Screen.PrimaryScreen.WorkingArea;            int x = screenRectangle.Width - this.Width;            int y = screenRectangle.Height - this.Height;            this.Location = new Point(x, y);            this.TopMost = true;
            Win32.AnimateWindow(this.Handle, 1000, Win32.AW_SLIDE + Win32.AW_VER_NEGATIVE);
            this.ShowInTaskbar = false;
            formCloseTime.Interval = 5000;            formCloseTime.Tick += new EventHandler(formCloseTime_Tick);            formCloseTime.Start();        }        /// <summary>        /// 关闭窗口的定时器响应事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void formCloseTime_Tick(object sender, EventArgs e)        {            formCloseTime.Stop();            this.Close();        }        /// <summary>        ///         /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FormMessageBox_FormClosed(object sender, FormClosedEventArgs e)        {            formCloseTime.Stop();            formCloseTime.Dispose();            Win32.AnimateWindow(this.Handle, 1000, Win32.AW_SLIDE + Win32.AW_VER_POSITIVE + Win32.AW_HIDE);        }    }}

主界面调用

FormMessageBox formMessageBox = new FormMessageBox();formMessageBox.Show();

2、控制窗体显示

定义显示消息窗体

using System;using System.Drawing;using System.Threading;using System.Windows.Forms;
namespace Fountain.WinForm.MessageBoxDemo{    public partial class FormNotifyBox : Form    {        /// <summary>        /// 关闭窗口的定时器        /// </summary>        private System.Windows.Forms.Timer formCloseTime = new System.Windows.Forms.Timer();        /// <summary>        ///         /// </summary>        private Point formPoint;        /// <summary>        ///         /// </summary>        public FormNotifyBox()        {            InitializeComponent();            this.formPoint = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width, Screen.PrimaryScreen.WorkingArea.Height);            // 设置窗体在屏幕右下角显示            this.Location = formPoint;        }        /// <summary>        ///         /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void FormNotifyBox_Load(object sender, EventArgs e)        {            try            {                formCloseTime.Interval = 5000;                formCloseTime.Tick += new EventHandler(formCloseTime_Tick);                formCloseTime.Start();                this.TopMost = false;                this.BringToFront();                this.TopMost = true;                this.PointToClient(this.formPoint);                this.Location = this.formPoint;                this.Show();                for (int i = 0; i < this.Height; i++)                {                    this.Location = new Point(formPoint.X, formPoint.Y - i);                    // 消息框弹出速度,数值越大越慢                    Thread.Sleep(1);                }            }            catch (Exception exception)            {               }        }        /// <summary>        /// 关闭窗口的定时器响应事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void formCloseTime_Tick(object sender, EventArgs e)        {            formCloseTime.Enabled = false;            for (int i = 0; i <= this.Height; i++)            {                //弹出框向下移动消失                Point point = new Point(this.Location.X, this.Location.Y + i);                this.PointToScreen(point);                //即时转换成屏幕坐标                this.Location = point;                //下降速度调节,数字越小消失的速度越快,建议不大于10                Thread.Sleep(8);            }            this.Close();            this.Dispose();        }    }}

主界面调用

FormNotifyBox notifyForm = new FormNotifyBox();notifyForm.Show();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: WinForms是一种用于开发Windows桌面应用程序的技术,它提供了一套丰富的控件和功能,可以创建用户友好的界面。右下角弹窗是指在应用程序界面的右下角弹出一个小窗口,用于显示一些通知、提醒或其他相关信息。 要实现右下角弹窗,可以通过以下步骤进行: 1. 创建一个名为"PopupForm"的新窗体。在该窗体中,设置窗体的大小、位置和样式,使其位于屏幕的右下角。可以使用WinForms中的Size、Location、TopMost等属性进行设置。 2. 为PopupForm窗体添加控件。可以根据需求添加Label、PictureBox等控件,用于显示标题、内容和图标。 3. 设置PopupForm窗体的动画效果。可以使用Timer控件实现窗体的弹出和隐藏过程。例如,在Timer的Tick事件中,逐渐改变窗体的位置和透明度,实现窗体的渐入和渐出效果。 4. 在主窗体中,触发弹窗显示的事件。例如,在某个按钮的Click事件中,创建PopupForm实例,并调用Show方法显示弹窗。 通过以上步骤,就可以实现一个简单的WinForms右下角弹窗。可以根据实际需求进行调整和扩展,例如添加关闭按钮、设置持续显示时间等功能。另外,为了确保弹窗在屏幕大小改变时仍然位于右下角,可以订阅屏幕大小变化事件,并在事件处理程序中更新弹窗的位置。 总之,WinForms提供了丰富的功能和控件,可以方便地实现各种界面效果,包括右下角弹窗。通过合理设置窗体属性和控件布局,结合动画效果和事件处理,可以创建出漂亮、实用的弹窗界面。 ### 回答2: WinForm右下角弹窗右下角提示框)是一种常见的界面提示方式,它通过在屏幕右下角弹出一个小窗口来显示提示信息。可以通过以下步骤实现: 1. 创建一个新的WinForm应用程序项目。 2. 在设计视图中,将一个Panel控件添加到窗体上,并设置其Dock属性为Bottom,即使得它位于窗体的底部。 3. 设置Panel的高度和背景颜色,以实现一个看起来像弹窗的效果。 4. 在Panel控件中,添加一个Label控件,用于显示提示信息。 5. 按需设置Label控件的字体、字号、对齐方式等属性,并设置AutoEllipsis属性为true,以避免提示信息过长导致显示不全。 6. 添加一个Timer控件,并设置其Interval属性为适当的毫秒数,控制弹窗显示的时长。 7. 双击Timer控件,编写其Tick事件处理程序,在事件处理程序中将Panel控件隐藏(隐藏弹窗)。 8. 在需要显示弹窗的时候,通过设置Panel控件的Visible属性为true,并使用Timer控件启动。 9. 可以自定义一些方法或属性,通过调用这些方法或设置这些属性来动态修改提示信息,以实现更加灵活的弹窗。 通过上述步骤,我们可以实现一个简单的WinForm右下角弹窗。当需要提示用户一些重要信息时,通过显示这个弹窗,可以有效吸引用户的注意力,提高用户体验。同时,通过自定义弹窗的外观和行为,可以满足不同场景下的需求,增加程序的可定制性。 ### 回答3: 在WinForm实现右下角弹窗,一种常见的方法是借助NotifyIcon和ToolTip组件配合使用。 首先,在工具箱中找到NotifyIcon组件,并将其拖放到窗体上。然后,在属性窗口中设置NotifyIcon的属性,包括Icon(用于显示在任务栏的图标)、BalloonTipIcon(气泡提示图标)和BalloonTipText(气泡提示内容)等。 接下来,在需要弹出右下角提示的事件中,可以通过调用NotifyIcon的ShowBalloonTip方法来显示气泡提示。例如,可以在某个按钮的Click事件中添加以下代码: private void button1_Click(object sender, EventArgs e) { notifyIcon1.ShowBalloonTip(5000, "提示", "这是一个右下角弹窗示例", ToolTipIcon.Info); } 上述代码中,第一个参数表示气泡提示显示的时间(单位为毫秒),第二个参数为气泡提示的标题,第三个参数为气泡提示的内容,第四个参数用于设置气泡提示的图标。 最后,为了在用户关闭弹窗时触发相应的事件,可以为NotifyIcon的BalloonTipClosed事件添加处理逻辑。例如,可以在窗体的Load事件中添加以下代码: private void Form1_Load(object sender, EventArgs e) { notifyIcon1.BalloonTipClosed += NotifyIcon1_BalloonTipClosed; } private void NotifyIcon1_BalloonTipClosed(object sender, EventArgs e) { // 在这里编写提示关闭后的处理逻辑 } 这样就可以实现一个简单的WinForm右下角弹窗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨曦_子画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值