Pauvre problème de SubString() [Résolu]

Messages postés
43
Date d'inscription
lundi 20 octobre 2008
Dernière intervention
14 juin 2009
- - Dernière réponse : moussstiqu3
Messages postés
11
Date d'inscription
mercredi 18 novembre 2009
Dernière intervention
27 novembre 2010
- 5 mai 2010 à 23:55
Bonjour,

Voila j'ai un pauvre problème avec la fonction SubString et je ne comprend pas pourquoi ca ne marche pas :(

Le but étant de prendre qu'une partie d'un mot contenu dans une List-Box et ca ne fonctionne pas :/

int longueur = lb_Panier.Text.Length - 1;

string nomproduit = lb_Panier.Text.Substring(2, longueur);

l'erreur etant :
ArgumentOutOfRangeException
L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
Nom du paramètre : length
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
3
Merci
Tu essaye de prendre N-1 caractères (longueur) à partir du troisième caractère (position 2). Seuleument à partir du 3eme caractère, il ne te reste que N-2 caractères, donc en prenant N-1 caractères, tu dépasse la fin de la chaine (OutOfRange)

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_casy
Messages postés
16
Date d'inscription
mardi 11 décembre 2007
Dernière intervention
17 janvier 2009
3
Merci
Bonjour,
Precision: Dans ton cas, j'ai l'impression que tu veux prendre ta chaine de caractere a partir du 3eme caractere.

En C# tu peux donc faire :

string nomproduit = lb_Panier.Text.Substring(2);

plutot que

string nomproduit = lb_Panier.Text.Substring(2, longueur);

Plus rapide.

Cordialement.

Merci Michou69004 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Michou69004
Messages postés
43
Date d'inscription
lundi 20 octobre 2008
Dernière intervention
14 juin 2009
0
Merci
Bien vu Casy, j'avais pas fait la gymnastique jusqu'au bout ! je valide
Commenter la réponse de Rhend
Messages postés
43
Date d'inscription
lundi 20 octobre 2008
Dernière intervention
14 juin 2009
0
Merci
Effectivement je m'embettais pour rien ^^
Commenter la réponse de Rhend
Messages postés
11
Date d'inscription
mercredi 18 novembre 2009
Dernière intervention
27 novembre 2010
0
Merci
Bonjour j'ai aussi ce problème, mais je ne vois pas d'où ça viens.
Le message d'erreur est le suisvant
startIndex ne peut pas être supérieur à la longueur de la chaîne.
Nom du paramètre : startIndex


Mon but est simple : je recois constemment 6 bytes puis 5 secondes puis 6 bytes puis 5 secondes...etc...

Je veux prendre ces 6 bytes et les spliter dans une textbox (pour le moment) et j'ai l'erreur nommée ci-dessus.

Aussi, si ça marche une fois, ça foire la deuxième fois...je ne vois pas pq!

Voici mon code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace SerialComm
{
    public partial class Form1 : Form
    {
        static SerialPort serialPort1;
        public Form1()
        {
            serialPort1 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

        }
        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.Open();
        }
        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string value = "";
            serialPort1.DiscardInBuffer();

            char[] buffer = new char[6];
            while ((serialPort1.BytesToRead > 0) && (serialPort1.BytesToRead < 6))
            {
                int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
               
                for (int i = 0; i < bytes_read; i++)
                {
                    value += buffer[i];
                }
            }
            safeInput(value.ToString());
            
        }

        private void safeInput(string msg)
        {


            textBox1.Invoke(new EventHandler(delegate
            {

  // donnée isolée de la 3 en prenant 1 donnée (1 byte)

                string message1 = msg.Substring(0,1);
                string message2 = msg.Substring(1,1);
                string message3 = msg.Substring(2,1);
                string message4 = msg.Substring(3,1);

                textBox1.SelectedText = string.Empty;
                textBox1.AppendText(message1);
                textBox1.ScrollToCaret();

                textBox2.SelectedText = string.Empty;
                textBox2.AppendText(message2);
                textBox2.ScrollToCaret();

                textBox3.SelectedText = string.Empty;
                textBox3.AppendText(message3);
                textBox3.ScrollToCaret();

                textBox4.SelectedText = string.Empty;
                textBox4.AppendText(message4);
                textBox4.ScrollToCaret();
            }));
            
        }
    }
}


merci de votre aide
Commenter la réponse de moussstiqu3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.