"

کنترل Notify Icon در سی شارپ

زهیر صفری 1404/04/20 0 10
لینک کوتاه https://www.zoheirsoftware.com/z/dbb9df3ff |
کنترل Notify Icon در سی شارپ,ایجاد Notify Icon در فرم,مفهوم Notify Icon

مفهوم Notify Icon در سی شارپ چیست؟

NotifyIcon یک کنترل گرافیکی در Windows Forms است که اجازه می‌دهد آیکونی در System Tray ویندوز (کنار ساعت) نمایش داده شود.

این کنترل برای اطلاع‌رسانی، مدیریت وضعیت برنامه و تعامل ساده با کاربر بدون نیاز به باز بودن پنجره اصلی بسیار مفید است.

کاربردهای رایج Notify Icon

 نمایش پیام‌های اطلاع‌رسانی (Balloon Tip)

اجرای برنامه در پس‌زمینه بدون نمایش فرم اصلی

نمایش منوی راست‌کلیک با امکانات مختلف (Context Menu)

کاربردهای رایج Notify Icon

ایجاد Notify Icon در فرم

برای استفاده از NotifyIcon در سی شارپ، مراحل زیر را دنبال کنید:

1. اضافه کردن NotifyIcon به فرم

از طریق Designer یا کد:

NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Icon = SystemIcons.Information; // یا آیکون دلخواه
notifyIcon.Text = "برنامه در حال اجراست";
notifyIcon.Visible = true;

2. افزودن منوی راست‌کلیک (اختیاری)

ContextMenuStrip menu = new ContextMenuStrip();
menu.Items.Add("نمایش برنامه", null, ShowApp);
menu.Items.Add("خروج", null, ExitApp);

notifyIcon.ContextMenuStrip = menu;

 

3. نمایش پیام Balloon Tip

notifyIcon.BalloonTipTitle = "اطلاع رسانی";
notifyIcon.BalloonTipText = "برنامه به صورت مخفی در حال اجراست.";
notifyIcon.ShowBalloonTip(3000); // نمایش به مدت 3 ثانیه

مثال های پروژه محور Notify Icon 

 

مثال 1 : در این مثال، برنامه‌ای می‌سازیم که با بستن فرم، از سیستم خارج نمی‌شود، بلکه در System Tray باقی می‌ماند.

فرم Form1:

 

public partial class Form1 : Form
{
    NotifyIcon trayIcon;

    public Form1()
    {
        InitializeComponent();
        InitTrayIcon();
    }

    private void InitTrayIcon()
    {
        trayIcon = new NotifyIcon();
        trayIcon.Icon = SystemIcons.Application;
        trayIcon.Text = "برنامه‌ی من";
        trayIcon.Visible = true;

        ContextMenuStrip menu = new ContextMenuStrip();
        menu.Items.Add("باز کردن", null, (s, e) => { this.Show(); this.WindowState = FormWindowState.Normal; });
        menu.Items.Add("خروج", null, (s, e) => { trayIcon.Visible = false; Application.Exit(); });
        trayIcon.ContextMenuStrip = menu;

        trayIcon.BalloonTipTitle = "در حال اجرا";
        trayIcon.BalloonTipText = "برنامه در پس‌زمینه در حال اجراست.";
        trayIcon.ShowBalloonTip(2000);

        trayIcon.DoubleClick += (s, e) =>
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
        };
    }

    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
        if (this.WindowState == FormWindowState.Minimized)
        {
            this.Hide();
        }
    }
}

 

مثال 2 : برنامه‌ای بسازید که هنگام راست‌کلیک روی آیکون در Tray، یک منوی با گزینه‌های "توقف موقت"، "ادامه"، و "خروج" داشته باشد.

حل : این پروژه رو به صورت کد نویسی براتون حل اش میکنم.

این برنامه یک NotifyIcon در System Tray ویندوز نمایش می‌دهد که با راست‌کلیک روی آن، یک منو شامل گزینه‌های زیر ظاهر می‌شود:

✅ توقف موقت: یک فرآیند یا تایمر فرضی را متوقف می‌کند.

▶️ ادامه: فرآیند را از سر می‌گیرد.

❌ خروج: برنامه را می‌بندد.

🧠 ایده کلی تمرین:
برای شبیه‌سازی وضعیت "در حال اجرا" و "توقف"، از یک Timer در فرم استفاده می‌کنیم. این تایمر هر ثانیه پیامی در Console یا Label چاپ می‌کند. با گزینه "توقف موقت" تایمر متوقف می‌شود و با "ادامه" مجدداً فعال خواهد شد.

 

✅ کد کامل Form1.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace TrayApp
{
    public partial class Form1 : Form
    {
        private NotifyIcon trayIcon;
        private ContextMenuStrip trayMenu;
        private ToolStripMenuItem pauseItem;
        private ToolStripMenuItem resumeItem;
        private Timer timer;

        public Form1()
        {
            InitializeComponent();
            InitializeTrayApp();
        }

        private void InitializeTrayApp()
        {
            // 1. تعریف تایمر شبیه‌ساز فرآیند
            timer = new Timer();
            timer.Interval = 1000; // هر ثانیه
            timer.Tick += Timer_Tick;
            timer.Start();

            // 2. منوی راست‌کلیک
            trayMenu = new ContextMenuStrip();

            pauseItem = new ToolStripMenuItem("توقف موقت", null, PauseProcess);
            resumeItem = new ToolStripMenuItem("ادامه", null, ResumeProcess);
            resumeItem.Enabled = false; // چون اول تایمر فعاله، ادامه غیرفعاله

            trayMenu.Items.Add(pauseItem);
            trayMenu.Items.Add(resumeItem);
            trayMenu.Items.Add(new ToolStripSeparator());
            trayMenu.Items.Add("خروج", null, ExitApp);

            // 3. Notify Icon
            trayIcon = new NotifyIcon();
            trayIcon.Text = "وضعیت: در حال اجرا";
            trayIcon.Icon = SystemIcons.Information;
            trayIcon.ContextMenuStrip = trayMenu;
            trayIcon.Visible = true;

            trayIcon.BalloonTipTitle = "برنامه شروع شد";
            trayIcon.BalloonTipText = "در حال اجرای فرآیند...";
            trayIcon.ShowBalloonTip(2000);

            trayIcon.DoubleClick += (s, e) =>
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
            };
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            Console.WriteLine("در حال اجرا: " + DateTime.Now.ToLongTimeString());
        }

        private void PauseProcess(object sender, EventArgs e)
        {
            timer.Stop();
            trayIcon.BalloonTipTitle = "توقف موقت";
            trayIcon.BalloonTipText = "فرآیند متوقف شد.";
            trayIcon.ShowBalloonTip(1000);

            pauseItem.Enabled = false;
            resumeItem.Enabled = true;
            trayIcon.Text = "وضعیت: متوقف";
        }

        private void ResumeProcess(object sender, EventArgs e)
        {
            timer.Start();
            trayIcon.BalloonTipTitle = "ادامه فرآیند";
            trayIcon.BalloonTipText = "فرآیند از سر گرفته شد.";
            trayIcon.ShowBalloonTip(1000);

            pauseItem.Enabled = true;
            resumeItem.Enabled = false;
            trayIcon.Text = "وضعیت: در حال اجرا";
        }

        private void ExitApp(object sender, EventArgs e)
        {
            trayIcon.Visible = false;
            Application.Exit();
        }

        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            if (this.WindowState == FormWindowState.Minimized)
                this.Hide();
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            trayIcon.Dispose();
            timer.Dispose();
            base.OnFormClosing(e);
        }
    }
}

 

 

 

آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

شرکت در دوره آموزش برنامه نویسی سی شارپ

 

 

مثال 3: برنامه‌ای طراحی کنید که با دوبار کلیک روی آیکون در System Tray، یک فرم تنظیمات (Settings) باز شود و کاربر بتواند مثلاً رنگ پس‌زمینه فرم را انتخاب کند.

حل : این مثال را با Desiner  یا حالت ویزارد فرم حل میکنیم.

🎯 هدف:
نمایش فرم جدید با یک بار کلیک روی آیکون Tray.

فرم تنظیمات شامل انتخاب رنگ پس‌زمینه (یا سایر تنظیمات ساده) باشد.

✅ پیاده‌سازی
مرحله ۱: ساخت فرم تنظیمات در Visual Studio:

روی پروژه راست‌کلیک کن → Add → Windows Form → نام آن را Form1.cs بگذار.

دو شی notifyIcon و timer  را روی فرم قرار دهید و طبق عکس های زیر تنظیمات زیر رو اعمال کنید.

کنترل Notify Icon در سی شارپ

کنترل Notify Icon در سی شارپ

کنترل Notify Icon در سی شارپ

کنترل Notify Icon در سی شارپ

کد های زیر را  در رویداد های مورد نظر بنویسید.

  public partial class Form1 : Form
  {
      private ContextMenuStrip trayMenu;
      public Form1()
      {
          InitializeComponent();
          InitializeTrayIcon();
      }
      private void InitializeTrayIcon()
      {
          trayMenu = new ContextMenuStrip();
          trayMenu.Items.Add("خروج", null, (s, e) => ExitApplication());

          notifyIcon1.Icon = SystemIcons.Application;
          notifyIcon1.ContextMenuStrip = trayMenu;
          notifyIcon1.ShowBalloonTip(3000);
          timer1.Tick += (s, e) => Console.WriteLine("در حال اجرا...");
          timer1.Start();

      }


      private void ExitApplication()
      {
          notifyIcon1.Visible = false;
          Application.Exit();
      }

      protected override void OnFormClosing(FormClosingEventArgs e)
      {
          notifyIcon1.Dispose();
          timer1.Dispose();
          base.OnFormClosing(e);
      }

      protected override void OnResize(EventArgs e)
      {
          base.OnResize(e);
          if (WindowState == FormWindowState.Minimized)
              this.Hide();
      }

      private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
      {
          using (SettingsForm settingsForm = new SettingsForm())
          {
              if (settingsForm.ShowDialog() == DialogResult.OK)
              {
                  this.BackColor = settingsForm.SelectedColor;

              }
          }
      }
  }

 

روی پروژه راست‌کلیک کن → Add → Windows Form → نام آن را SettingsForm.cs بگذار.

کنترل Notify Icon در سی شارپ

در فرم تنظیمات، یک شی Button hqhti ld;kdl و کنترل  ColorDialog  با کد نویسی اضافه میکنیم 

 

  public partial class SettingsForm : Form
  {
      public SettingsForm()
      {
          InitializeComponent();
      }
      public Color SelectedColor { get; private set; } = SystemColors.Control;

     

      private void button1_Click_1(object sender, EventArgs e)
      {
          using (ColorDialog colorDialog = new ColorDialog())
          {
              if (colorDialog.ShowDialog() == DialogResult.OK)
              {
                  SelectedColor = colorDialog.Color;
                  this.DialogResult = DialogResult.OK;
                  this.Close();
              }
          }
      }
  }

 

 

نکات مهم درباره استفاده از Notify Icon

حتماً ویژگی Visible را به true تنظیم کنید تا آیکون در System Tray دیده شود.

از آیکون‌های مناسب با اندازه 16x16 استفاده کنید تا ظاهر مناسبی داشته باشد.

از Dispose کردن NotifyIcon هنگام خروج از برنامه غافل نشوید.

برای جلوگیری از بسته شدن کامل برنامه هنگام کلیک روی × فرم، آن را ()Hide کنید.

نکات مهم درباره استفاده از Notify Icon

سوالات پرتکرار (FAQ)


1. آیا می‌توان چند NotifyIcon در یک فرم داشت؟

بله، ولی معمولاً برای سادگی UX از یک NotifyIcon استفاده می‌شود.

2. آیا NotifyIcon فقط در فرم‌های ویندوزی (WinForms) کاربرد دارد؟

بله، این کنترل برای Windows Forms طراحی شده است و در WPF یا دیگر پلتفرم‌ها باید از روش‌های دیگر استفاده شود.

3. چرا Balloon Tip نمایش داده نمی‌شود؟

برخی تنظیمات ویندوز یا آنتی‌ویروس‌ها ممکن است آن را مسدود کنند. همچنین مطمئن شوید مقدار BalloonTipText و BalloonTipTitle مقدار دارند و Visible=true باشد.

 

جمع‌بندی مبحث  NotifyIcon


در این مقاله، با مفهوم Notify Icon در سی شارپ آشنا شدیم و یاد گرفتیم چگونه از آن برای اجرای برنامه در پس‌زمینه، اطلاع‌رسانی به کاربر و ایجاد منوی راست‌کلیک استفاده کنیم.

این قابلیت برای ساخت برنامه‌های حرفه‌ای، ساده و کاربرپسند بسیار مهم است.

 

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.

999,000 تومان

2.9k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.