C# Windows Form

Fermé
Priigame - 12 févr. 2018 à 14:48
 Utilisateur anonyme - 13 févr. 2018 à 18:45
Bonjour à tous,
Je suis confronté à un problème en C# (dont je connais que les bases :x), je cherche à avoir en Windows form une zone type TextBox ou j'aurais un historique de message envoyé.

Si quelqu'un as une idée de comment s'y prendre je suis intéressé.

Je suis sur un TP de tchat par socket UDP, la partie console marche nickel mais je ne vois pas comment retranscrire ça en Windows form.

Merci d'avance
A voir également:

3 réponses

Bonjour,
Oui et ? Je n'ai pas compris l’intérêt de m'envoyer ce liens :/

Je demande juste une idée de solution permettant d'afficher un historique de chaine de caractère dans une textbox avec pour seul règle 1 chaine par ligne.

Si il manque quelque chose, il serait plus judicieux de le dire.

merci d'avance.
0
Utilisateur anonyme
13 févr. 2018 à 09:08
Et bien pour commencer, comme écrit dans l’article, il manque ce que tu as tenté.
A défaut, puisque le mode console fonctionne, au moins ce code.
Ceci afin d’avoir une idée de ton niveau, parce que dans la dizaines de solutions qui me viennent à l’esprit, il doit y en avoir que tu n’as pas encore vu.
0
Je fais de la programmation depuis Septembre donc assez léger le niveau mais cela m'intéresse.

Le code en console n'est pas que de moi, j'avais juste à le compléter et comprendre son fonctionnement sur les grandes lignes, je le rajoute quand même au cas ou.

Malheureusement , je ne pense pas que ça aiderai à déterminer mon niveau.

Je pense avoir trouver une solution:
String = String + Environnement.NewLine + NewString;

Je testerai plus tard si cela fonctionne.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace TP4
{
    class Program
    {
        static UdpClient sockUdp;
        static HttpListener Serveurweb ;
        static String[] MessageTab = new String[10];

        static void Main(string[] args)
        {
            String Pseudo = "", Message = "";

            Console.Write("Saisir votre pseudo:  ");
            Pseudo = Console.ReadLine();

            System.Threading.Thread.Sleep(100);
            Console.Write("█");
            System.Threading.Thread.Sleep(100);
            Console.Write("███");
            System.Threading.Thread.Sleep(100);
            Console.Write("███");
            System.Threading.Thread.Sleep(100);
            Console.Write("████");
            System.Threading.Thread.Sleep(100);
            Console.Write("██");
            System.Threading.Thread.Sleep(100);
            Console.Write("███");
            System.Threading.Thread.Sleep(200);
            Console.Write("██");
            System.Threading.Thread.Sleep(300);
            Console.Write("███");
            System.Threading.Thread.Sleep(100);
            Console.Write("██");
            System.Threading.Thread.Sleep(200);
            Console.Write("██████");


            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("  100%");
            Console.WriteLine("");
            Console.WriteLine("Vous êtes connecté en tant que: " + Pseudo);
            Console.ResetColor();

            Console.WriteLine("Appuyer sur Entrer pour autoriser la saisie");

            ConnectUdp();
            WebUdp();

            sockUdp.BeginReceive(new AsyncCallback(ReceptionUdp),null);
            Serveurweb.BeginGetContext(new AsyncCallback(ReceptionDmdWeb),null) ;

            do
            {
                if (Console.ReadKey().Key == ConsoleKey.Enter)
                {
                    Console.Write("Vous: ");
                    Message = Console.ReadLine();

                    EmissionUdp(Message, Pseudo);
                }

            }
            while (Message != "Exit");
            
        }

        static void EmissionUdp(string Message, string Pseudo)
        {
        Byte[] TrameEmission=Encoding.ASCII.GetBytes(Pseudo + ": " + Message);

        sockUdp.Send(TrameEmission,TrameEmission.Length,
        new IPEndPoint(IPAddress.Parse("239.54.55.57"), 8800));
        }

        static void ConnectUdp()
        {
            sockUdp = new UdpClient(8800, AddressFamily.InterNetwork);
            sockUdp.JoinMulticastGroup(IPAddress.Parse("239.54.55.57"));
            sockUdp.MulticastLoopback = false;
        }

        static void WebUdp()
        {
            Serveurweb = new HttpListener();
            Serveurweb.Prefixes.Add("http://+:80/Temporary_Listen_Addresses/MesPages/");
            Serveurweb.Start();
        }

        static void ReceptionUdp(IAsyncResult MsgRecu)
        {
            //Recuperation de la trame recue (message et caracterre emetteur)
            IPEndPoint equipementdistant = new IPEndPoint(IPAddress.Any, 0);
            byte[] Trame = sockUdp.EndReceive(MsgRecu, ref equipementdistant);

            //Mise sous la forme d'une chaine de caractere
            String S = Encoding.ASCII.GetString(Trame);

            MessageTab[9] = MessageTab[8];
            MessageTab[8] = MessageTab[7];
            MessageTab[7] = MessageTab[6];
            MessageTab[6] = MessageTab[5];
            MessageTab[5] = MessageTab[4];
            MessageTab[4] = MessageTab[3];
            MessageTab[3] = MessageTab[2];
            MessageTab[2] = MessageTab[1];
            MessageTab[1] = MessageTab[0];
            MessageTab[0] = Convert.ToString(S);

            //foreach (string s in MessageTab)
            Console.WriteLine(S);

            //On re-arme la reception pour la fois suivante
            sockUdp.BeginReceive(new AsyncCallback(ReceptionUdp), null);

        }

        static void ReceptionDmdWeb(IAsyncResult DemandeHttp)
        {
            int incr=0;
            HttpListenerContext context = Serveurweb.EndGetContext(DemandeHttp);
            HttpListenerResponse response = context.Response;
            //Recuperation du flux de sortie
            System.IO.Stream output = response.OutputStream;

            for (incr = 0; incr < 9; incr++)
            {
                byte[] Message = Encoding.ASCII.GetBytes("<B>" + MessageTab[incr] + "</B></BR>");
                output.Write(Message, 0, Message.Length);
            }

            output.Close();
            //On re arme l’ecoute pour les requetes suivantes
            Serveurweb.BeginGetContext (
            new AsyncCallback(ReceptionDmdWeb), null) ;
        }

        

    }
}


Explications:
Le code n'est clairement pas optimiser, il as été compléter en "tâtonnant" et on avait du temps à tuer.
Il devait également afficher les derniers messages sur une page web via un serveur exécuter dans le code, partie que je n'utilise pas pour le passage en Winforms.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
0
Utilisateur anonyme
13 févr. 2018 à 10:07
Ok,
Effectivement
MonTextBox.Text = MonTextBox.Text + Environnement.NewLine + "Nouveau texte"

est une solution, cependant au debut tu auras: rien + nouvelle ligne + nouveau texte => donc une ligne vide.
Du coup, il vaut mieux faire
MonTextBox.Text = MonTextBox.Text + "Nouveau texte" + Environnement.NewLine 


Tu peux aussi regarder la classe stringBuilder, ou string.Join().

Sinon, le textbox est imposé ou c’est un choix?
0
Merci des infos, c'est un choix.
Je regardais d'abord avec une listebox mais j’étais un peu perdu du coup je me suis rabattu sur cela.
0
Utilisateur anonyme
13 févr. 2018 à 18:45
La listbox serait plus adaptée.
Il suffit d’ajouter un item, dans la collecrion items
0