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

Rhend 43 Messages postés lundi 20 octobre 2008Date d'inscription 14 juin 2009 Dernière intervention - 15 janv. 2009 à 16:11 - Dernière réponse : moussstiqu3 11 Messages postés mercredi 18 novembre 2009Date d'inscription 27 novembre 2010 Dernière intervention
- 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
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 15 janv. 2009 à 16:22
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_casy
Meilleure réponse
Michou69004 16 Messages postés mardi 11 décembre 2007Date d'inscription 17 janvier 2009 Dernière intervention - 17 janv. 2009 à 09:58
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Michou69004
Rhend 43 Messages postés lundi 20 octobre 2008Date d'inscription 14 juin 2009 Dernière intervention - 15 janv. 2009 à 16:28
0
Merci
Bien vu Casy, j'avais pas fait la gymnastique jusqu'au bout ! je valide
Commenter la réponse de Rhend
Rhend 43 Messages postés lundi 20 octobre 2008Date d'inscription 14 juin 2009 Dernière intervention - 17 janv. 2009 à 11:37
0
Merci
Effectivement je m'embettais pour rien ^^
Commenter la réponse de Rhend
moussstiqu3 11 Messages postés mercredi 18 novembre 2009Date d'inscription 27 novembre 2010 Dernière intervention - 5 mai 2010 à 23:55
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.