62 votes

Quelle est la bonne façon de réduire les à bac C#, WinForms application?

Quelle est la bonne façon de minimiser une application WinForms de la barre d'état système?

J'ai vu hackish solutions comme, "réduire la, ensemble ShowInTaskbar = false, puis montrer votre NotifyIcon."

Les Solutions qui sont hackish car l'application ne semble pas réduire à la plaque comme d'autres applications, le code a pour détecter quand le jeu ShowInTaskbar = true, parmi d'autres problèmes.

Quelle est la bonne façon de le faire?

18voto

FlySwat Points 61945

Il est en fait pas gérés de façon de le faire que sous forme d'animation pour le bac en natif winforms, cependant, vous pouvez P/Invoke shell32.dll pour le faire:

Quelques bonnes infos ici (Dans les commentaires de ne pas le post):

http://blogs.msdn.com/jfoscoding/archive/2005/10/20/483300.aspx

Et ici, il est en C++:

http://www.codeproject.com/KB/shell/minimizetotray.aspx

Vous pouvez l'utiliser pour comprendre ce truc de Pinvoke pour votre version de C#.

8voto

Ryan Farley Points 7916
this.WindowState = FormWindowState.Minimized

Qui est construit dans le moyen de le faire et il semble bien pour moi la plupart du temps. La seule fois a quelques la folie de il est si vous l'appelez au démarrage qui a une certaine étrangeté, parfois c'est pourquoi la plupart des gens va également définir la ShowInTaskbar = false et masquer le formulaire de trop.

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.windowstate.aspx

5voto

Jeyavel Points 1149

Elle contribue,

 public partial class Form1 : Form
    {
        public static bool Close = false;
        Icon[] images;
        int offset = 0;


        public Form1()
        {
            InitializeComponent();

            notifyIcon1.BalloonTipText = "My application still working...";
            notifyIcon1.BalloonTipTitle = "My Sample Application";
            notifyIcon1.BalloonTipIcon = ToolTipIcon.Info; 
        }

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


        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Show();
            notifyIcon1.ShowBalloonTip(1000);
            WindowState = FormWindowState.Normal;

        }

        private void maximizeToolStripMenuItem_Click(object sender, EventArgs e)
        {

            this.Show();
            WindowState = FormWindowState.Normal;
        }

        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close = true;
            this.Close();  
        }



        // Handle Closing of the Form.
        protected override void OnClosing(CancelEventArgs e)
        {
            if (Close)
            {
                e.Cancel = false;
            }
            else
            {

                WindowState = FormWindowState.Minimized;
                e.Cancel = true;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Load the basic set of eight icons.
            images = new Icon[5];
            images[0] = new Icon("C:\\icon1.ico");
            images[1] = new Icon("C:\\icon2.ico");
            images[2] = new Icon("C:\\icon3.ico");
            images[3] = new Icon("C:\\icon4.ico");
            images[4] = new Icon("C:\\icon5.ico");
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            // Change the icon.
            // This event handler fires once every second (1000 ms).
            if (offset < 5)
            {
                notifyIcon1.Icon = images[offset];
                offset++;
            }
            else
            {
                offset = 0;
            }
        }

    }

3voto

Gulzar Nazim Points 35342

Mise à jour: il Semble que j'ai posté trop vite. J'ai aussi été en utilisant le hack ci-dessous pour un outil de mine. En attente de la bonne solution pour ce..........

Vous pouvez utiliser Windows.Les formulaires.NotifyIcon pour cela. http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

Ajouter NotifyIcon de la forme, de définir certaines propriétés et vous avez terminé.

        this.ShowIcon = false;//for the main form
        this.ShowInTaskbar = false;//for the main form
        this.notifyIcon1.Visible = true;//for notify icon
        this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));//set an icon for notifyicon

    private void Form1_Shown(object sender, EventArgs e)
    {
        this.Hide();
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X