J'ai une solution hackish très typique pour minimiser dans la barre système en C#:Prévenir animation sur form.Show() lorsqu'il est activé à partir d'un NotifyIcon
private void MainFormResize(object sender, EventArgs e) {
if (FormWindowState.Minimized == this.WindowState) {
this.Hide();
systemTrayIcon.Visible = true;
}
}
private void systemTrayIconMouseDoubleClick(object sender, MouseEventArgs e) {
systemTrayIcon.Visible = false;
this.Show();
this.WindowState = FormWindowState.Normal;
}
Idéalement, je veux que mon application à disparaître/réapparaître en réduisant au minimum à ou réouverture à partir de la barre d'état système. Réduire à la barre d'état système fonctionne comme prévu - la fenêtre disparaît sans délai et une nouvelle icône apparaît.
Un double-clic sur l'icône a cependant des effets très étranges. La fenêtre subit une animation de redimensionnement à sa position - la fenêtre semble voler à partir d'un coin complètement aléatoire de l'écran.
Je ne veux pas ça. Je veux juste Minimize > -Poof- Disappear
et Double-click > -Poof- Appear
sans aucune animation ou des retards ou quoi que ce soit de ce genre.
Pourquoi ce code a-t-il une animation? Si j'appelle Form.Show()
dans n'importe quel autre contexte, la fenêtre apparaît automatiquement comme je veux, mais lorsqu'elle est appelée à partir d'un NotifyIcon, elle agit bizarrement. Je pensais que ce pourrait être la ligne WindowState = FormWindowState.Normal
, mais si j'enlève cela, la fenêtre n'est pas mise au premier plan.
Modifier: Ce problème semble être lié au système d'exploitation et au thème. Le problème n'apparaît pas pour exister dans Windows XP, mais c'est difficile à dire parce que ma machine virtuelle est un peu décalée. Dans Windows 7 Aero, le problème de position abitrary-offscreen se produit. Dans Windows 7 Basic/Classic, il se réduit à la barre des tâches et réapparaît à partir de son ancienne position dans la barre des tâches (comme s'il était réellement réduit à la barre des tâches, pas à la barre d'état système). Je n'ai pas testé sur Vista. Des conseils?
Si je le fais, la fenêtre ne peut être affiché du tout. Il apparaît dans la barre des tâches, mais cliquer sur ce bouton pour le faire disparaître le re-minimise. – Corey
J'ai ajouté un peu d'information supplémentaire à mon message si cela aide du tout. – Corey
Merci pour le conseil, cet effet est un peu plus souhaitable.Le problème est maintenant que la modification de WindowState rappelle MainFormResize, et je suppose que quelque chose d'interne invoqué par MainFormResize que je ne peux pas contrôler essaye d'afficher la fenêtre quand WindowState.Normal est appelé. Ce qui me laisse avec est la forme minimise, puis réapparaît pendant une fraction de milliseconde (avec des contrôles noircis parce que le système ne peut pas charger le formulaire si vite), puis le cache. C'est assez étrange. – Corey