2009-11-11 13 views
0

Les attributs sont géniaux. Mais est-il possible de créer une classe d'attribut C# qui, lorsqu'elle est étiquetée, rend votre application minimale dans la barre d'état système? Techniquement, l'attribut devrait être placé sur la classe du formulaire principal. Une fois que l'utilisateur clique sur le bouton X, ce formulaire ne doit pas se terminer, mais doit être réduit à la barre des tâches. L'icône de minimisation doit également être spécifiée dans l'attribut.Possibilité d'implémenter Minimize-to-Tray en C# dans un attribut

Est-ce techniquement faisable? Je ne trouve aucune information sur l'écrasement du code de classe d'un attribut placé sur cette classe. (Vous devez au moins écraser une méthode pour la réduire au minimum.)

Répondre

2

Pourquoi ne pas faire ceci:

class TrayForm : Form 
{ 
    NotifyIcon notifyIcon = new NotifyIcon(); 
    protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall) 
     { 
      e.Cancel = true; 
      this.Hide(); 
      this.notifyIcon.Visible = true; 
     } 

     base.OnFormClosing(e); 
    } 

    protected override void OnSizeChanged(EventArgs e) 
    { 
     if (WindowState == FormWindowState.Minimized) 
     { 
      this.Hide(); 
      this.notifyIcon.Visible = true; 
     } 

     base.OnSizeChanged(e); 
    } 
} 
+0

Merci pour le downvote - Je sais qui il était! –

+0

+1 C'est comme la version matérialisée de ma réponse lol, plus j'aime la façon dont vous avez expliqué l'arrêt du système et la sortie de l'application (les choses que j'oublie toujours les premières fois). BTW ne me sens pas mal pour la downvote, je me suis downvoted trop sans explication, ça arrive juste. –

+0

On dirait que la réponse est non. Je cherchais à voir si les attributs peuvent être utilisés pour plus d'une implémentation de fonctionnalité orientée aspect; mais je suppose que ce n'est pas vraiment pour ça. Bravo, bon code :) – ashes999

1

Cela pourrait être réalisé plus facilement avec l'héritage de formulaire plutôt qu'avec les attributs, quelque chose va encore devoir interpréter les attributs à l'exécution pour obtenir l'effet désiré .

Avec l'héritage que vous pouvez simplement configurer la classe pour se comporter comme vous et ont essentiellement un opt-in ou capacité opt-out (même en utilisant un attribut pour le faire).

0

Il est impossible avec l'habituel Form classe. Mais il est possible de créer une propre classe qui hérite de Form et prend également en charge un tel attribut. Mais cela ne ferait que compliquer les choses, il serait probablement préférable d'ajouter une propriété MinimizeToTray à cette classe.

(comme l'exemple PhilipW fourni mais avec une propriété ajoutée pour contrôler le comportement)