2013-02-17 2 views
8

J'ai créé une application de gestion des tâches et je voulais implémenter la possibilité pour les 2 utilisateurs de discuter de tâches spécifiques.La bonne façon de vérifier si un formulaire est déjà affiché?

Dans Form1 J'ai une minuterie qui vérifie sur la base de données pour tout nouveau message envoyé. Lorsqu'un nouveau message est trouvé, le formulaire de discussion apparaît et affiche le message. Jusqu'à présent, tout fonctionne comme prévu, mais je n'ai qu'un seul problème.

Le problème: Une fois qu'un nouveau message trouvé pour la première fois, la fenêtre de chat apparaissent, mais quand un nouveau message se trouve, une autre fenêtre apparaît, et pour chaque nouveau message que je une nouvelle instance de chat fenêtre créée.

Le code J'utilise:

List<string> tasksToDiscuss = checkForTasksToDiscuss(fullname); 

     if (tasksToDiscuss.Count > 0) { 
// open the chat window directly minimized 
Form14 frm14 = new Form14(); 
frm14.get_from = fullname; 
frm14.get_to = tasksToDiscuss[1]; 
frm14.get_task_id = int.Parse(tasksToDiscuss[3]); 
// set message as read 
if (setMessageAsRead(tasksToDiscuss[1], fullname, int.Parse(tasksToDiscuss[3]))) 
        { 
         // now show the chat window minimized 
         frm14.Show(); 
        } 

} 

J'ai essayé de remplacer la ligne:
frm14.Show(); avec frm14.ShowDialog();

J'ai remarqué que lorsque le nouveau message est reçu, la fenêtre de chat (form14) est Le message suivant s'affiche, et lorsqu'un autre message est reçu du même utilisateur, aucune nouvelle fenêtre de discussion n'apparaît, mais le problème est qu'après avoir fermé la fenêtre de discussion, elle n'apparaît plus même lorsque je reçois de nouveaux messages. Ce que je pense à faire est de changer la fenêtre de discussion (Form14.Text) au nom complet de l'utilisateur, et la prochaine fois qu'un message est reçu, je vérifie si la fenêtre spécifique est déjà ouverte, puis ne l'ouvre pas sinon, je montre le formulaire en utilisant la méthode .Show().

Est-ce la bonne façon de faire apparaître la fenêtre si un nouveau message est reçu et qu'il est déjà ouvert? et Comment vérifier si une fenêtre est ouverte en fonction de son texte (texte de la barre de titre)?

Merci d'avoir pris le temps de lire ma question. Toute aide serait grandement appréciée

Répondre

9

Tout d'abord, vous créez une nouvelle instance de Form14 chaque fois que vous avez un nouveau message.

En second lieu Show et ShowDialog deux choses très différentes:

Show affiche uniquement la forme, alors que ShowDialog affiche la forme comme une boîte de dialogue modale. Cela signifie que l'utilisateur ne peut rien faire d'autre jusqu'à ce qu'il rejette le formulaire.

Vous devez avoir une instance unique du formulaire et vous pouvez utiliser la propriété Visible pour déterminer si elle est affichée ou non.Donc, vous auriez:

private Form14 frm14; 

Puis dans le constructeur:

frm14 = new Form14(); 

Puis dans votre code:

if (!frm14.Visible) 
{ 
    // Add the message 
    frm14.Show(); 
} else{ 
    // Top 
    frm14.BringToFront(); 
} 
+0

Votre code fonctionne comme prévu. Mais que faire si je reçois un nouveau message d'un autre utilisateur pendant que je discute déjà avec quelqu'un d'autre? –

+0

@ShikataGaNai Dans ce cas, vous avez probablement besoin d'une liste de formulaires - un par utilisateur sur le système. Remplacez le formulaire unique avec un dictionnaire ou peut-être même en faire un correctement de l'utilisateur. – ChrisF

3

Essayez de faire de form14 un membre de form1. Lorsque vous recevez un nouveau message, vérifiez la propriété Visible de forom14 pour savoir s'il est déjà affiché.

Questions connexes