Question

J'ai écrit une application de chat qui fonctionne comme souhaité à l'exception d'une ligne de code qui me pose des problèmes.

Dans mon MainForm, j'ai :

        ChatBox cb = new ChatBox(person); 
        this.AddOwnedForm(cb);
        cb.Show();

Ceci affiche ma boîte de discussion. Le problème est que cela ne peut être utilisé qu'une seule fois. Si j'essaie d'ajouter du texte dans le fil de discussion de ma boîte de discussion :

        if (Ex.Message.Contains("chat ended"))
           {
             entryBox.Enabled = false;
             send.Enabled = false;
            if (displayBox.Enabled == true)
               {
                displayBox.AppendText("The User has left chat" + Environment.NewLine); // <- PROBLEM LINE OF CODE
                displayBox.Enabled = false; 
               }
           }

Avec la ligne appendtext non commentée, ce programme ouvrira une boîte de discussion une fois et se fermera correctement, mais se bloquera si j'essaie d'en ouvrir une autre.Sans cette ligne de code, l'application fonctionne correctement.Je pense que cela peut être un problème avec le fil de discussion qui ne se termine pas correctement ou quelque chose du genre.

Toute aide sur cette question serait grandement appréciée.Si je l'ai mal expliqué, demandez simplement et j'essaierai de faire un meilleur travail.

MODIFIER:

J'ai essayé d'utiliser un délégué mais j'ai toujours le même problème.

private void setDisplayBox(RichTextBox db)
    {
        if (this.InvokeRequired == false)
        {
            db.SelectionColor = Color.Red;
            db.AppendText("The User has left chat" + Environment.NewLine);
        }
        else
        {
        SetDisplayBox setDb = new SetDisplayBox(setDisplayBox);
        this.Invoke(setDb, new object[] { db });
        }
    }

Cela me laisse vraiment perplexe maintenant :/.

Était-ce utile?

La solution

Je pense que vous essayez de définir le texte dans votre fil utilisateur. Control.Enabled fonctionnera bien dans un autre fil de discussion, mais vous ne pouvez définir aucune valeur telle que Text là-bas.Ajoutez donc le texte dans votre fil de discussion principal.vous pouvez utiliser displayBox.Invoke méthode pour y parvenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top