Oppure

Loading
11/03/10 21:56
Salve, volevo sapere se mi potete dare una mano ho questo codice,
che va leggere un codice nell'area textbox ma mi dice errore di index e formato input non valido.
Mi dite come posso risolverlo?

private void button1_Click(object sender, EventArgs e)
        {
            this.picBox.Image = null;
            Bitmap bmp = new Bitmap(picBox.Width, picBox.Height);

            Graphics g = Graphics.FromImage(bmp);
            Pen redPen = new Pen(Color.Red, 1 / g.DpiX);
            redPen.Width = 2;
            g.TranslateTransform(1, 1.0f);
            g.PageUnit = GraphicsUnit.Pixel;

            //            StreamReader sr = new StreamReader("TextFile1.txt");
            int x = 0;
            int y = 0;
            int x1 = 0;
            int y1 = 0;

            string txt = "Disegnata linea: ({0},{1}:{2},{3})";
            string coord = "" + textBox1.Text + "";         // QUI DEVO METTERE i valori che prendo dal file txt con il pulsante apri file txt.
            int ypos = coord.IndexOf('Y');
            x = Convert.ToInt32(coord.Substring(1, ypos - 1));
            y = Convert.ToInt32(coord.Substring(ypos + 1));
            // ---- ----
            g.DrawLine(redPen, x1, y1, x, y);
            lbl.Text = string.Format(txt, x1, y1, x, y);

            x1 = x; // x1 contiene il valore x di partenza per la prossima linea
            y1 = y; // y1 contiene il valore y di partenza per la prossima linea


            picBox.Image = bmp;
            //lbl.Text = "Fatto.";
            redPen.Dispose();
            g.Dispose();

        } // button1_click



string coord = "" + textBox1.Text + ""; // QUI DEVO METTERE i valori che prendo dal file txt con il pulsante apri file txt.


Però se faccio cosi mi da errori di eccezione non gestita qunado premo sul pulsante.

Mi date una mano?

grazie mille.,, e buona giornata.
12/03/10 7:35
Il Totem
Errore di index è nella chiamata a Substring, formato non valido in Int32.Parse. E per generare tutti gli errori che hai riportato, l'unica spiegazione è che la textbox sia vuota (in questo modo, se Text è null, darà un errore a runtime).
I primi due possono anche essere generati se sbagli ad usare substring e prendi un pezzo sbagliato di stringa, quindi ti consiglio di controllare con variabili temporanee quello che effettivamente vuoi estrarre.
aaa
12/03/10 12:01
Postato originariamente da Il Totem:

Errore di index è nella chiamata a Substring, formato non valido in Int32.Parse. E per generare tutti gli errori che hai riportato, l'unica spiegazione è che la textbox sia vuota (in questo modo, se Text è null, darà un errore a runtime).
I primi due possono anche essere generati se sbagli ad usare substring e prendi un pezzo sbagliato di stringa, quindi ti consiglio di controllare con variabili temporanee quello che effettivamente vuoi estrarre.


ciao, ho provato un'altro modo, ma ora sono nel pallone,che non so come far mettere le coordinate dentro ad questo codice:


        private void Simula_Click(object sender, EventArgs e)
        {
            Graphics g = box.CreateGraphics();
            Pen redPen = new Pen(Color.Red, 1 / g.DpiX);
            redPen.Width = 2;
         
            g.PageUnit = GraphicsUnit.Pixel;

            List<PointF> pt = new List<PointF>();
            int x = 120;
            int y = 120;
           
            PointF p = new PointF(x, y);
            pt.Add(p);
            Pen pen = new Pen(Color.Black, 3);
            g.DrawLine(pen, 0, 0, p.X,p.Y);
        }


Per l'errore che dicevi la textbox è piena , ma è in formato cosi:
X11Y100
X100Y100
X100Y01
X100Y100

E mi da errore su indice ,input non valido...

Mi sai spiegare come fare con il secondo codice che ho postato con il pulsante simula_click.

grazie.
Ultima modifica effettuata da 12/03/10 12:02
12/03/10 12:11

grazie mille per l'aiuto.
Ultima modifica effettuata da 12/03/10 12:38
12/03/10 14:31
nessuno sa come posso fare per prendere i valori dalla textbox tbcode.text?

Aspetto risposta..e buona giornata.
Ultima modifica effettuata da 12/03/10 14:32
14/03/10 9:16
Il Totem
Dato che la lunghezza dei valori numerici cambia, non puoi usare Substring. Devi passare alle espressioni regolari:
Dim Coord As New Regex("X(?<CoordX>\d+)Y(?<CoordY>\d+)")
Dim Mc As MatchCollection = Coord.Matches(TextBox.Text)

For Each M As Match In Mc
   Dim X As Int32 = CType(M.Groups("CoordX").Value, Int32)
   Dim Y As Int32 = CType(M.Groups("CoordY").Value, Int32)
   '...
Next
aaa
14/03/10 13:37
Postato originariamente da Il Totem:

Dato che la lunghezza dei valori numerici cambia, non puoi usare Substring. Devi passare alle espressioni regolari:
Dim Coord As New Regex("X(?<CoordX>\d+)Y(?<CoordY>\d+)")
Dim Mc As MatchCollection = Coord.Matches(TextBox.Text)

For Each M As Match In Mc
   Dim X As Int32 = CType(M.Groups("CoordX").Value, Int32)
   Dim Y As Int32 = CType(M.Groups("CoordY").Value, Int32)
   '...
Next

oo, grazie mille, però in vb.net non capisco molto,
mi dici un buon convertitore che converte da vb.net a c#.

grazie mille.
14/03/10 16:13
ciao, forse c'è lo fatta in un'atlro modo.

in poche parole leggo il file preso dalla statusbar .file

  private void Elabora__Tick(object sender, EventArgs e)
        {
            List<PointF> pt = new List<PointF>();
            this.box.Image = null;

            Bitmap bmp = new Bitmap(this.box.Width / 5, this.box.Height / 5);
            Graphics g = Graphics.FromImage(bmp);
            Pen redPen = new Pen(Color.Red, 1 / g.DpiX);
            redPen.Width = 2;

            g.PageUnit = GraphicsUnit.Millimeter;
            using (StreamReader sr = new StreamReader("" + sbp_file.Text + ""))
            {
                string[] coordinate;
                 while (!sr.EndOfStream)
                {
                    coordinate = sr.ReadLine().Split(','); // tra apici va il carattere che separa i valori
                    int x = Convert.ToInt32(coordinate[0]); // convertiamo in valori numerici interi, ma DrawLine accetta anche float
                    int y = Convert.ToInt32(coordinate[1]); // convertiamo in valori numerici interi, ma DrawLine accetta anche float

                    PointF p = new PointF(x, y);
                    pt.Add(p);


                    Pen pen = new Pen(Color.Black, 3);

                    g.DrawLine(pen, 0, 0, p.X, p.Y);
                    }
                redPen.Dispose();
                g.Dispose();
                sr.Close();
                sr.Dispose();
            } this.box.Image = bmp;


        }


Però non so perchè non segue 1 passo alla volta , mettendolo nella tick del timer.

Mi dici come fare per seguire passo per passo le coordinate.

questo è il mio nuovo formato di coordinate:
100,0
100,100
0,100
0,0
Mi disegna un rettangolo, però io devo simulare questo:
in poche parole vedete questo video: youtube.com/…

Scusate ma non ho trovato meglio.

Però vorrei fare la stesa cosa ma in c# e con il mio formato di coordinate.

Mi proteste aiutare?.

grazie.
Ultima modifica effettuata da 14/03/10 16:21