C# Comment interagir avec un form depuis une classe

Inscrit
4 Aout 2016
Messages
166
Reactions
0
#1
Bonjour,

Je m'attaque au sockets en c# et j'ai commencé a créer un serveur de chat, mais au tout début du développement, je rencontre déjà un problème : je ne sais pas comment interagir avec le form "ServerForm" depuis ma class "Server"

C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Serveur
{
    public partial class ServerForm : Form
    {
        private Server server = new Server();

        public ServerForm()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }

    public class Server
    {
        // Instanciation de " serverForm " de type " ServerForm ", pour pouvoir contrôler la form " ServerForm".
        private ServerForm serverForm = new ServerForm();

        // Liste utilisée par " socket.select ".
        private ArrayList readList = new ArrayList();

        // Contiendra le message envoyé aux autres clients.
        private string msgString = null;

        // Notification de connexion / déconnexion.
        private string msgDisconnected = null;

        // Message sous forme de byte pour " socket.send " & " socket.recive ".
        private byte[] msg;

        // Boleen permettant de logger le processing dans un fichier log.
        public bool useLogging = false;

        // Flag aidant à la synchronisation.
        public bool readLock = false;

        // Code RTF.
        private string rtfMsgEncStart = @"\pard\cf1\b0\f1 ";

        private string rtfMsgContent = @"\cf2 ";
        private string rtfConnMsgStart = @"\pard\qc\b\f0\fs20 ";

        public void Start()
        {
            // Récupération de l'addresse IP locale.
            IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAdress = ipHostEntry.AddressList[1];

            // Et maintenant j'aimerais afficher l'IP (ipAdress) dans la richtextbox1 de ServerForm
        }
    }
}
Merci d'avance ! :)

[EDIT]
Merci à Alex et Waawi, j'ai résolu mon problème, comme je pense que ça dois arrivé à beaucoup de débutants comme moi, je met le code simplifier et expliqué à la disposition des gens qui ont le même problème que moi ;)

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// EXPLICATION :
// On crée un constructeur de la classe depuis laquelle on veux modifier notre form, puis on lui donne comme
// argument un argument du même type que la classe que l'on veux modifier.
//
// Ensuite, on instancie une variable du type du form que l'on shouaite modifier dans la classe depuis
// laquelle l'on veux modifer.
//
// Retournous au constructeur de la classe d'ou l'on modifira notre form, et mettont dans ce constructeur du
// code pour lui dire que la variable de type Form que nous avons tout à l'heure instancié dans la classe depuis
// laquelle on veux modifier notre form est = à l'argument reçus (argument de type Form).
//
// La dernière chose qu'il nous reste à faire c'est de mettre dans la fonction de chargement de notre form
// (form1_Load) une instance du type de la classe depuis laquelle on veux modifier notre form, en passant
// à cette instance l'argument this (this = là où " this " est executé).
//
// Voilà, en utilisant l'instance du type du form que l'on veux modifier, dans la classe ou l'on veux
// modifer cette form, un peux modifier le form, n'oubliez pas de passer l'objet que vous shouaitez modifier
// en publique (Modifier -> Public)
//
// EXPLICATION DE L'EXPLICATION :
// En fait, c'est tout con on doit trouver le nom de la Form form ou s'execute l'interface graphique, ce code
// est en fait égal à un gros GETTER.

namespace Modifier_un_form_depuis_une_autre_class
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ExternClass externClass = new ExternClass(this);
            externClass.ModifierPlus();
        }
    }

    public class ExternClass
    {
        public ExternClass(Form1 form)
        {
            formAModifier = form;
            formAModifier.richTextBox1.Text = "Bonjour";
        }

        private Form1 formAModifier = new Form1();

        public void ModifierPlus()
        {
            formAModifier.richTextBox1.AppendText("\n" + "Au revoir");
        }
    }
}


 
Dernière édition:
Inscrit
16 Mars 2014
Messages
214
Reactions
30
#2
Code:
richtextbox1.Text = "blabla";
richtextbox1.AppendText("blabla");
Quelque chose comme sa
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#3
Code:
richtextbox1.Text = "blabla";
richtextbox1.AppendText("blabla");
Quelque chose comme sa
Bonjour,

Je m'attaque au sockets en c# et j'ai commencé a créer un serveur de chat, mais au tout début du développement, je rencontre déjà un problème : je ne sais pas comment interagir avec le form "ServerForm" depuis ma class "Server"

C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Serveur
{
    public partial class ServerForm : Form
    {
        private Server server = new Server();

        public ServerForm()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }

    public class Server
    {
        // Instanciation de " serverForm " de type " ServerForm ", pour pouvoir contrôler la form " ServerForm".
        private ServerForm serverForm = new ServerForm();

        // Liste utilisée par " socket.select ".
        private ArrayList readList = new ArrayList();

        // Contiendra le message envoyé aux autres clients.
        private string msgString = null;

        // Notification de connexion / déconnexion.
        private string msgDisconnected = null;

        // Message sous forme de byte pour " socket.send " & " socket.recive ".
        private byte[] msg;

        // Boleen permettant de logger le processing dans un fichier log.
        public bool useLogging = false;

        // Flag aidant à la synchronisation.
        public bool readLock = false;

        // Code RTF.
        private string rtfMsgEncStart = @"\pard\cf1\b0\f1 ";

        private string rtfMsgContent = @"\cf2 ";
        private string rtfConnMsgStart = @"\pard\qc\b\f0\fs20 ";

        public void Start()
        {
            // Récupération de l'addresse IP locale.
            IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAdress = ipHostEntry.AddressList[1];

            // Et maintenant j'aimerais afficher l'IP (ipAdress) dans la richtextbox1 de ServerForm
        }
    }
}
Merci d'avance ! :)
Fait passer en argument dans le constructeur de ta classe Server un objet de type ServerForm.
et tu garnit une variable d'instance de type ServerForm grace à ton constructeur ^^
puis grace à ta variable ServerForm tu appelle les différent composant de ta Form ^^
 
Inscrit
2 Juin 2016
Messages
82
Reactions
3
#4
Utiliser le design pattern MVVM. + (IoC avec Unity par exemple)
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#5
Fait passer en argument dans le constructeur de ta classe Server un objet de type ServerForm.
et tu garnit une variable d'instance de type ServerForm grace à ton constructeur ^^
puis grace à ta variable ServerForm tu appelle les différent composant de ta Form ^^
J'ai pas trop compris ce que tu viens de me dire.. :$ ça te dérangerais de faire un code exemple ? merci :)
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#6
Code:
richtextbox1.Text = "blabla";
richtextbox1.AppendText("blabla");
Quelque chose comme sa
Depuis une autre class que la class form je ne peux pas acceder a richtextbox1
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#7
private Server server = new Server();
tu change ça par ça private Server server = new Server(this);

et dans ta classe Server tu rajoute une fonction comme celle là

public Server(ServerForm form)
{
serverForm = form;
}
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#8
Ah.. ok merci, mais y'a un hic, tu le sort d'où ton "form" ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#9
Comme l'a dit Wawwi sous forme de code, tu dois faire passer ton formulaire dans le constructeur de la classe.

C#:
Server classServer = new classServer(this);
Pour accéder à ta RichTextBox, tu devras aussi modifier la propriété Modifiers à "Public".

Un fois dans le constructeur,

C#:
public Server(ServerForm form)
{
serverForm = form;

form.RichTextBox.Text = "I'm here !";
}
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#10
Visual Studio ne me donne aucune erreur, tout se compile bien, mais rien ne s'affiche de ma richTextBox1...

C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Serveur
{
    public partial class ServerForm : Form
    {
        public ServerForm()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }

    public class Server
    {
        public Server(ServerForm form)
        {
            srvForm = form;
        }

        // Instanciation de " serverForm " de type " ServerForm ", pour pouvoir contrôler la form " ServerForm".
        private ServerForm srvForm = new ServerForm();

        // Liste utilisée par " socket.select ".
        private ArrayList readList = new ArrayList();

        // Contiendra le message envoyé aux autres clients.
        private string msgString = null;

        // Notification de connexion / déconnexion.
        private string msgDisconnected = null;

        // Message sous forme de byte pour " socket.send " & " socket.recive ".
        private byte[] msg;

        // Boleen permettant de logger le processing dans un fichier log.
        public bool useLogging = false;

        // Flag aidant à la synchronisation.
        public bool readLock = false;

        // Code RTF.
        private string rtfMsgEncStart = @"\pard\cf1\b0\f1 ";

        private string rtfMsgContent = @"\cf2 ";
        private string rtfConnMsgStart = @"\pard\qc\b\f0\fs20 ";

        public void Start()
        {
            // Récupération de l'addresse IP locale.
            IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAdress = ipHostEntry.AddressList[1];
            srvForm.richTextBox1.Text = "dsfdsf";

            // Et rien ne s'affiche..
        }
    }
}
PS: J'ai bien passé Modifiers en public
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#11
C#:
private void Form1_Load(object sender, EventArgs e)
       {
         Server server = new Server(this);
         server.Start();
       }
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#12
Merci !

Je suis vraiment désolé avec mes questions de noob mais y'a beaucoup de choses que je ne comprend pas encore.. :$

En tout cas ça marche :)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#13
Il y a un début à tout, tu as soif de savoir, c'est tout bon ;)
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#14
Ahah ! Met ton Rebirth à jour va y'avoir de la concurrence ! :p

Du coup j'ai Edit ça :)
 
Haut Bas