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
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? –
@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