Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1652 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Aide d'affichage de données dans textbox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide d'affichage de données dans textbox

n°1983765
moussstiqu​3
Posté le 13-04-2010 à 21:52:15  profilanswer
 

Bonjour,
 
je voulais avoir un peu d'aide de votre part.
Je débute en c# et je dois afficher des données (6 bytes) provenant d'un port série. chaque byte vaut une valeur provenant d'un capteur particulier.
Pour cela, j'arrive sans problème à les recevoir dans une textbox.
Cependant, mon souci se trouve ici : je dois avoir 6 textbox, pour chacun des bytes
textbox1 -> byte0
textbox2 -> byte1
textbox3-> byte2
..
textbox6-> byte5
 
lors du prochain envois de données (1 minutes après le dernier) je recois de nouveau 6 bytes (et donc même style d'affichage en écrasant les anciennent données.
 
Ma question est simple : comment séparer les bytes entrent eux et les afficher séparément?
J'ai regardé avec la méthode substring...mais ça ne marche pas. Voici mon code (la partie d'affichage se trouve dans la deuxième partie du code
 

Code :
  1. private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
  2.         {
  3.             string value = "";
  4.             while (serialPort1.BytesToRead > 0)
  5.             {
  6.                 char[] buffer = new char[255];
  7.                 int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
  8.                 for (int i = 0; i < bytes_read; i++)
  9.                 {
  10.                     value += buffer[i];
  11.                 }
  12.             }
  13.             safeInput(value.ToString());
  14.         }


 

Code :
  1. private void safeInput(string msg)
  2.         {
  3.                 textBox1.Invoke(new EventHandler(delegate
  4.                 {
  5.                     textBox1.SelectedText = string.Empty;
  6.                     textBox1.AppendText(msg.ToString().Substring(1, 1));
  7.                     textBox1.ScrollToCaret();
  8.                     textBox2.SelectedText = string.Empty;
  9.                     textBox2.AppendText(msg.ToString().Substring(2, 1));
  10.                     textBox2.ScrollToCaret();
  11.                     textBox3.SelectedText = string.Empty;
  12.                     textBox3.AppendText(msg.ToString().Substring(3, 1));
  13.                     textBox3.ScrollToCaret();
  14.                     textBox4.SelectedText = string.Empty;
  15.                     textBox4.AppendText(msg.ToString().Substring(4, 1));
  16.                     textBox4.ScrollToCaret();
  17.                 }));
  18.         }


 
 
Merci de votre aide. :)

mood
Publicité
Posté le 13-04-2010 à 21:52:15  profilanswer
 

n°1983821
moussstiqu​3
Posté le 14-04-2010 à 10:38:56  profilanswer
 

Salut et merci pour ta réponse.
J'ai testé ceci :
 

Code :
  1. private void safeInput(string msg)
  2.         {
  3.                 textBox1.Invoke(new EventHandler(delegate
  4.                 {
  5.                     //textBox1.SelectedText = string.Empty;
  6.                     textBox1.Text = "";
  7.                     /*textBox1.AppendText(msg.ToString());
  8.                     textBox1.ScrollToCaret();*/
  9.                     textBox1.Text = msg[0].ToString();
  10.                     //textBox2.SelectedText = string.Empty;
  11.                     textBox2.Text = "";
  12.                     /*textBox2.AppendText(msg.ToString());
  13.                     textBox2.ScrollToCaret();*/
  14.                     textBox2.Text = msg[1].ToString();
  15.                     //textBox3.SelectedText = string.Empty;
  16.                     textBox3.Text = "";
  17.                     /*textBox3.AppendText(msg.ToString());
  18.                     textBox3.ScrollToCaret();*/
  19.                     textBox3.Text = msg[2].ToString();
  20.                     //textBox4.SelectedText = string.Empty;
  21.                     textBox4.Text = "";
  22.                    /* textBox4.AppendText(msg.ToString());
  23.                     textBox4.ScrollToCaret();*/
  24.                     textBox4.Text = msg[3].ToString();
  25.                 }));
  26.         }


Le programme compile, mais le programme s'arrête et l'erreur dit : "l'index se trouve en dehors du tableau".
Je suis débutant en c# et je ne comprend pas ce problème ^^
 
Pourrais-tu m'éclairer?

n°1983854
moussstiqu​3
Posté le 14-04-2010 à 12:16:02  profilanswer
 

je ne comprends toujours pas pourquoi ça ne va pas...  :pt1cable:  
Je reçois un flux continu d' octets. Est-ce ça?
Comment pourrais-je faire en sorte qu'a bout de 255 valeurs, le buffer se vide? :??:  
 
Merci. ;)

n°1983900
moussstiqu​3
Posté le 14-04-2010 à 13:43:39  profilanswer
 

ok, je vais testé, je suis débutant et je ne savais pas tout ça...merci des conseils ;-)

n°1983947
moussstiqu​3
Posté le 14-04-2010 à 14:51:01  profilanswer
 

 
 

Code :
  1. Euh... Au fait, tu n'as toujours pas répondu à mes questions, en particulier celle-ci :
  2. "Est-ce que la première partie inscrit les bonnes valeurs dans la variable "value" ?"


oui c'est les bonnes valeurs
 
 
 

Code :
  1. "Il faut que tu regardes quelle taille fait ta variable msg : attribut Length dans ton outil de débuggage. Et en amont, regarde ce que vaut int bytes_read."


 
comment je fait? ^^ je veux dire, j'utilise Visual studi 2010 depuis même pas 1 mois  :ange:  
Pourrais-tu me guider stp?
 
Merci beaucoup.

n°1984155
moussstiqu​3
Posté le 15-04-2010 à 09:25:20  profilanswer
 

salut,  
 
je pense savoir où est le problème!
Je m'envoie constamment la chaine 1,2,3, 4 séparé à 1 seconde intervalle.
Je veux mettre les 4 valeurs dans une textbox séparée.
1 -> textbox1
2-> texbox2
...
4-> textbox4
 
or ça marche pour les 4 premières valeurs mais comme je recois 1,2,3,4....1,2,3,4....ça ne va pas
Je pense que je deois vider le buffer de réception après la réception des 4 premier bytes.
J'ai été voir la méthode  
"serialPort.DiscardInBuffer();"
 
mais je dois mal l'utilisée...pouvez-vous m'aider?
 
Mon code est ci-dessous...
 
Ca serait cooool de votre part ;-)
 
 

Code :
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             if (comboBox1.Visible == true)
  4.             {
  5.                 MessageBox.Show("Veuillez choisir le port COM spécifique et appuyer sur OK pour continuer!", "Mauvaise procédure", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  6.             }
  7.             else
  8.             {
  9.                 if (buttonConnectDeconnect.Text == "Connecté" )
  10.                 {
  11.                     buttonConnectDeconnect.Text = "Déconnecté";
  12.                     label11.ForeColor = Color.Red;
  13.                     buttonConnectDeconnect.BackColor = Color.Red;
  14.                     if (serialPort1.IsOpen)
  15.                     {
  16.                         serialPort1.Close();
  17.                         label11.Text = "Port " + comboBox1.Text + " Fermé";
  18.                     }
  19.                 }
  20.                 else
  21.                 {
  22.                     buttonConnectDeconnect.Text = "Connecté";
  23.                     label11.ForeColor = Color.Green;
  24.                     buttonConnectDeconnect.BackColor = Color.Green;
  25.                     //Serial source
  26.                     serialPort1 = new SerialPort((string)comboBox1.SelectedItem, 9600, Parity.None, 8, StopBits.One);
  27.                     //serialPort1 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
  28.                     serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
  29.                   //  serialPort1.DtrEnable = true;
  30.                   //  serialPort1.RtsEnable = true;
  31.                     serialPort1.ReadTimeout = 500;
  32.                     //Ouverture du port
  33.                     if (!serialPort1.IsOpen)
  34.                     {
  35.                         serialPort1.Open();
  36.                     }
  37.                 }
  38.             }
  39.         }
  40.         private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
  41.         {
  42.             string value = "";
  43.             while (serialPort1.BytesToRead > 0)
  44.             {
  45.                 char[] buffer = new char[255];
  46.                     int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
  47.                     for (int i = 0; i < bytes_read; i++)
  48.                     {
  49.                         value += buffer[i];
  50.                     }
  51.                    
  52.                     safeInput(value.ToString());
  53.             }
  54.            
  55.          }
  56.         private void safeInput(string msg)
  57.         {
  58.                 textBox1.Invoke(new EventHandler(delegate
  59.                 {
  60.                    
  61.                     ////textBox1.SelectedText = string.Empty;
  62.                     //this.textBox1.Text = "";
  63.                     ////textBox1.AppendText(String.Format(msg));
  64.                     //textBox1.Text = msg[0].ToString();
  65.                     ////textBox2.SelectedText = string.Empty;
  66.                     //this.textBox2.Text = "";
  67.                     //textBox2.AppendText(msg.ToString());
  68.                     ////textBox2.Text = msg[1].ToString();
  69.                     ////textBox3.SelectedText = string.Empty;
  70.                     //this.textBox3.Text = "";
  71.                     //textBox3.AppendText(msg.ToString());
  72.                     ////textBox3.Text = msg[2].ToString();
  73.                     ////textBox4.SelectedText = string.Empty;
  74.                     //this.textBox4.Text = "";
  75.                     ////textBox4.AppendText(msg.ToString());
  76.                     //textBox4.Text = msg[3].ToString();
  77.                     // séparation du message en 4 morceaux
  78.                     string W = msg.Substring(0, 1);
  79.                     string X = msg.Substring(1, 1);
  80.                     string Y = msg.Substring(2, 1);
  81.                     string Z = msg.Substring(3, 1);
  82.                     // mise des morceaux du message dans un tableau
  83.                     string[] tableau_valeur = new string[4];
  84.                     tableau_valeur[0] = W;
  85.                     tableau_valeur[1] = X;
  86.                     tableau_valeur[2] = Y;
  87.                     tableau_valeur[3] = Z;
  88.                     // mise en textbox approprié des valeur inscrite dans le tableau!
  89.                     textBox1.Text = tableau_valeur[0];
  90.                     textBox2.Text = tableau_valeur[1];
  91.                     textBox3.Text = tableau_valeur[2];
  92.                     textBox4.Text = tableau_valeur[3];
  93.                 }));
  94.         }


 
Merci à vous tous

n°1984174
moussstiqu​3
Posté le 15-04-2010 à 10:05:07  profilanswer
 

la variable msg = 1 lors de l'arrêt du programme
 
La ligne pointée est

Citation :

textBox1.Invoke(new EventHandler(delegate


 
pour la taille de msg et l'index je ne sais pas comment je peut voir ça dans l'outil de dégugage...sorry, mais je ne demande qu'a apprendre
 
Merci
 

n°1988118
Tamahome
⭐⭐⭐⭐⭐
Posté le 27-04-2010 à 16:37:35  profilanswer
 

essaye de faire plus simple comme programme, genre un "hello world" en mode console.
 
Parce que la, y'a tout à apprendre, je ne vois pas comment on pourra t'aider :/


Message édité par Tamahome le 27-04-2010 à 16:37:45

---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1989455
TotalRecal​l
Posté le 02-05-2010 à 15:21:00  profilanswer
 

Je suis du même avis, apparemment il te manque les notions de base sur la concaténation et les chaînes, la manipulation des contrôles (genre les append/scroll to caret qui arrachent les yeux, j'ai mis quelques instants à comprendre pourquoi c'était pondu comme ça alors qu'il y a un équivalent 1 milliard de fois plus simple et naturel)... alors on est encore loin de pouvoir faire mumuse avec les invocations asynchrones et délégués...

 

Fais des petites interfaces basique, familiarise toi avec les événements, et l'IDE (débuggeur, etc), acquière quelques notions d'objet... avant de te plonger dans des programmes comme ça.


Message édité par TotalRecall le 02-05-2010 à 15:21:33

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Aide d'affichage de données dans textbox

 

Sujets relatifs
[php] Problème affichage tableau avec timerPb d'insertion de données SQL
besion d'aideAide structure requête
Stockage de données : BDD/Fichiers/En mémoireCSS et pages en chinois : aide bienvenue !
Aide Base de données overclocking[C] Aide pour mon Puissance 4 ! =)
Affichage dans un jtable apartir d'une base 
Plus de sujets relatifs à : Aide d'affichage de données dans textbox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR