Bonjour,
J'ai toujours trouvé ça pratique de pouvoir discuter avec mes collègues via un système de messagerie instantanée. Plus rapide que le mail et moins intrusif que le téléphone.
J'ai eu accès à des logiciels d'entreprise, comme SameTime par exemple pour ceux qui connaissent, mais ce n'est plus le cas. J'ai utilisé un peu le Chat Gmail, mais il vient d'être bloqué. Et autant dire que les systèmes standard sont bloqués de partout. Même NetSend ne marche pas.
Du coup, j'ai décidé de développer une petite application pour ça et la seule idée que j'ai eu était de passer par un fichier dans un répertoire auquel les utilisateurs avaient accès.
J'ai fait ça très rapidement donc c'est sûrement largement perfectible, surtout que je ne suis pas développeur de formation ou de métier.
Voici donc le résultat :
Pour le moment, j'utilise un fichier par utilisateur et par conversation. C'est ça qui est le moins pratique à mon avis mais bon, c'est un début. Je ne l'utilise qu'avec une personne pour le moment donc je n'ai pas mis de mot de passe, mais c'est un étape indispensable si on veut passer à plus d'une personne.
Voici tout d'abord le fichier app.config avec les chemins et le pseudo :
Ensuite, voilà la classe qui sert à stocker les messages. Je les sérialize dans un fichier binaire que je crypte ensuite pour qu'il ne soit lisible avec notepad.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <!-- Example connection to a SQL Server Database on localhost. --> <!-- <add name="ExampleConnectionString" connectionString="Data Source=.;Initial Catalog=DBName;Integrated Security=True" providerName="System.Data.SqlClient" /> --> </connectionStrings> <appSettings> <!-- access these values via the property: System.Configuration.ConfigurationManager.AppSettings[key] --> <add key="cheminUtilisateur" value="D:\DONNEES\testChat\FichiersDiscussion\fichierUser" /> <add key="cheminDestinataire" value="D:\DONNEES\testChat\FichiersDiscussion\fichierCorrespondant" /> <add key="nomUtilisateur" value="monPseudo" /> </appSettings> </configuration>
clsListeMessages.cs
Ensuite le code de la discussion, utilisant 2 listes de messages
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Security.Cryptography; namespace sebChat { /// <summary> /// Une liste de message pour un utilisateur /// </summary> [Serializable] public class clsListeMessages { /// <summary> /// Le nom de la personne ayant écrit le message /// </summary> public string NomUtilisateur { get; set; } /// <summary> /// La liste des messages /// </summary> public List<clsMessage> ListeMessages { get; set; } /// <summary> /// Dernière date et heure d'activité de l'application /// </summary> public DateTime DerniereVerifActivite { get; set; } /// <summary> /// Pour savoir si l'utilisateur bouge sa souris ou pas /// </summary> public bool UtilisateurActif { get; set; } public clsListeMessages() { ListeMessages=new List<clsMessage>(); } /// <summary> /// Sérialise la liste des messages dans un fichier, avec un cryptage /// </summary> /// <param name="fileName">Le nom du fichier</param> /// <param name="algoChiffrement">Pour le cryptage</param> public void Save(string fileName, RijndaelManaged algoChiffrement) { int nbEssai = 0; bool saveOk = false; while (saveOk == false) { try { FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.Read); CryptoStream cs = new CryptoStream(fs, algoChiffrement.CreateEncryptor(), CryptoStreamMode.Write); BinaryFormatter fm = new BinaryFormatter(); fm.Serialize(cs, this); cs.Close(); fs.Close(); saveOk = true; } catch (Exception) {} if (nbEssai > 5) { throw new Exception("L'écriture dans le fichier a échouée 5 fois"); } nbEssai++; } } /// <summary> /// Lit un fichier de messages, le décrypte et le désérialise /// </summary> /// <param name="fileName">Le nom du fichier</param> /// <param name="algoChiffrement">Pour le décryptage</param> /// <returns>Liste de messages</returns> public static clsListeMessages Load(string fileName, RijndaelManaged algoChiffrement) { FileStream fs; CryptoStream cs; BinaryFormatter fm = new BinaryFormatter(); clsListeMessages lm; try { fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Write); cs = new CryptoStream(fs, algoChiffrement.CreateDecryptor(), CryptoStreamMode.Read); lm = (clsListeMessages)fm.Deserialize(cs); cs.Close(); fs.Close(); return lm; } catch (Exception) { return new clsListeMessages(); } } } /// <summary> /// Un message /// </summary> [Serializable] public class clsMessage { /// <summary> /// La date du message /// </summary> public DateTime DateMessage { get; set; } /// <summary> /// Le contenu du message /// </summary> public string Message { get; set; } /// <summary> /// Type de rédacteur, ne servira qu'à la reconstitution /// </summary> public eTypeRedacteur TypeRedacteur { get; set; } } /// <summary> /// Pour savoir si le rédacteur d'un message est l'utilisateur ou le destinataire /// </summary> public enum eTypeRedacteur : byte { Utilisateur = 1, Destinataire = 2 } }
clsDiscussion.cs
Et pour finir le code du userForm, dans lequel j'utilise une CheckBox chbxAlerte pour savoir si on active les alertes de nouveau message (clignotement dans la barre des tâches), un Label lblCorrespondant pour connaitre l'activité du correspondant (connecté, absent - je teste le déplacement de la souris, présent), une DataGridView dgHisto pour l'historique des messages, un TextBox txtMessage pour écrire un message, un Button btnSend pour l'envoi du message (fonctionne aussi en appuyant sur Enter), et un Timer timerCheck pour vérifier les nouveaux messages, l'activité....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159 using System; using System.Linq; using System.Security.Cryptography; using System.Text; namespace sebChat { /// <summary> /// Une discussion entre 2 utilisateurs /// </summary> public class clsDiscussion { private clsListeMessages _msgUtilisateur; private clsListeMessages _msgDestinataire; private DateTime _dernierMessageRecu; private clsListeMessages _msgComplet; private RijndaelManaged algoChiffrement; /// <summary> /// Le chemin du fichier de sauvegarde de l'utilisateur /// </summary> public string CheminUtilisateur { get; set; } /// <summary> /// Le chemin du fichier de sauvegarde du correspondant /// </summary> public string CheminDestinataire { get; set; } /// <summary> /// Indique si un nouveau message a été reçu ou pas /// </summary> public bool NouveauMessage { get; set; } /// <summary> /// La liste complete des messages /// </summary> public clsListeMessages ListeComplete { get { return _msgComplet; } } /// <summary> /// Le nom de l'utilisateur /// </summary> public string NomUtilisateur { get; set; } /// <summary> /// Le nom du destinataire /// </summary> public string NomDestinataire { get; set; } /// <summary> /// Si l'utilisateur bouge sa souris /// </summary> public bool DestinataireActif { get{ return _msgDestinataire.UtilisateurActif; } } /// <summary> /// Heure de dernière activité du destinataire, pour savoir si son appli est lancée /// </summary> public DateTime DerniereActiviteDestinataire { get{ return _msgDestinataire.DerniereVerifActivite; } } /// <summary> /// La souris est active ou pas /// </summary> public bool SourisActive { get; set; } public clsDiscussion() { CheminUtilisateur = ""; CheminDestinataire = ""; NomUtilisateur = System.Configuration.ConfigurationManager.AppSettings["nomUtilisateur"]; InitAlgoChiffrement(); } //Initialise l'algorithme de cryptage private void InitAlgoChiffrement() { algoChiffrement = new RijndaelManaged(); Rfc2898DeriveBytes cle = new Rfc2898DeriveBytes("123456789", Encoding.ASCII.GetBytes("Un peu de sel")); algoChiffrement.Key = cle.GetBytes(algoChiffrement.KeySize/8); algoChiffrement.IV = cle.GetBytes(algoChiffrement.BlockSize/8); } /// <summary> /// Lit les messages de l'utilisateur à partir du fichier /// </summary> public void LireMessagesUtilisateur() { _msgUtilisateur = clsListeMessages.Load(CheminUtilisateur, algoChiffrement); } /// <summary> /// Lit les message de l'interlocuteur à partir du fichier et vérifie s'il y en a des nouveaux /// </summary> public void LireMessagesDestinataire() { _msgDestinataire = clsListeMessages.Load(CheminDestinataire, algoChiffrement); NomDestinataire = (_msgDestinataire.NomUtilisateur == null) ? "Destinataire" : _msgDestinataire.NomUtilisateur; //Vérification d'un nouveau message DateTime dernierMsg; var rq = from m in _msgDestinataire.ListeMessages orderby m.DateMessage select m; if (rq.Count() > 0) { dernierMsg = rq.Last().DateMessage; NouveauMessage = (dernierMsg > _dernierMessageRecu); _dernierMessageRecu = dernierMsg; } else { NouveauMessage = false; } } /// <summary> /// Ecrit un message dans le fichier utilisateur /// </summary> /// <param name="strMsg">Le contenu du message</param> public void EcrireMessageUtilisateur(string strMsg) { clsMessage msg = new clsMessage(); msg.DateMessage = DateTime.Now; msg.Message = strMsg; _msgUtilisateur.ListeMessages.Add(msg); _msgUtilisateur.NomUtilisateur = NomUtilisateur; _msgUtilisateur.Save(CheminUtilisateur, algoChiffrement); } public void DefinirActiviteSouris() { _msgUtilisateur.UtilisateurActif = SourisActive; _msgUtilisateur.Save(CheminUtilisateur, algoChiffrement); } /// <summary> /// Entre dans le fichier l'heure d'activité pour vérification d'application active /// </summary> public void EntrerHeureActivite() { _msgUtilisateur.DerniereVerifActivite = DateTime.Now; _msgUtilisateur.Save(CheminUtilisateur, algoChiffrement); } /// <summary> /// Regroupe les listes de message utilisateur et correspondant en y ajoutant les informations sur la personne qui a écrit chaque message /// </summary> public void ConstruitListeComplete() { _msgComplet = new clsListeMessages(); foreach (clsMessage tmpMsg in _msgUtilisateur.ListeMessages) { tmpMsg.TypeRedacteur = eTypeRedacteur.Utilisateur; _msgComplet.ListeMessages.Add(tmpMsg); } foreach (clsMessage tmpMsg in _msgDestinataire.ListeMessages) { tmpMsg.TypeRedacteur = eTypeRedacteur.Destinataire; _msgComplet.ListeMessages.Add(tmpMsg); } } } }
De toute façon, je mets aussi le code du designer...
MainForm.cs
MainForm.Designer.cs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Linq; using System.Runtime.InteropServices; namespace sebChat { /// <summary> /// Description of MainForm. /// </summary> public partial class MainForm : Form { [DllImport("user32.dll")] private static extern bool FlashWindow(IntPtr hwnd, bool bInvert); //Pour faire clignoter lors d'une alerte private clsDiscussion _discussion; private Point _dernierePositionSouris; private int _nbTick; private int _nbTickSourisInactive; public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); // _discussion = new clsDiscussion(); _discussion.CheminUtilisateur = System.Configuration.ConfigurationManager.AppSettings["cheminUtilisateur"]; _discussion.CheminDestinataire = System.Configuration.ConfigurationManager.AppSettings["cheminDestinataire"]; //Première lecture _discussion.LireMessagesUtilisateur(); _discussion.LireMessagesDestinataire(); _discussion.ConstruitListeComplete(); //Config du datagrid dgHisto.DefaultCellStyle.WrapMode = DataGridViewTriState.True; RemplirListView(); //Config des timers timerCheck.Start(); _dernierePositionSouris = Cursor.Position; _discussion.SourisActive = false; _nbTick = 0; _nbTickSourisInactive = 0; // } //Remplissage du datagrid private void RemplirListView() { var rq = from m in _discussion.ListeComplete.ListeMessages orderby m.DateMessage descending select m; dgHisto.Rows.Clear(); DataGridViewRow dgRow; string nom; foreach (clsMessage msg in rq) { dgRow = new DataGridViewRow(); nom = (msg.TypeRedacteur == eTypeRedacteur.Utilisateur) ? _discussion.NomUtilisateur : _discussion.NomDestinataire; dgRow.CreateCells(dgHisto); dgRow.Cells[0].Value = nom + Environment.NewLine + msg.DateMessage.ToString("dd/MM/yyyy") + Environment.NewLine + msg.DateMessage.ToString("H'h'mm"); dgRow.Cells[1].Value = msg.Message; if (msg.TypeRedacteur == eTypeRedacteur.Utilisateur) { dgRow.DefaultCellStyle.BackColor = Color.LightGray; } dgRow.DefaultCellStyle.WrapMode = DataGridViewTriState.True; dgHisto.Rows.Add(dgRow); } dgHisto.ClearSelection(); } //Envoi d'un message void BtnSendClick(object sender, EventArgs e) { if (txtMessage.Text != "") { try { _discussion.EcrireMessageUtilisateur(txtMessage.Text); } catch (Exception ex) { MessageBox.Show(ex.Message); } _discussion.ConstruitListeComplete(); RemplirListView(); txtMessage.Text = ""; } } //Pour empêcher la selection d'une ligne du datagrid void DgHistoSelectionChanged(object sender, EventArgs e) { dgHisto.ClearSelection(); } //Le timer de check des messages du correspondant void TimerCheckTick(object sender, EventArgs e) { _nbTick++; //Vérification des messages if ((_nbTick % 2) == 0) { //Toutes les 2s VerifMessages(); } //Vérification de l'inactivité de la souris VerifSouris(); //Vérification de l'activité VerifEtatAutre(); if ((_nbTick % 30) == 0) { //Toutes les 30 s, on entre l'heure pour la vérification d'activité _discussion.EntrerHeureActivite(); } if (_nbTick >= 3600) { _nbTick = 0; } //On réinitialise au bout d'une heure } //Vérification des nouveaux messages private void VerifMessages() { _discussion.LireMessagesDestinataire(); //S'il y a un nouveau message on l'affiche if (_discussion.NouveauMessage) { _discussion.ConstruitListeComplete(); RemplirListView(); //Alerte nouveau message if (chbxAlerte.Checked && this.ContainsFocus == false) { FlashWindow(this.Handle, true); //Faire clignoter dans la barre des tâches } } } //Vérification de l'activité de la souris private void VerifSouris() { if (Cursor.Position == _dernierePositionSouris) { //Si on n'a pas changer de position _nbTickSourisInactive++; //On augmente le compteur if (_nbTickSourisInactive >= 120) { //Si ça fait plus de 2 min qu'on n'a pas bougé if (_discussion.SourisActive == true) { //Si on était actif avant, on passe en mode inactif _discussion.SourisActive = false; _discussion.DefinirActiviteSouris(); } } } else //Si on change de position { _nbTickSourisInactive = 0; //On réinitialise le compteur _dernierePositionSouris = Cursor.Position; //On met à jour la dernière position if (_discussion.SourisActive == false) { //Si on était inactif, on passe en mode actif _discussion.SourisActive = true; _discussion.DefinirActiviteSouris(); } } } //Vérification de l'état du correspondant private void VerifEtatAutre() { if (_discussion.DerniereActiviteDestinataire < DateTime.Now.AddMinutes(-1)) { //Si ça fait plus d'une minute par rapport à la dernière heure entrée par l'utilisateur lblCorrespondant.Text = "Correspondant non connecté"; lblCorrespondant.BackColor = Color.Red; } else { if (_discussion.DestinataireActif) { lblCorrespondant.Text = "Correspondant actif"; lblCorrespondant.BackColor = Color.Green; } else { lblCorrespondant.Text = "Correspondant inactif"; lblCorrespondant.BackColor = Color.Orange; } } } } }
J'espère que ça pourra servir à quelqu'un et si vous avez des retours ou des remarques, n'hésitez pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164 namespace sebChat { partial class MainForm { /// <summary> /// Designer variable used to keep track of non-visual components. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Disposes resources used by the form. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } /// <summary> /// This method is required for Windows Forms designer support. /// Do not change the method contents inside the source code editor. The Forms designer might /// not be able to load this method if it was changed manually. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.txtMessage = new System.Windows.Forms.TextBox(); this.btnSend = new System.Windows.Forms.Button(); this.dgHisto = new System.Windows.Forms.DataGridView(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.timerCheck = new System.Windows.Forms.Timer(this.components); this.chbxAlerte = new System.Windows.Forms.CheckBox(); this.lblCorrespondant = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.dgHisto)).BeginInit(); this.SuspendLayout(); // // txtMessage // this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txtMessage.Location = new System.Drawing.Point(7, 480); this.txtMessage.Multiline = true; this.txtMessage.Name = "txtMessage"; this.txtMessage.Size = new System.Drawing.Size(420, 90); this.txtMessage.TabIndex = 1; // // btnSend // this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnSend.Location = new System.Drawing.Point(433, 481); this.btnSend.Name = "btnSend"; this.btnSend.Size = new System.Drawing.Size(65, 50); this.btnSend.TabIndex = 2; this.btnSend.Text = "Envoyer"; this.btnSend.UseVisualStyleBackColor = true; this.btnSend.Click += new System.EventHandler(this.BtnSendClick); // // dgHisto // this.dgHisto.AllowUserToAddRows = false; this.dgHisto.AllowUserToDeleteRows = false; this.dgHisto.AllowUserToResizeColumns = false; this.dgHisto.AllowUserToResizeRows = false; this.dgHisto.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.dgHisto.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; this.dgHisto.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; this.dgHisto.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; this.dgHisto.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgHisto.ColumnHeadersVisible = false; this.dgHisto.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.Column1, this.Column2}); this.dgHisto.Location = new System.Drawing.Point(8, 35); this.dgHisto.MultiSelect = false; this.dgHisto.Name = "dgHisto"; this.dgHisto.ReadOnly = true; this.dgHisto.RowHeadersVisible = false; this.dgHisto.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.dgHisto.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.dgHisto.Size = new System.Drawing.Size(489, 435); this.dgHisto.TabIndex = 3; this.dgHisto.SelectionChanged += new System.EventHandler(this.DgHistoSelectionChanged); // // Column1 // dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; this.Column1.DefaultCellStyle = dataGridViewCellStyle1; this.Column1.FillWeight = 21.05372F; this.Column1.HeaderText = "Column1"; this.Column1.MinimumWidth = 40; this.Column1.Name = "Column1"; this.Column1.ReadOnly = true; this.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.False; // // Column2 // dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; this.Column2.DefaultCellStyle = dataGridViewCellStyle2; this.Column2.FillWeight = 82.63584F; this.Column2.HeaderText = "Column2"; this.Column2.Name = "Column2"; this.Column2.ReadOnly = true; this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.False; // // timerCheck // this.timerCheck.Interval = 1000; this.timerCheck.Tick += new System.EventHandler(this.TimerCheckTick); // // chbxAlerte // this.chbxAlerte.Location = new System.Drawing.Point(12, 5); this.chbxAlerte.Name = "chbxAlerte"; this.chbxAlerte.Size = new System.Drawing.Size(104, 24); this.chbxAlerte.TabIndex = 4; this.chbxAlerte.Text = "Alerte activée"; this.chbxAlerte.UseVisualStyleBackColor = true; // // lblCorrespondant // this.lblCorrespondant.Location = new System.Drawing.Point(133, 7); this.lblCorrespondant.Name = "lblCorrespondant"; this.lblCorrespondant.Size = new System.Drawing.Size(237, 19); this.lblCorrespondant.TabIndex = 5; this.lblCorrespondant.Text = "Recherche d\'info sur correspondant"; this.lblCorrespondant.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // MainForm // this.AcceptButton = this.btnSend; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(510, 581); this.Controls.Add(this.lblCorrespondant); this.Controls.Add(this.chbxAlerte); this.Controls.Add(this.dgHisto); this.Controls.Add(this.btnSend); this.Controls.Add(this.txtMessage); this.Name = "MainForm"; this.Text = "Chat By Seb"; ((System.ComponentModel.ISupportInitialize)(this.dgHisto)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } private System.Windows.Forms.Label lblCorrespondant; private System.Windows.Forms.CheckBox chbxAlerte; private System.Windows.Forms.Timer timerCheck; private System.Windows.Forms.DataGridView dgHisto; private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.Button btnSend; private System.Windows.Forms.TextBox txtMessage; } }
Partager