c# - NotifyIcon

Guy Yafe

New member
c# - NotifyIcon

אני כותב יישום קטן ב - C# ומעוניין ליצור לו NotifyIcon. המדריכים באינטרנט די ברורים ומסבירים את התהליך. דוגמת קוד:

NotifyIcon icon = new NotifyIcon();
ContextMenu notifyIconMenu = new ContextMenu();
notifyIconMenu.MenuItems.Add("Exit");

icon.Visible = true;
icon.Icon = new System.Drawing.Icon("bla.ico");
icon.Text = "bla";
icon.ContextMenu = notifyIconMenu;


כלומר: צריך ליצור את האובייקט, להגדיר לו פרמטרים רלוונטיים וזהו פחות או יותר. בהפעלת היישום, הכל יעבוד.
זה מרגיש לי קצת כמו מאגיה שחורה: מה שלא הצלחתי להבין זה באיזה שלב דווקא האובייקט הספציפי הזה (icon בדוגמה למעלה) הוא זה שיושם בשורת המשימות וישוייך לישום שלנו?

גיא
 

Guy Yafe

New member
זה לא ממש משנה:

מספיק שאני אכניס אותו בפונקציית ה - main ומלאחר מכן (או לפני) אוסיף טופס ריק, וכבר אראה את האייקון בשורת המשימות.
 

selalerer

New member
זה באמת מימוש מוזר. כנראה שה-constructor של ה

-icon או אחת מהמטודות set שלו (למשל של ה-ContextMenu או של ה-icon) רושמות אותו.
 

Guy Yafe

New member
קוד מלא

יצרתי פרוייקט חדש ב - Visual Studio Express 2012 (בהנחה שזה משנה), הגדרתי אותו כ - Windows Application והוספתי את הקוד המצורף.
כמו שאתם רואים הטופס עצמו הוא רק לקישוט (לכאורה) ואין קשר בינו לאייקון:
אין לי שום הסבר איך זה קורה. שאלות שאני שואל את עצמי, ואנסה לבדוק בהמשך, הן למשל מה היה קורה אם הייתי מוסיף אייקון חדש?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Form form = new Form();
form.WindowState = FormWindowState.Minimized;
form.ShowInTaskbar = false;
form.Hide();
NotifyIcon icon = new NotifyIcon();
ContextMenu notifyIconMenu = new ContextMenu();
notifyIconMenu.MenuItems.Add("Exit");
icon.Icon = new System.Drawing.Icon(@"Any path");

icon.Visible = true;
icon.Text = "bla";
icon.ContextMenu = notifyIconMenu;

Application.Run(form);
}
}
}
 

Guy Yafe

New member
תשובה לאחר חפירה בMSDN

NotifyIcon הוא יישות שאינה קשורה לטופס ספציפי, אלא לאפליקציה עצמה.
בעת שינוי השדה Visible ל - true, האייקון יראה בשורת המשימות, ואחריות המפתח היא לתת לו את ה-callback-ים המתאימים.
יישום יכול להחזיק כמה אייקונים כאלה והם לא יפריעו אחד לשני.
 
למעלה