it-swarm.com.de

Wie kann ich eine .NET Windows Forms-Anwendung erstellen, die nur in der Taskleiste ausgeführt wird?

Was muss ich tun, um eine Windows Forms -Anwendung in der Taskleiste auszuführen?

Keine Anwendung, die auf die Taskleiste minimiert werden kann, sondern eine, die nur in der Taskleiste vorhanden ist und nur ein Symbol, einen Tooltip und ein Kontextmenü enthält.

202
xyz

Die grundlegende Antwort bei der Verwendung eines NotifyIcon ist richtig, aber wie bei vielen .NET-Anwendungen sind eine Vielzahl von Feinheiten daran beteiligt , richtig . Das von Brad erwähnte Tutorial gibt einen guten Überblick über die Grundlagen, geht jedoch nicht auf Folgendes ein:

  • Schließt das Schließen der Anwendung aus der Taskleiste alle geöffneten untergeordneten Formulare ordnungsgemäß?
  • Erzwingt die Anwendung, dass nur eine Instanz von sich selbst ausgeführt wird (gilt für die meisten, jedoch nicht für alle Tray-Apps)?
  • So öffnen Sie auf Wunsch untergeordnete WPF-Fenster sowie untergeordnete WinForms-Fenster.
  • So unterstützen Sie dynamische Kontextmenüs.
  • Das Standard-NotifyIcon befindet sich im WinForms-Bereich. kann ich eine reine WPF-Lösung erstellen? (Ja, du kannst!)

Ich hatte gerade einen Artikel auf Simple-Talk.com veröffentlicht, der diese Punkte und mehr im Detail behandelt und ein Tray-Anwendungs-Framework bereitstellt, das Sie sofort verwenden können, sowie eine vollständige, realistische Beispielanwendung, die alles in der Praxis zeigt. Siehe Erstellen von Tray-Anwendungen in .NET: Ein praktisches Handbuch , veröffentlicht im November 2010.

151
Michael Sorens

Der Artikel zum Code-Projekt Erstellen einer Tasktray-Anwendung gibt eine sehr einfache Erklärung und ein Beispiel für das Erstellen einer Anwendung, die nur in der Taskleiste vorhanden ist.

Grundsätzlich ändern Sie die Application.Run(new Form1()); Zeile in Program.cs, um stattdessen eine Klasse zu starten, die von ApplicationContext erbt, und den Konstruktor für diese Klasse zu veranlassen, ein NotifyIcon zu initialisieren

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();
    }
}
70
Fawzan Izy

Wie bereits erwähnt, müssen Sie Ihrer Anwendung ein NotifyIcon hinzufügen und dann den folgenden Code verwenden, um den Tooltip und das Kontextmenü festzulegen:

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 nur das Symbol in der Taskleiste:

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

Folgendes wird benötigt, wenn Sie ein Formular haben (aus welchem ​​Grund auch immer):

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

Der Rechtsklick, um das Kontextmenü aufzurufen, wird automatisch ausgeführt. Wenn Sie jedoch einen Linksklick ausführen möchten, müssen Sie einen Click-Handler hinzufügen:

    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;
        }
    }
17
ChrisF

Ich habe eine Traybar-App mit .NET 1.1 geschrieben und brauchte kein Formular.
Legen Sie zunächst das Startobjekt des Projekts als Sub Main fest, das in einem Modul definiert ist.
Erstellen Sie dann programmgesteuert die Komponenten: NotifyIcon und ContextMenu.
Stellen Sie sicher, dass Sie ein MenuItem "Quit" oder ähnliches einfügen.
Binde das ContextMenu an das NotifyIcon.
Application.Run() aufrufen.
Rufen Sie im Ereignishandler für Quit MenuItem unbedingt set NotifyIcon.Visible = False Und dann Application.Exit() auf. Fügen Sie dem ContextMenu das hinzu, was Sie brauchen, und behandeln Sie es richtig :)

15
M.Turrini
  1. Erstellen Sie mit dem Assistenten eine neue Windows-Anwendung.
  2. Löschen Sie Form1 Aus dem Code.
  3. Entfernen Sie den Code in Program.cs, indem Sie Form1 Starten.
  4. Verwenden Sie die Klasse NotifyIcon, um Ihr Taskleistensymbol zu erstellen (weisen Sie ihm ein Symbol zu).
  5. Fügen Sie ein Kontextmenü hinzu.
  6. Oder reagieren Sie auf den Mausklick von NotifyIcon und unterscheiden Sie zwischen Rechts- und Linksklick, indem Sie Ihr Kontextmenü einstellen und anzeigen, für welche Taste (rechts/links) Sie gedrückt haben.
  7. Application.Run() um die App am Laufen zu halten, mit Application.Exit() um zu beenden. Oder eine bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}. Stellen Sie dann bRunning = false; Ein, um die App zu beenden.
10
Wolf5

Die Anwendung "Taskleiste" ist nur eine normale Windows-Anwendung. Der einzige Unterschied besteht darin, dass im Windows-Taskleistenbereich ein Symbol erstellt wird. Um ein sys.tray-Symbol zu erstellen, verwenden Sie die NotifyIcon-Komponente. Sie finden sie in der Toolbox (Allgemeine Steuerelemente) und ändern ihre Eigenschaften: Symbol, QuickInfo. Außerdem können Sie mit Mausklicks und Doppelklicks umgehen.

Und noch eine Sache, um Look and Feel oder Standard Tray App zu erreichen. Fügen Sie folgende Zeilen in Ihr Hauptformular ein:

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

Soweit mir bekannt ist, müssen Sie die Anwendung immer noch mithilfe eines Formulars schreiben, haben jedoch keine Steuerelemente im Formular und müssen es niemals sichtbar machen. Verwenden Sie das NotifyIcon (ein MSDN-Beispiel dafür finden Sie hier ), um Ihre Bewerbung zu schreiben.

6

Hier ist, wie ich es mit Visual Studio 201 , .NET 4 gemacht habe

  1. Erstellen Sie eine Windows Forms-Anwendung, und legen Sie in den Eigenschaften "Einzelinstanzanwendung erstellen" fest
  2. Fügen Sie einen ContextMenuStrip hinzu
  3. Fügen Sie dem Kontextmenü einige Einträge hinzu, doppelklicken Sie darauf, um die Handler zu erhalten, z. B. 'exit' (Doppelklick) -> handler -> me.Close ()
  4. Fügen Sie ein NotifyIcon hinzu, und wählen Sie im Designer-Set contextMenuStrip ein Symbol aus (einige finden Sie im VisualStudio-Ordner unter 'common7 ...').
  5. Legen Sie die Eigenschaften für das Formular im Designer fest: FormBorderStyle: none, ShowIcon: false, ShowInTaskbar: false, Opazität: 0%, WindowState: Minimized
  6. Fügen Sie Me.Visible = false am Ende von Form1_Load hinzu. Dadurch wird das Symbol bei der Verwendung ausgeblendet Ctrl + Tab
  7. Nach Bedarf ausführen und anpassen.
2
Evolved

Es ist ein sehr benutzerfreundliches Framework für Notification Area-Anwendungen. Es reicht aus, NotificationIcon zum Basisformular hinzuzufügen und den automatisch generierten Code in den folgenden Code zu ändern:

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;
        }
    }
}

Einfach hinzufügen

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

zu Ihrem Formularobjekt. In der Taskleiste wird nur ein Symbol angezeigt.

0
YTerle