Frage

Was muß ich tun, ein Windows Forms Anwendung läuft in der Taskleiste zu machen?

Nicht eine Anwendung, die auf dem Tablett minimieren, aber eine, die nur in der Schale, mit nichts mehr als ein Symbol, Werkzeugspitze und „rechten Maustaste“ -Menü.

existiert
War es hilfreich?

Lösung

Die grundlegende Antwort einer NotifyIcon der Verwendung ist richtig, aber, wie .NET viele Dinge, gibt es eine Fülle von Feinheiten dabei daran beteiligt rechts . Das Tutorial erwähnt von Brad gibt einen guten Gang durch die Grundlagen, aber jeder von ihnen geht nicht auf:

  • Ist aus der Taskleiste die Anwendung schließen schließen ordnungsgemäß alle geöffneten Kind Formen?
  • Ist die Anwendung erzwingen, dass nur eine Instanz von selbst laufen kann (für die meisten, wenn auch nicht alle, Tray-Anwendungen)?
  • Wie WPF Kind Fenster sowie WinForms Kind Fenster zu öffnen, falls gewünscht.
  • Wie dynamische Kontextmenüs unterstützen.
  • Der Standard-NotifyIcon existiert in WinForms Raum; kann ich eine reine WPF-Lösung tun? (Ja, Sie können!)

Ich hatte gerade einen Artikel über Simple-Talk.com veröffentlicht, die diese Punkte und mehr im Detail befasst sich mit einem Tablett-Anwendungs-Framework bereitstellt, die Sie sofort einsetzen können, um, sowie eine komplette, reale Beispielanwendung zeigen alles in der Praxis. Siehe Erstellen Tray-Anwendungen in .NET. A Practical Guide , veröffentlicht November 2010

Andere Tipps

Der Code Projekt Artikel Erstellen einer Tasktray Anwendung gibt eine sehr einfache Erklärung und Beispiel die Erstellung eine Anwendung, die immer nur in der Taskleiste vorhanden ist.

Im Grunde die Application.Run(new Form1()); Linie in Program.cs ändern, um stattdessen eine Klasse zu starten, die von ApplicationContext erbt, und hat den Konstruktor für diese Klasse initialisieren einen NotifyIcon

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new MyCustomApplicationContext());
    }
}


public class MyCustomApplicationContext : ApplicationContext
{
    private NotifyIcon trayIcon;

    public MyCustomApplicationContext ()
    {
        // Initialize Tray Icon
        trayIcon = new NotifyIcon()
        {
            Icon = Resources.AppIcon,
            ContextMenu = new ContextMenu(new MenuItem[] {
                new MenuItem("Exit", Exit)
            }),
            Visible = true
        };
    }

    void Exit(object sender, EventArgs e)
    {
        // Hide tray icon, otherwise it will remain shown until user mouses over it
        trayIcon.Visible = false;

        Application.Exit();
    }
}

Wie mat1t sagt - Sie benötigen ein NotifyIcon zu Ihrer Anwendung hinzuzufügen und dann so etwas wie den folgenden Code zu verwenden, den Tooltip und Kontextmenü eingestellt werden:

this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));

Dieser Code zeigt das Symbol in der Taskleiste nur:

this.notifyIcon.Visible = true;  // Shows the notify icon in the system tray

Im Folgenden wird benötigt, wenn Sie ein Formular (aus irgendeinem Grund):

this.ShowInTaskbar = false;  // Removes the application from the taskbar
Hide();

Das Rechtsklick das Kontextmenü erhalten erfolgt automatisch, aber wenn Sie eine Aktion auf einem Links tun möchten, klicken Sie einen Click-Handler hinzufügen müssen:

    private void notifyIcon_Click(object sender, EventArgs e)
    {
        var eventArgs = e as MouseEventArgs;
        switch (eventArgs.Button)
        {
            // Left click to reactivate
            case MouseButtons.Left:
                // Do your stuff
                break;
        }
    }

Ich habe geschrieben eine traybar App mit .NET 1.1 und ich habe nicht eine Form brauchen.
Zunächst einmal, setzen Sie das Startobjekt des Projekts als Unter Main, in einem Modul definiert.
Erstellen Sie dann programmatisch die Komponenten:. Die NotifyIcon und ContextMenu
Achten Sie darauf, ein MenuItem „Quit“ oder ähnliches enthalten.
Binden Sie die ContextMenu zum NotifyIcon.
Invoke Application.Run().
Im Ereignishandler für das Beenden MenuItem sicher sein, setzt NotifyIcon.Visible = False zu nennen, dann Application.Exit(). Fügen Sie, was Sie brauchen, um die ContextMenu und ordnungsgemäß behandeln:)

  1. Erstellen Sie eine neue Windows-Anwendung mit dem Assistenten.
  2. Löschen Form1 aus dem Code.
  3. Entfernen Sie den Code in Program.cs die Form1 starten.
  4. Verwenden Sie die NotifyIcon Klasse Ihr System Tray-Icon zu erstellen (zuweisen ein Symbol, um es).
  5. Fügen Sie einen contextmenu zu.
  6. Oder reagieren auf NotifyIcon der Mausklick und differenciate zwischen der rechten und der linken Maustaste, Ihre contextmenu Einstellung und es für die immer Taste (rechts / links) gedrückt wurde zeigt.
  7. Application.Run() halten Sie die App mit Application.Exit() laufen zu beenden. Oder ein bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}. Dann setzen bRunning = false; die App zu verlassen.

„System Tray“ Anwendung ist nur eine ganz normale Win Forms-Anwendung, einziger Unterschied ist, dass es ein Symbol im Windows-System-Tray-Bereich schafft. Um sys.tray Symbol Verwendung NotifyIcon Komponente zu erstellen, können Sie es in Toolbox (Common Kontrollen) finden und ändern es ist Eigenschaften: Icon, Werkzeugspitze. Auch ermöglicht es Ihnen, per Mausklick, und doppelklicken Sie Nachrichten zu verarbeiten.

Und noch etwas, um Aussehen und fühlt sich an oder Standardfach App zu erreichen. hinzufügen followinf Linien auf der Hauptform Show-Event:

private void MainForm_Shown(object sender, EventArgs e)
{
    WindowState = FormWindowState.Minimized;
    Hide();
} 

Soweit ich bin mir bewusst, haben Sie immer noch die Anwendung schreiben über ein Formular, haben aber keine Steuerelemente auf dem Formular und legen Sie es nie sichtbar. Verwenden Sie die NotifyIcon (eine MSDN-Probe von der hier zu finden) zu schreiben Sie Ihre Anwendung.

Hier ist, wie ich es tat mit Visual Studio 2010 , .NET 4

  1. Erstellen Sie eine Windows Forms-Anwendung, stellen 'Make einzelne Instanz Anwendung' in Eigenschaften
  2. Fügen Sie einen Context
  3. Fügen Sie einige Einträge in das Kontextmenü Leiste einen Doppelklick auf sie die Handler zu bekommen, zum Beispiel 'exit' (Doppelklick) -> Handler -> Me.close ()
  4. Fügen Sie einen NotifyIcon, in dem Designer Context auf die einzustellen soeben erstellt wurde, ein Symbol auswählen (einige in der Visual Studio-Ordner unter finden ‚Common7 ...‘)
  5. Geben Sie Eigenschaften für das Formular im Designer: Formborderstyle: keine, ShowIcon: false, ShowInTaskbar: false, Opazität: 0%, Window: Minimized
  6. Fügen Sie Me.Visible = false am Ende der Form1_Load, wird dies das Symbol ausgeblendet, wenn mit Strg + Tab
  7. Ausführen und nach Bedarf anpassen.

Es ist sehr freundlich Rahmen für Notification Area Application ... es ist genug NotificationIcon zu Grundform hinzuzufügen und automatisch generierten Code ändern unten zu codieren:

public partial class Form1 : Form
{
    private bool hidden = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ShowInTaskbar = false;
        //this.WindowState = FormWindowState.Minimized;
        this.Hide();
        hidden = true;
    }

    private void notifyIcon1_Click(object sender, EventArgs e)
    {
        if (hidden) // this.WindowState == FormWindowState.Minimized)
        {
            // this.WindowState = FormWindowState.Normal;
            this.Show();
            hidden = false;
        }
        else
        {
            // this.WindowState = FormWindowState.Minimized;
            this.Hide();
            hidden = true;
        }
    }
}

Fügen Sie einfach

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

zu Ihrem Formular-Objekt. Sie werden nur ein Symbol in der Taskleiste sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top