IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

convertir tableau de point en text


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 81
    Par défaut convertir tableau de point en text
    bonjour, je suis étudiant en életronique , j'ai besoin pour mon tfe de réaliser une interface graphique qui traite des données GPS.
    En gros ce programme doit effectuer l'acuisition des coordonnées et de dessiner ces coordonnées selon un axe XY afin d'effectuer le balisage d'un champ agricole.

    Avant de commencer l'acquisition de donnée et le traitement du protocole NMEA0183, je me suis lancé dans l'acquisition simple de coordonnées de points à l'aide de textbox.

    Pour cela j'utilise une list de point que je converti en tableau de point car je ne connais pas la longueur du tableau.
    j'ai deux problème :

    1) J'aimerai pouvoir entrer automatiquement ce tableau dans une richtextbox

    2) j'aimerai pouvoir le sauver dans un fichier text par la suite une fois le balisage terminé grâce a cette richtextbox.

    je vous met le code utilisé afin que vous puissiez y jetter un oeil.

    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
    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;
    // realized by MRs lahaye thomas & gianni tricarico 
    namespace WindowsFormsApplication10
    {
    public partial class Form1 : Form
    {
    // tout ce qui est créé ici est connu de tout les elements ( " methode " ) dans le programme. 
    List<Point> mesPoints= new List<Point>(); // creation d'une list 
    Point[] tabPts; // creation d'un tableau
    public Form1()
    {
    InitializeComponent();
    }
     
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
     
     
    }
     
    private void textBox2_TextChanged(object sender, EventArgs e)
    {
     
    }
     
     
     
    private void button2_Click(object sender, EventArgs e)
    {
    //permet de creer le pen affin d'afficher 
    Graphics g = Graphics.FromHwnd(pictureBox1.Handle); //encapsulage d'une surface de dessin , mise en lien avec la picturebox 
    Pen greenpen = new Pen(Color.Green, 2); //definition d'un nouveau bic ,et de sa couleur , de la grosseur du trait
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //ligne de commande pour lisser la ligne graphique tracée 
    greenpen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; // ligne pour commander l'apparence de la ligne
    // permet de convertir la list de points en tableau de point grâce au pen appelé greenpen
    g.DrawLines(greenpen, tabPts); // la methode drawlines dessine un segment d'un tableau 
    g.Dispose(); // pour ne pas occuper de la memoire pour rien.
    }
     
    string filename;
    private void button3_Click(object sender, EventArgs e)
    {
     
    if (saveFileDialog1.ShowDialog() != DialogResult.Cancel)
    {
    filename = saveFileDialog1.FileName;
    richTextBox1.SaveFile(filename);
     
     
    }
    else
    {
    MessageBox.Show("vous avez appuyé sur annuler");
    }
     
    }
     
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
     
    }
     
    //
    int nombrex, nombrey;
    private void textBox2_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Enter)
    {
    nombrex = Convert.ToInt32(textBox1.Text);
    nombrey = Convert.ToInt32(textBox2.Text);
    // methode barbare
    richTextBox1.Text = richTextBox1.Text + textBox1.Text;
    richTextBox1.Text = richTextBox1.Text + ";";
    richTextBox1.Text = richTextBox1.Text + textBox2.Text;
    richTextBox1.Text = richTextBox1.Text + ",";
     
     
    Point pt = new Point(); // point nom =new point creer un point qui contient une coordonnée 
    pt.X = nombrex; // permet de mettre en relation la textbox1 avec la coordonnée x du point pt
    pt.Y = nombrey; // permet de mettre en relation la textbox2 avec la coordonnée y du point pt 
    mesPoints.Add(pt); // permet d'ajouter un point a la liste de point dont le point est appelé 
    // pt et dont les coordonnée sont (x,y)
    tabPts = mesPoints.ToArray(); // converti la liste de point en tableau de points
     
    }
    }
     
    private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
    {
     
    }
     
     
    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
     
    }
     
     
     
    }
    }

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 24
    Par défaut
    Les méthodes Dispose() que tu appelles ne servent à rien, le garbage collector s'occupe de libérer la mémoire lorsque c'est nécessaire.

    Pour remplir la TextBox, le plus simple me semble être un foreach.

    Pour écrire les coordonnées dans un fichier texte, il te suffit d'ouvrir un flux en écriture et de refaire un foreach.

    Un tutoriel pour écrire dans un fichier :
    http://msdn.microsoft.com/fr-fr/libr...=VS.80%29.aspx

    J'espère avoir répondu à tes questions.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par LiveFromBx Voir le message
    Les méthodes Dispose() que tu appelles ne servent à rien, le garbage collector s'occupe de libérer la mémoire lorsque c'est nécessaire.
    C'est complètement faux (du moins la partie en gras)... L'interface IDisposable ne sert pas à libérer la mémoire (qui, comme tu l'as dis, est gérée par le GC), mais à libérer les ressources non-managées, comme les handles Win32, les connexions aux bases de données, les handles de fichiers, etc. Si ça ne servait à rien l'interface IDiposable n'existerait même pas... Il faut toujours appeler Dispose sur les objets qui implémentent IDisposable quand on n'en a plus besoin.

    Un objet Graphics encapsule un handle Win32 (un HDC précisément), et les handles Win32, ça coute cher, il faut les libérer dès que possible, et la méthode Dispose sert à ça. Certes, le garbage collector finira par collecter l'objet et appelera Dispose à partir du finaliseur, mais comme le GC n'est pas déterministe tu ne peux pas prévoir quand ça arrivera : peut-être dans 5 secondes, peut-être dans 5 heures... et à ce stade ton programme bouffera des dizaines de milliers de handles Win32, qui ne sont pas des ressources illimitées.

    Pour être sûr de bien appeler Dispose même en cas d'erreur, on utilise un bloc using :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void button2_Click(object sender, EventArgs e)
    {
        //permet de creer le pen affin d'afficher 
        using(Graphics g = Graphics.FromHwnd(pictureBox1.Handle)) //encapsulage d'une surface de dessin , mise en lien avec la picturebox 
        {
            Pen greenpen = new Pen(Color.Green, 2); //definition d'un nouveau bic ,et de sa couleur , de la grosseur du trait
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //ligne de commande pour lisser la ligne graphique tracée 
            greenpen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; // ligne pour commander l'apparence de la ligne
            // permet de convertir la list de points en tableau de point grâce au pen appelé greenpen
            g.DrawLines(greenpen, tabPts); // la methode drawlines dessine un segment d'un tableau 
        } //appelle implicitement g.Dispose();
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 81
    Par défaut
    attention que je suis novice en la matiere de C#...
    le foreach que tu me demande d'utiliser , je l'ai deja essayé , mais je ne sais pas reecrire le text dans la textbox,
    cependant je vais voir car je pense que tu m'a mis sur une autre piste... je vais regarder a cela.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 81
    Par défaut
    aussi , je ne veux pas remplir une textbox , mais une richbox avec les coordonnées de points

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          Point[] points = new Point[4];
          points[0] = new Point(1, 2);
          points[0] = new Point(3, 4);
          points[0] = new Point(5, 6);
          points[0] = new Point(7, 8);
     
          foreach (Point p in points)
          {
            richTextBox1.AppendText(p.X.ToString() + "," + p.Y.ToString() + "\r\n");
          }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/04/2016, 00h52
  2. [VBA-E] Tableau de données <=> Fichier Texte
    Par P50 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2005, 16h02
  3. convertir tableau d'entier en char[]
    Par nin47 dans le forum C
    Réponses: 20
    Dernier message: 12/10/2005, 20h03
  4. Recherche dans Tableau de point
    Par Platypus dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 30/08/2005, 18h29
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo