2010-03-18 5 views
0

Est-ce que quelqu'un sait comment savoir si l'application Windows Form (C#) est ouverte ou si le client l'a fermée?
(Dans mon application, j'ai une application Windows Form (Form1) qui permet à l'utilisateur d'ouvrir un autre formulaire (Form2) Je veux savoir si le Form2 est ouvert ou fermé.)
Je dois savoir que parce que je cours le Form2 à partir d'un thread, et je veux faire tourner le thread jusqu'à ce que l'utilisateur ferme Form2.
Merci beaucoup!Comment savoir si l'application de formulaire est ouverte ou non C#

+0

déterminer que dans la même machine? – thelost

+0

Vous cherchez un événement à la fin de l'application? – Codesleuth

Répondre

0

Vous avez besoin d'élaborer un peu plus sur votre question. Parlez-vous de la surveillance de l'application à partir d'une autre application? Ou qu'une forme doit savoir si une autre est ouverte? Ou un formulaire a besoin de savoir quand une autre forme se ferme?

Il existe plusieurs façons de surveiller la fermeture de formulaires dans la même application.

Appel ShowDialog() sur votre formulaire au lieu de Show() veillera à ce que le code suivant l'appel ShowDialog() ne soit pas exécuté jusqu'à ce que l'utilisateur ferme la forme.

La classe Form possède une propriété Visible qui renvoie true/false selon que le formulaire est visible ou non. En ce qui concerne l'application elle-même, un événement ApplicationExit sur la classe Application statique est appelé juste avant la fermeture de l'application afin que vous puissiez l'écouter si, par exemple, vous devez effectuer un nettoyage à la sortie .

0

Si vous souhaitez exécuter une seule instance d'application, vérifiez le lien this.
Vous verrez également comment vérifier si un processus est toujours actif.

3

Vous pouvez vérifier si une forme d'un type donné est ouvert dans votre application comme celui-ci (LINQ):

if (Application.OpenForms.OfType<Form2>().Count() > 0) 
{ 
    // there is an instance of Form2 loaded 
} 
-1

Si vous voulez dire l'application MDI avec ses formes enfants:

private Dictionary<Type, Form> SingleInstanceForms = new Dictionary<Type, Form>(); 

public Form ActivateForm<T>() where T : Form, new() 
{ 
    Cursor.Current = Cursors.WaitCursor; 

    if (!this.SingleInstanceForms.ContainsKey(typeof(T))) 
    { 
     T newForm = new T(); 
     //setup child 
     newForm.MdiParent = this; 
     newForm.WindowState = FormWindowState.Maximized; 
     //newForm.Icon = Icon; 

     newForm.FormClosed += new FormClosedEventHandler(delegate(object sender, FormClosedEventArgs e) 
     { 
      this.SingleInstanceForms.Remove(sender.GetType()); 
     }); 

     this.SingleInstanceForms.Add(typeof(T), newForm); 

     newForm.Show(); 
     this.Refresh(); 
    } 

    Form formToActivate = this.SingleInstanceForms[typeof(T)]; 
    formToActivate.Activate(); 

    Cursor.Current = Cursors.Default; 

    return formToActivate; 
} 

cela créera le formulaire enfant s'il n'a pas encore été créé et l'activera s'il a été créé.

échantillon: ActivateForm<dlgChildOne>();

+0

-1: cette fonctionnalité est intégrée à WinForms. Voir la collection Application.OpenForms: http://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms.aspx – Juliet

+0

@juliet Que voulez-vous dire? C'est à propos de Application.OpenForms ... –

Questions connexes