2010-12-04 21 views
0

Ok, tout d'abord, je suis un débutant en C# (débutant dans la programmation du tout), et après une recherche sur google, je ne pouvais pas trouver une solution sur celui-ci.C# Enregistrement de plusieurs zones de texte, dans un fichier .txt

Alors, ce que je dois faire est la suivante: J'ai 14 zones de texte et quelques case à cocher de:

Nom, date de naissance, lieu de naissance et d'autres informations d'une personne, par exemple ... Je avoir un bouton Enregistrer qui va enregistrer toutes ces informations dans un fichier .txt ou .rtf. Chaque fois que j'entre ces informations dans textBox, il va l'enregistrer en tant que fichier nommé par le texte entré dans textBoxName.

Par exemple:

textBoxName: Petar Milutinovic; 
textBoxBirth: 01.11.1991; 
textBoxCity: Paracin; 

Et quand je clique sur le bouton Enregistrer, il enregistre toutes ces informations sur un fichier appelé Petar Milutinovic (même nom que textBoxName) sous cette forme:

Name: Petar Milutinovic; 
Date of Birth: 01.11.1991; 
City: Paracin; 

Oh mon garçon ... Je suis vraiment désolé pour l'orthographe anglaise, ce n'est pas ma principale (vous avez remarqué celle-là ...). Ce problème a été assez pénible ce jour ...

Répondre

1

Je pense que la façon la plus simple (puisque vous êtes un débutant) serait de créer un tableau de chaînes pouvant contenir 14 éléments puisque vous avez 14 zones de texte.

string[] contents = new string[14]; 
contents[0] = "Name: " + textBoxName.Text; 
contents[1] = "City: " + textBoxCity.Text; 
contents[2] = "Date of Birth: " + textBoxBirth.Text; 
... 

Ensuite, vous pouvez l'enregistrer directement déposer auprès de:

System.IO.File.WriteAllLines(textBoxName.Text + ".txt", contents); 

Bien sûr, il existe d'autres moyens plus efficaces pour le faire, mais je pense que cette façon est le plus compréhensible.

(j'ai oublié vos cases à cocher, mais vous pouvez atteindre le même objectif avec ce concept)

EDIT:

Pour cases à cocher ou des boutons radio, vous pouvez utiliser la propriété Vérifié (ou CheckState).

Vous pouvez faire quelque chose comme:

contents[0] = checkBox.Checked ? "1" : "0"; 
contents[1] = radioButton.Checked ? "1" : "0"; 

où 1 représente vrai et 0 représente faux. Ces valeurs peuvent être tout ce que vous voulez, tant que vous le lisez correctement.

+0

Tnx, c'est aussi intéressant! J'ai compris la solution de Camilo assez bien, mais c'est une bonne façon de résoudre mon problème :) Tnx – Estomaniko

+0

Ok c'est super, et très facile à apprendre :) Que diriez-vous de bouton radio? De la même manière que checkbox et textbox ou peu différent? – Estomaniko

1

Vous pouvez (devez) créer des propriétés pour chacun de ces champs d'abord comme ceci:

private string Name 
{ 
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code. This makes things more simple if you 
    // want to swap out UI elements later on. 
    get { return txtName.Text; } 
} 

private DateTime DateOfBirth 
{ 
    get { return /*selected date*/; } } 
} 

// more properties for each field 

Maintenant vous suffit d'ouvrir un fichier et commencer à écrire:

private void WriteDataFile(filepath) 
{ 
    // Note: You should handle potential IO errors in a try/catch block 
    using(FileStream fs = File.Open(filepath, FileMode.Create) 
    using(StreamWriter sw = new StreamWriter(fs)) 
    { 
     sw.WriteLine(String.Format("Name: {0}", this.Name)); 
     sw.WriteLine(String.Format("Date of Birth: {0}", this.DateOfBirth)); 
     // etc. 
    } 
} 
+0

Votre solution pourrait fonctionner parfaitement, mais vous pourriez aussi bien la simplifier un peu car il dit qu'il est nouveau à la programmation;) – Machinarius

+0

Ouais, im analysant ce code et je suis un peu confus aux propriétés pour chaque ... Je veux apprendre partie par partie, c'est pourquoi j'ai rejoint ce ... Sur la faculté, ils nous enseignent beaucoup de théorie (je le sais, mais ne peux pas l'appliquer), et tout ce que j'ai appris est de google et quelques tuts ... – Estomaniko

1

Avez-vous besoin d'être en mesure de lire le contenu du fichier txt ou est-ce juste pour le stockage? Si c'est la dernière option, vous pouvez envisager de créer une classe sérialisable qui encapsule toutes vos propriétés (par exemple Personne, Employé, etc ...), puis lier ces champs aux champs de formulaire. Il suffit ensuite de sérialiser la classe/l'objet et de le stocker dans un fichier texte plutôt que de devoir sw.Writeline chaque champ individuel.

+0

Hmm, ouais j'ai oublié de dire que je dois être capable de lire ce fichier plus tard (et peut-être imprimer chaque fichier) ... – Estomaniko

0

Puisque vous êtes nouveau dans la programmation en général, je vais vous dire ce que j'aurais dû entendre quand j'étais débutant: faites tout le chemin OO (Object Oriented). Un jour, vous serez peut-être assez avancé pour regarder des choses comme la programmation fonctionnelle, mais jusque-là, OO est la façon de suivre, ça aide beaucoup.

Alors, quelle est cette chose OO? Eh bien, tout est un objet.

Cela signifie que vous créez un objet Person. Et comment faites-vous cela? Définir un Class.

Voilà comment cela fonctionne:

class Person 
{ 
    public Person(string name, 
        string age, 
        string city) 
    { 
     this.Name = name; 
     this.Age = age; 
     this.City = city; 
    } 

    public string Name { get; private set; } 
    public string Age { get; private set; } 
    public string City { get; private set; } 

    public void SerializeToFile() 
    { 
     //Do the serialization (saving the person to a file) here. 
    } 
} 

ensuite (par exemple dans le bouton « Enregistrer »), vous créez un Person à partir des valeurs dans les champs de texte et de l'enregistrer comme ceci:

private void buttonSave_Click(object sender, EventArgs e) 
{ 
    Person p = new Person(textBoxName.Text, 
          textBoxAge.Text, 
          textBoxCity.Text); 
    p.SerializeToFile(); 
} 

Tout cela peut sembler étrange, mais maintenant vous pouvez faire beaucoup de choses de manière plus propre, comme sauver la personne dans une base de données ou la passer comme argument sans le code désordonné, fragmenté et difficile à maintenir.

En sidenote, cela permet aussi l'héritage:

class Employee : Person 
{ 
    public string Job { get; private set; } 
} 

Voir, cette classe a le même code de la classe personne, mais aussi une propriété Job. En tant que bonus au code propre, vous pouvez passer un Employee à une méthode qui prend un Person comme argument, car un employé "est une" personne.

+0

Ouais! Tnx beaucoup, c'est ce que je cherchais! C'est facile à comprendre ... IMO, toutes les écoles devraient essayer de simplifier la programmation pour les étudiants ... Tout ce qu'ils font est de nous enseigner la théorie qu'un démarreur ne comprend pas facilement. Alors, je comprends maintenant comment cela fonctionne :) – Estomaniko

+0

Alors que je pense aussi que les explications simples sont bonnes, il y a de bons arguments pour enseigner la théorie, voir ce post par un programmeur très respecté et collègue StackOverflower (en écoutant ces expérimentés les gars est l'un des rares pseudo-raccourcis à la sagesse): http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html –

+0

PS: Je suis heureux d'avoir aidé! :) –