ایجاد و نمایش اعلان (Notification) در ویندوز فرم سی شارپ
ایجاد و نمایش اعلان (Notification) در ویندوز فرم سی شارپ (#C) با کنترل NotifyIcon و متد ShowBalloonTip انجام میشود .
07 خرداد 1405
لینک کوتاه
ایجاد و نمایش اعلان (Notification) در ویندوز فرم سی شارپ
در ویندوز فرم سی شارپ، سادهترین و رایجترین روش برای ایجاد و نمایش اعلان (Notification) استفاده از کنترل NotifyIcon به همراه متد ShowBalloonTip است.بدین منظور ابتدا یک کنترل NotifyIcon از جعبه ابزار به فرم اضافه کرده و خصوصیات Visible آن را روی true قرار میدهید.
سپس با تنظیم خصوصیاتی مانند BalloonTipTitle (عنوان اعلان)، BalloonTipText (متن اصلی اعلان) و BalloonTipIcon (نوع آیکون شامل Info، Warning، Error یا None)، میتوانید با فراخوانی متد notifyIcon1.ShowBalloonTip(3000) یک اعلان شناور در ناحیه سیستم تری (کنار ساعت ویندوز) نمایش دهید.
این روش بسیار سبک، سریع و بدون نیاز به کتابخانههای اضافی است و برای نمایش پیامهای کوتاه، هشدارها، وضعیت عملیاتهای پسزمینه یا اطلاعرسانیهای ساده در برنامههای دسکتاپ بسیار کاربردی میباشد.
چرا اعلانهای ویندوز اهمیت دارند؟
در دنیای امروز، کاربران به طور میانگین روزانه با دهها برنامه و پنجره مختلف سروکار دارند.در چنین فضای شلوغی، چگونه میتوانید مطمئن شوید پیام مهم شما دیده میشود؟
پاسخ در سیستم اعلانهای ویندوز (Windows Notifications) نهفته است.
اعلانها پنجرههای کوچک و غیرمزاحمی هستند که در گوشه سمت راست پایین صفحه ظاهر میشوند و توجه کاربر را بدون وقفه در کار اصلی او جلب میکنند.
اگر توسعهدهنده دسکتاپ هستید، احتمالاً با این سناریوها مواجه شدهاید:
- برنامه شما نیاز دارد کاربر را از انجام یک کار خاص (مثل پشتیبانگیری) مطلع کند.
- میخواهید یادآوری خودکار (مانند جلسه آنلاین یا سررسید پرداخت) به کاربر نمایش دهید.
- نیاز به نمایش وضعیت دانلود یا پردازش طولانی در پسزمینه دارید.
روش کلاسیک – استفاده از NotifyIcon و بالون تیپ (Balloon Tip) برای اعلانهای ویندوز
سادهترین و سریعترین روش برای نمایش اعلان در ویندوز، استفاده از کنترل NotifyIcon به همراه متد ShowBalloonTip است.این روش به حداقل کد نیاز دارد و برای ۹۰٪ موارد کاربردهای روزمره مناسب است.
1. آشنایی با NotifyIcon در سی شارپ
NotifyIcon یک کنترل ویندوز فرمی است که یک آیکون در ناحیه سیستمترِی (کنار ساعت ویندوز) قرار میدهد.این کنترل برای برنامههایی که در پسزمینه اجرا میشوند (مثل آنتیویروسها یا پیامرسانها) بسیار کاربردی است.
2. پیادهسازی ساده – نمایش یک اعلان با سه خط کد!
برای شروع، یک پروژه جدید ویندوز فرم (Windows Forms App) در ویژوال استودیو ایجاد کنید. سپس یک کنترل NotifyIcon از جعبه ابزار (Toolbox) به فرم خود اضافه کنید.
حالا کد زیر را در جایی که میخواهید اعلان نمایش داده شود (مثل رویداد کلیک یک دکمه) قرار دهید:
// تنظیم آیکون (اختیاری اما توصیه میشود)
notifyIcon1.Icon = SystemIcons.Information;
// تنظیم عنوان و متن اعلان
notifyIcon1.BalloonTipTitle = "عنوان اعلان";
notifyIcon1.BalloonTipText = "این متن اعلان است. کاربر میتواند این پیغام را بخواند.";
// تنظیم نوع آیکون درون اعلان
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
// نمایش اعلان به مدت ۵ ثانیه
notifyIcon1.ShowBalloonTip(5000);
با اجرای برنامه و کلیک روی دکمه، یک اعلان زیبا از ناحیه سیستمترِی ظاهر میشود.
3. تنظیم دقیق زمان و تایماوت
پارامتر اول در متد ShowBalloonTip زمان نمایش اعلان را بر حسب میلیثانیه مشخص میکند.نکته مهم: حداکثر زمان مؤثر در ویندوزهای جدید بین ۵ تا ۳۰ ثانیه است. مقدار بیشتر از این نیز همان ۳۰ ثانیه نمایش داده میشود.
4. انواع آیکونهای قابل استفاده در اعلان
خصوصیت BalloonTipIcon میتواند یکی از مقادیر زیر را بگیرد و باعث تغییر آیکون سمت چپ اعلان شود:| مقدار | آیکون | کاربرد |
| ToolTipIcon.None | بدون آیکون | اطلاعرسانی ساده |
| ToolTipIcon.Info | ℹ️ (آیکون اطلاعات) | پیامهای خبری و آموزشی |
| ToolTipIcon.Warning | ⚠️ (مثلث زرد) | هشدارها و اخطارها |
| ToolTipIcon.Error | ❌ (دایره قرمز) | خطاها و پیامهای بحرانی |
5. مثال عملی کامل: نمایش اعلان هنگام بسته شدن برنامه
فرض کنید میخواهید وقتی کاربر برنامه را میبندد، یک اعلان خداحافظی نمایش دهید.کد زیر را در رویداد FormClosing فرم خود قرار دهید:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// اطمینان از دیده شدن NotifyIcon
notifyIcon1.Visible = true;
notifyIcon1.Icon = SystemIcons.Application;
notifyIcon1.BalloonTipTitle = "برنامه بسته شد";
notifyIcon1.BalloonTipText = "برنامه با موفقیت بسته شد. برای راهاندازی مجدد از آیکون سیستمترِی استفاده کنید.";
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.ShowBalloonTip(3000);
}
6. نکات مهم و رفع خطاهای رایج
- خصوصیت Visible حتماً true باشد: اگر notifyIcon1.Visible = true تنظیم نشود، اعلان نمایش داده نمیشود.
- آیکون الزامی است: اگر آیکون تنظیم نکنید، در برخی نسخههای ویندوز اعلان ظاهر نمیشود.
- نیاز به ادمین ندارد: این روش در سطح کاربر معمولی کار میکند و نیاز به دسترسی ادمین ندارد.
7. نمایش اعلان از طریق PowerShell (برای تست سریع)
جالب است بدانید که دقیقاً همین کد را میتوانید در PowerShell نیز اجرا کنید تا بدون نیاز به کامپایل، اعلان تست کنید:Add-Type -AssemblyName System.Windows.Forms
$notification = New-Object System.Windows.Forms.NotifyIcon
$notification.Icon = [System.Drawing.SystemIcons]::Information
$notification.Visible = $true
$notification.ShowBalloonTip(5000, "تست سریع", "این یک اعلان تستی است", [System.Windows.Forms.ToolTipIcon]::Info)
Start-Sleep -Seconds 6
$notification.Dispose()
روش پیشرفته – اعلانهای تاپسی (Toast) با Windows App SDK
اگر به دنبال اعلانهای مدرنتر و تعاملی هستید که شبیه اعلانهای خود ویندوز ۱۰ و ۱۱ باشند (با دکمه، تصویر و ورودی متن)، باید از Windows App SDK (WinUI 3) استفاده کنید.این روش برای برنامههای داتنت ۶ و بالاتر مناسب است.
۱. تنظیمات اولیه و پیشنیازها
ابتدا باید بسته نیوگت Microsoft.WindowsAppSDK را به پروژه خود اضافه کنید.سپس در نقطه شروع برنامه (Program.cs در WinForms یا App.xaml.cs در WPF)، NotificationManager را مقداردهی اولیه کنید:
برای WinForms (Program.cs):
using Microsoft.Windows.AppNotifications;
static class Program
{
[STAThread]
static void Main()
{
// ثبت مدیریتکننده اعلان قبل از فراخوانی Register
AppNotificationManager.Default.NotificationInvoked += OnNotificationInvoked;
AppNotificationManager.Default.Register();
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
AppNotificationManager.Default.Unregister();
}
private static void OnNotificationInvoked(AppNotificationManager sender, AppNotificationActivatedEventArgs args)
{
// وقتی کاربر روی اعلان کلیک میکند، این متد صدا زده میشود
// میتوانید بفهمید کدام دکمه کلیک شده و چه اقدامی انجام دهید
}
}
2. ساختن و نمایش اعلان مدرن (Toast)
پس از ثبت، میتوانید اعلانهای زیبا و تعاملی بسازید:using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;
private void SendModernNotification()
{
var notification = new AppNotificationBuilder()
.AddArgument("action", "view") // اضافه کردن داده برای تشخیص کلیک
.AddArgument("conversationId", "12345")
.AddText("پیام جدید از علی")
.AddText("علی به شما پیام داد: جلسه امروس ساعت ۳ است.")
.AddButton(new AppNotificationButton("مشاهده")
.AddArgument("action", "view"))
.AddButton(new AppNotificationButton("بعداً")
.AddArgument("action", "later"))
.SetAppLogoOverride(new Uri("ms-appx:///Assets/Logo.png"), AppNotificationImageCrop.Circle)
.BuildNotification();
AppNotificationManager.Default.Show(notification);
}
این اعلان شامل عنوان، متن، دو دکمه و یک لوگوی دایرهای است – کاملاً مشابه اعلانهای تلگرام یا واتساپ در ویندوز.
3. مدیریت کلیک کاربر روی اعلان
در متد OnNotificationInvoked که قبلاً ثبت کردیم، میتوانیم بفهمیم کاربر روی چه قسمتی کلیک کرده است:private static void OnNotificationInvoked(AppNotificationManager sender, AppNotificationActivatedEventArgs args)
{
// args.Argument حاوی رشتهای مثل "action=view&conversationId=12345" است
var arguments = args.Argument;
if (arguments.Contains("action=view"))
{
MessageBox.Show("کاربر روی دکمه مشاهده کلیک کرد!");
}
else if (arguments.Contains("action=later"))
{
MessageBox.Show("کاربر اعلان را به بعد موکول کرد.");
}
}
4. نکته بسیار مهم برای برنامههای بستهبندی شده (Packaged)
اگر برنامه خود را با فرمت MSIX منتشر میکنید، باید تنظیمات خاصی در فایل Package.appxmanifest اضافه کنید تا اعلانها کار کنند.جزئیات کامل این تنظیمات در مستندات مایکروسافت موجود است.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
روش حرفهای – ساخت پنجره اعلان سفارشی با انیمیشن
گاهی اوقات نیاز به کنترل کامل روی ظاهر و رفتار اعلان دارید.در این حالت، بهترین راه طراحی یک فرم سفارشی است که خودتان مدیریت میکنید.
این روش به شما امکان میدهد انیمیشنهای دلخواه (محو شدن، اسلاید شدن) را پیادهسازی کنید.
1. طراحی فرم پایه بدون حاشیه
یک فرم جدید به پروژه اضافه کنید و خصوصیات زیر را برای آن تنظیم کنید تا شبیه یک اعلان استاندارد شود:public partial class NotificationForm : Form
{
public NotificationForm(string title, string message)
{
InitializeComponent();
// تنظیمات ظاهری
this.FormBorderStyle = FormBorderStyle.None; // بدون حاشیه
this.TopMost = true; // همیشه روی همه پنجرهها
this.ShowInTaskbar = false; // نمایش ندادن در تسکبار
this.StartPosition = FormStartPosition.Manual; // موقعیت دستی
this.BackColor = Color.White;
lblTitle.Text = title;
lblMessage.Text = message;
// تنظیم سایه برای زیبایی بیشتر
this.Opacity = 0.95;
}
}
2. پیادهسازی انیمیشن اسلاید از پایین (Slide In)
یکی از جذابترین انیمیشنها برای اعلانها، اسلاید شدن از پایین صفحه است.برای این کار از یک تایمر استفاده میکنیم:
private Timer animationTimer;
private int targetY;
private int step = 5;
public void ShowWithSlideAnimation()
{
// محاسبه موقعیت نهایی (گوشه پایین سمت راست)
Screen currentScreen = Screen.FromPoint(Cursor.Position);
int screenWidth = currentScreen.WorkingArea.Width;
int screenHeight = currentScreen.WorkingArea.Height;
// موقعیت اولیه: پایین صفحه اما خارج از دید (درست زیر لبه پایین)
this.Height = 100; // ارتفاع دلخواه
this.Width = 300;
this.Left = screenWidth - this.Width - 10;
targetY = screenHeight - this.Height - 10;
this.Top = screenHeight; // شروع از پایینترین نقطه (خارج از صفحه)
this.Show();
// راهاندازی تایمر برای حرکت تدریجی
animationTimer = new Timer();
animationTimer.Interval = 10;
animationTimer.Tick += (s, e) =>
{
if (this.Top > targetY)
{
this.Top -= step;
if (this.Top < targetY) this.Top = targetY;
}
else
{
animationTimer.Stop();
// بعد از ۳ ثانیه شروع به مخفی شدن کن
Task.Delay(3000).ContinueWith(_ =>
{
this.Invoke(new Action(() => HideWithSlideAnimation()));
});
}
};
animationTimer.Start();
}
private void HideWithSlideAnimation()
{
animationTimer = new Timer();
animationTimer.Interval = 10;
animationTimer.Tick += (s, e) =>
{
if (this.Top < Screen.PrimaryScreen.WorkingArea.Height)
{
this.Top += step;
}
else
{
animationTimer.Stop();
this.Close();
}
};
animationTimer.Start();
}
این کد باعث میشود پنجره اعلان از پایین صفحه به سمت بالا حرکت کند، چند ثانیه بماند و سپس دوباره به پایین برگردد و بسته شود.
3. انیمیشن محو شدن (Fade In / Fade Out)
برای انیمیشن محو شدن، به جای تغییر موقعیت، خصوصیت Opacity فرم را تغییر میدهیم:private Timer fadeTimer;
private double fadeStep = 0.05;
public void ShowWithFadeAnimation()
{
this.Opacity = 0;
this.Show();
fadeTimer = new Timer();
fadeTimer.Interval = 30;
fadeTimer.Tick += (s, e) =>
{
if (this.Opacity < 0.95)
{
this.Opacity += fadeStep;
}
else
{
fadeTimer.Stop();
Task.Delay(3000).ContinueWith(_ =>
{
this.Invoke(new Action(() => HideWithFadeAnimation()));
});
}
};
fadeTimer.Start();
}
private void HideWithFadeAnimation()
{
fadeTimer = new Timer();
fadeTimer.Interval = 30;
fadeTimer.Tick += (s, e) =>
{
if (this.Opacity > 0)
{
this.Opacity -= fadeStep;
}
else
{
fadeTimer.Stop();
this.Close();
}
};
fadeTimer.Start();
}
4. اضافه کردن دکمه بستن و تعامل
برای حرفهایتر شدن، یک دکمه بستن (X کوچک) در گوشه اعلان اضافه کنید:private void btnClose_Click(object sender, EventArgs e)
{
if (animationTimer != null) animationTimer.Stop();
if (fadeTimer != null) fadeTimer.Stop();
this.Close();
}
// همچنین اضافه کنید وقتی کاربر روی خود اعلان کلیک میکند
private void NotificationForm_Click(object sender, EventArgs e)
{
// اینجا میتوانید برنامه اصلی را باز کنید یا یک اکشن خاص انجام دهید
System.Diagnostics.Process.Start("yourAppPath");
this.Close();
}
مقایسه روشها و بهترین عملکردها (Best Practices)
حالا که با سه روش اصلی آشنا شدید، بیایید آنها را با هم مقایسه کنیم تا بهترین انتخاب را برای پروژه خود داشته باشید:| ویژگی | NotifyIcon (کلاسیک) | Windows App SDK (مدرن) | فرم سفارشی |
| سختی پیادهسازی | بسیار آسان | متوسط | بالا |
| نیاز به کد | کم (۳-۵ خط) | متوسط (۱۵-۲۰ خط) | زیاد (۵۰+ خط) |
| قابلیت دکمه و ورودی | خیر | بله | بله (دستی) |
| انیمیشن | پیشفرض ویندوز | پیشفرض ویندوز | کاملاً سفارشی |
| سازگاری با ویندوز | XP تا ۱۱ | ویندوز ۱۰ و ۱۱ | همه نسخهها |
| نیاز به بسته نیوگت | خیر | بله | خیر |
قوانین طلایی برای اعلانهای حرفهای در سی شارپ
-
متن کوتاه و مفید باشد
کاربر زمان ندارد پاراگراف بخواند. عنوان حداکثر ۵۰ کاراکتر، متن حداکثر ۱۵۰ کاراکتر. -
از اعلان زیاد استفاده نکنید
نمایش پشتسرهم اعلان باعث آزار کاربر میشود. بین اعلانها حداقل ۳۰ ثانیه فاصله بگذارید. -
به کاربر کنترل بدهید
حتماً دکمه بستن یا گزینه «دیگر نشان نده» اضافه کنید. -
رنگها را رعایت کنید
برای خطا از رنگ قرمز، برای هشدار از زرد و برای موفقیت از سبز استفاده کنید. -
تست در نسخههای مختلف ویندوز
رفتار اعلان در ویندوز ۱۰ و ۱۱ ممکن است کمی متفاوت باشد.

نتیجهگیری و جمعبندی
تمام روشهای ممکن برای ایجاد و نمایش اعلان در ویندوز با سی شارپ شامل موارد زیر است:روش NotifyIcon برای ۸۰٪ نیازهای روزمره کاملاً مناسب است و سریعترین راه برای پیادهسازی است.
روش Windows App SDK برای زمانی که نیاز به اعلانهای مدرن با دکمه و تصویر دارید، بهترین گزینه است.
روش فرم سفارشی به شما قدرت کامل میدهد اما زمان توسعه بیشتری میبرد.
توصیه من: با روش اول (NotifyIcon) شروع کنید، زیرا ساده و کمریسک است. اگر بعداً نیاز به امکانات پیشرفتهتر پیدا کردید، به روش دوم یا سوم مهاجرت کنید.


کاربران ما
شما هم نظرتون با ما دریاره “ایجاد و نمایش اعلان (Notification) در ویندوز فرم سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید