réduire l'application dans la barre d'état système

114

J'ai une application Windows Forms optimisée par C # et Visual Studio 2010.

Comment puis-je réduire mon application dans la barre d'état système (et non dans la barre des tâches), puis la ramener en double-cliquant dans la barre d'état système? une idée? aussi, comment puis-je créer un menu dans l'icône de la barre d'état système et lorsque je clique dessus avec le bouton droit de la souris, il affiche un menu comme Connexion, Déconnexion, Connexion, quelque chose comme ça. En outre, existe-t-il des méthodes pour afficher comme un ballon surgissant de la barre d'état système?

PS: j'ai déjà ajouté un notifyIcon, mais je ne sais pas comment l'utiliser.

WantIt
la source
Ici vous pouvez télécharger un excellent exemple de code simple-talk.com/dotnet/.net-framework
Développeur
Vous allez vouloir être sûr d'aller dans Designer.cs du formulaire et "enregistrer" le gestionnaire d'événements ou aucun de ceux-ci ne fonctionnera (je ne pouvais pas le comprendre). Vous pouvez le faire en ajoutant quelque chose comme ceci: this.Resize + = new System.EventHandler (this.ManagementForm_Resize);
Brad

Réponses:

149

Gérez l'événement Resize du formulaire. Dans ce gestionnaire, vous remplacez la fonctionnalité de base de l'événement Resize pour réduire le formulaire dans la barre d'état système et non dans la barre des tâches. Pour ce faire, procédez comme suit dans le gestionnaire d'événements Resize de votre formulaire: Vérifiez si la propriété WindowState du formulaire est définie sur FormWindowState.Minimized. Si oui, masquez votre formulaire, activez l'objet NotifyIcon et affichez l'info-bulle qui affiche des informations. Une fois que WindowState devient FormWindowState.Normal, désactivez l'objet NotifyIcon en définissant sa propriété Visible sur false. Maintenant, vous voulez que la fenêtre réapparaisse lorsque vous double-cliquez sur l'objet NotifyIcon dans la barre des tâches. Pour cela, gérez l'événement MouseDoubleClick de NotifyIcon. Ici, vous affichez le formulaire en utilisant la méthode Show ().

private void frmMain_Resize(object sender, EventArgs e)
{
    if (FormWindowState.Minimized == this.WindowState)
    {
       mynotifyicon.Visible = true;
       mynotifyicon.ShowBalloonTip(500);
       this.Hide();
    }

    else if (FormWindowState.Normal == this.WindowState)
    {
       mynotifyicon.Visible = false;
    }
}
CD..
la source
5
vous pouvez modifier la propriété Form.FormBorderStyle msdn.microsoft.com/en-us/library
CD ..
tnx! cela a fonctionné .. aussi une idée pour désactiver ces boutons minimiser, fermer, maximiser en haut à droite? tnx
WantIt
tnx cela a fonctionné aussi! De plus, lorsque je double-clique sur l'icône dans la barre d'état système, la fenêtre n'est pas en haut avec d'autres applications, je dois faire un effort en cliquant sur la fenêtre dans la barre des tâches pour qu'elle apparaisse. Comment pouvons-nous gérer cela? tnx so much
WantIt
69

J'ai trouvé cela pour accomplir toute la solution. La réponse ci-dessus ne parvient pas à supprimer la fenêtre de la barre des tâches.

private void ImportStatusForm_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(3000);
        this.ShowInTaskbar = false;
    }
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    notifyIcon.Visible = false;
}

Il est également recommandé de définir les propriétés suivantes du contrôle d'icône de notification à l'aide du concepteur de formulaires.

this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
Ben Gripka
la source
7
Vous manquez this.Show();avantthis.WindowState = FormWindowState.Normal;
developerwjk
1
Tapez "l'utilisateur ne fait rien". ;)
Andrew
1
@developerwjk, il ne manque pas car il n'appelle pas Hide(). Mais le problème avec cette approche est que la fenêtre apparaît toujours lorsque vous appuyez sur Alt-Tab. Je préfère appeler Hide()et de cette façon, vous n'avez pas du tout à utiliser la ShowInTaskbarpropriété.
Andrew
@Andrew J'ai des problèmes lors de l'utilisation Show()et Hide(); après avoir caché, montré, puis caché, il ne s'affichera plus.
newbieguy
@newbieguy, je suppose que vous devez créer une nouvelle question, car votre problème ne convient pas pour un commentaire sur une réponse. Vous devrez fournir plus d'informations, comme le code que vous utilisez. Vous pouvez inclure un lien vers la réponse que vous avez essayé d'utiliser.
Andrew
17

J'irais avec

private void Form1_Resize(object sender, EventArgs e)
{
     if (FormWindowState.Minimized == this.WindowState)
     {
          notifyIcon1.Visible = true;
          notifyIcon1.ShowBalloonTip(500);
          this.Hide();    
     }
     else if (FormWindowState.Normal == this.WindowState)
     {
          notifyIcon1.Visible = false;
     }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     this.Show();
     this.WindowState = FormWindowState.Normal;
}
Alejandro del Río
la source
17

n'oubliez pas d'ajouter un fichier icône à votre notifyIcon ou il n'apparaîtra pas dans la barre d'état.

ewwink
la source
la partie la plus nécessaire du sujet. Pouvez-vous ajouter un peu plus d'informations, comment le forcer à utiliser l'icône par défaut?
T.Todua le
12

essaye ça

 private void Form1_Load(object sender, EventArgs e)
    {
        notifyIcon1.BalloonTipText = "Application Minimized.";
        notifyIcon1.BalloonTipTitle = "test";
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = false;
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(1000);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        WindowState = FormWindowState.Normal;
    }
Tanmay Nehete
la source
1
Si vous vous cachez simplement de la barre des tâches au lieu d'appeler this.Hide(), la fenêtre apparaît toujours lorsque vous faites Alt-Tab.
Andrew
3

C'est la méthode que j'utilise dans mes applications, elle est assez simple et explicite mais je suis heureux de donner plus de détails en réponse à vos commentaires.

    public Form1()
    {
        InitializeComponent();

        // When window state changed, trigger state update.
        this.Resize += SetMinimizeState;

        // When tray icon clicked, trigger window state change.       
        systemTrayIcon.Click += ToggleMinimizeState;
    }      

    // Toggle state between Normal and Minimized.
    private void ToggleMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;
        this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
    }

    // Show/Hide window and tray icon to match window state.
    private void SetMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;

        this.ShowInTaskbar = !isMinimized;           
        systemTrayIcon.Visible = isMinimized;
        if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
    }
Guêpe
la source
2
Cette solution et d'autres ont un problème: si le formulaire est caché sous d'autres fenêtres, l'utilisateur ne veut probablement pas le minimiser en cliquant sur l'icône. Au lieu de cela, il devrait être ciblé. Voir ma question ici: stackoverflow.com/questions/36797442/…
maf-soft
1

Au clic sur l'image dans la barre d'état système, vous pouvez vérifier si le cadre est visible et ensuite vous devez définir Visible = true ou false

Lorenzo Sogliani
la source
1

... et pour votre menu de notification de clic droit, ajoutez un menu contextuel au formulaire et éditez-le et définissez des événements de clic de souris pour chacun des contextmenuitems en double-cliquant dessus, puis attachez-le à la notifyicon1 en sélectionnant le ContextMenuStrip dans la propriété notifyicon.

Ryu
la source
-2

this.WindowState = FormWindowState.Minimized;

Hasala Senevirathne
la source