Avatar billede joseph Nybegynder
06. februar 2007 - 14:38 Der er 17 kommentarer og
1 løsning

Hvordan (NotifyIcon) fungerer.

For at gøre det nemmere at forstå mit spørgmål, vil jeg give et simpel eksampel.

Jeg har oprettet en Consol application, som har den har kode i main metoden:
public static void Main()
{
          int i = 0;
            while (true)
            {
                Console.WriteLine("CommandLine Number: {0}", i);
                i++;
                System.Threading.Thread.Sleep(500);
            }
}
dvs. at den skriver en CommandLine for hver 0,5 scound.

Spørgsmål er hvordan kan jeg tilføre en (tray icon), så jeg højreklikke på iconen og vælge Exit for at lukke Commandoprop.
Avatar billede dr_chaos Nybegynder
06. februar 2007 - 15:00 #1
Du skal bruge noget i denne stil:
www.developer.com/net/csharp/article.php/3336751+c%23+notifyicon&hl=da&ct=clnk&cd=1&gl=ch" target="_blank">http://64.233.183.104/search?q=cache:4WNl0INAWDYJ:www.developer.com/net/csharp/article.php/3336751+c%23+notifyicon&hl=da&ct=clnk&cd=1&gl=ch

Men jeg tror du skal lave en windows app og ikke et consol projekt.
Avatar billede joseph Nybegynder
06. februar 2007 - 15:25 #2
kan man ikke kompinere mellem windows app og consol projekt ?
Jeg har også lavet en windows app med tray icon, som fungerer fint, men commandoprompt kommer ikke frem.dvs når jeg kører  (Application.Run(new Form1());)
som har tray icon, og som man kan højreklik på den og exit den, men jeg får en ikke commnadoprompt frem.
Jeg skal har begge to fungerende sammetidigt. Jeg ved ikke om jeg har brug for at arbejde med tråd?
Avatar billede joseph Nybegynder
06. februar 2007 - 15:36 #3
For at gøre det nemmere for jer til at fortå mit problem, så har jeg lavet den her lille eksampel på windows app. Så hvordan kan jeg kompinere koden, som ligger på spørgsmål beskrivelse og den her kod. så jeg kan få både kmmandopropt kørende og tray icon.

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.NotifyIcon notifyIcon1;
    private System.Windows.Forms.ContextMenu contextMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.ComponentModel.IContainer components;

    [STAThread]
   

    static void Main()
    {
        Application.Run(new Form1());
       
    }

    public Form1()
    {
        this.components = new System.ComponentModel.Container();
        this.contextMenu1 = new System.Windows.Forms.ContextMenu();
        this.menuItem1 = new System.Windows.Forms.MenuItem();

        // Initialize contextMenu1
        this.contextMenu1.MenuItems.AddRange(
                    new System.Windows.Forms.MenuItem[] { this.menuItem1 });

        // Initialize menuItem1
        this.menuItem1.Index = 0;
        this.menuItem1.Text = "E&xit";
        this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

        // Set up how the form should be displayed.
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Text = "Notify Icon Example";

        // Create the NotifyIcon.
        this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

        // The Icon property sets the icon that will appear
        // in the systray for this application.
        notifyIcon1.Icon = new Icon("backup.ICO");//TODO

        // The ContextMenu property sets the menu that will
        // appear when the systray icon is right clicked.
        notifyIcon1.ContextMenu = this.contextMenu1;

        // The Text property sets the text that will be displayed,
        // in a tooltip, when the mouse hovers over the systray icon.
        notifyIcon1.Text = "KPC Back up program";
        notifyIcon1.Visible = true;

        // Handle the DoubleClick event to activate the form.
        notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
        //Icon_Test.NewCon nc = new Icon_Test.NewCon();
        //nc.oneToOne();
    }

    protected override void Dispose(bool disposing)
    {
        // Clean up any components being used.
        if (disposing)
            if (components != null)
                components.Dispose();

        base.Dispose(disposing);
    }

    private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
    {
        // Show the form when the user double clicks on the notify icon.

        // Set the WindowState to normal if the form is minimized.
        if (this.WindowState == FormWindowState.Minimized)
            this.WindowState = FormWindowState.Normal;

        // Activate the form.
        this.Activate();
    }

    private void menuItem1_Click(object Sender, EventArgs e)
    {
        // Close the form, which closes the application.
        this.Close();
    }
}
Avatar billede dr_chaos Nybegynder
06. februar 2007 - 20:01 #4
hvad skal du bruge et commandvindue  til?
Avatar billede joseph Nybegynder
07. februar 2007 - 08:55 #5
Fordi hvis jeg får det her til at fungere, så kan jeg brug det på min oprindelig kod.
I starten har jeg lavet en consol projekt, som kører hele tid i baggrund. Den fungerer fine, men hvergang skal jeg exit (exe filen) ,skal jeg åbne joblist og afslut proces. Så tankt jeg, kan man ikke bare lave en icon, som man kan højreklik på den og exit den.
Avatar billede dr_chaos Nybegynder
07. februar 2007 - 14:40 #6
kan du ikke lave et form program hvor du aldrig viser form ?
Avatar billede joseph Nybegynder
07. februar 2007 - 14:59 #7
Det har jeg lavet, jeg har lavet Form visible til false
Jeg får icon som man kan høreklik på for at exit den.
men resten af program(eller den vigtigste del af program)kører ikke, når jeg skrive denne line (Application.Run(new Form1());) 
Det er som om programet bliver der. Den kan ikke køre den næste line af kode
Avatar billede joseph Nybegynder
07. februar 2007 - 15:07 #8
Og det næste kode line er en While sætning som er true hele tid.

og hvis jeg sætte While sætting foran (Application.Run(new Form1());) systemt bliver hele tid i While fordi den er true hele tid. så kan jeg ikke får min sys icon.
Jeg vil kører både While sætning og (Application.Run(new Form1());) sammetidig.
Avatar billede dr_chaos Nybegynder
07. februar 2007 - 16:48 #9
Det kan du ikke gøre. Et while loop vil aldrig blive afbrudt.
Hvad er formålet med det while loop ?
Avatar billede joseph Nybegynder
07. februar 2007 - 21:08 #10
mit while loop er mit hoved program, hvor (exe filen) scaner PC'en hele tiden og kører i baggrund.
(tray icon) er bare en eksra component, som skal hjelp mig med at exit exe filen, når jeg vil det.
Avatar billede dr_chaos Nybegynder
07. februar 2007 - 22:20 #11
hvorfor hvad scanner du efter ?
Avatar billede joseph Nybegynder
08. februar 2007 - 08:20 #12
scanner disse tre folder(Skrivebord, Dokumenter og Foretrukne), om der er kommet nye file i dem eller nogle filer er blevet ændret. Hvis jeg finder nogle, så tager jeg back up af de nye/ændrede filer.

Programet funger fint. Jeg mangle bare icon til den.
Avatar billede joseph Nybegynder
08. februar 2007 - 11:56 #13
Det er det mit program lave finde nye file og tager back up af dem
Avatar billede dr_chaos Nybegynder
08. februar 2007 - 16:51 #14
Du bør kigge på filesystemwatcher.
Der kan du få et event når der bliver lavet en ny fil og du fange andre events.

Her er lidt gode tips om den.
http://weblogs.asp.net/ashben/archive/2003/10/14/31773.aspx
Avatar billede dr_chaos Nybegynder
08. februar 2007 - 16:52 #15
Avatar billede joseph Nybegynder
24. februar 2007 - 18:04 #16
Jeg fandt en anden løsning. Jeg har brugt (tråd teknologi).

Men tak for hjælpen(chaos)
Avatar billede dr_chaos Nybegynder
24. februar 2007 - 18:08 #17
Helt fint husk at lukke spørgsmålet :)
Avatar billede joseph Nybegynder
25. februar 2007 - 13:38 #18
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester