2011-10-10 7 views
2

J'utilise un openFileDialog pour lire à partir d'un fichier texte et imprimer les valeurs dans une zone de liste et un saveFileDialog pour enregistrer les changements dans textfile.i écrit ce code, mais cela ne fonctionne pas.if un changement de la listbox avec une zone de texte fonctionne bien.Mais j'ai besoin d'imprimer et de sauvegarder les éléments dans une boîte à liste.toutes les suggestions?ouvrir et enregistrer le fichier de dialogue

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
    { 

    } 

    private void button4_Click(object sender, EventArgs e) 
    { 
     if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 

      label7.Text = openFileDialog1.FileName; 
      listBox1.Text = File.ReadAllText(label7.Text); 

     } 
    } 

    private void button5_Click(object sender, EventArgs e) 
    { 
     if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 

      File.WriteAllText(saveFileDialog1.FileName, listBox1.Text); 
     } 

    } 
+0

ListBox ne dispose pas d'une mise en œuvre effective de la propriété Text. Utilisez plutôt sa propriété Items. –

+0

si j'utilise un combobox? –

Répondre

3

Vous devez ajouter chaque ligne du fichier en tant qu'élément de la liste. Ensuite, pour enregistrer, faites défiler chaque élément de la liste et écrivez-le en tant que nouvelle ligne.

Vous pouvez utiliser File.ReadAllLines et listBox1.Items.AddRange pour ajouter les éléments.

listBox1.Items.AddRange(File.ReadAllLines(openFileDialog1.FileName)); 

Étant donné que la propriété Items contient des objets, et non pas des chaînes, vous devrez boucle manuellement sur les éléments et les écrire individuellement ... peut-être faire quelque chose comme

StringBuilder sb = new StringBuilder(); 
foreach(object item in listBox1.Items) { 
    sb.AppendLine(item.ToString(); 
} 
File.WriteAllText(saveFileDialog1.FileName, sb.ToString()); 
+0

le problème est que les éléments contiennent des chaînes, pas des objets –

+0

ListBox.Items est un ObjectCollection, donc même si les éléments sont des chaînes, ils sont retournés comme des objets qui doivent ensuite être transformés en chaînes (ou, vous pouvez utiliser ToString, qui sur une chaîne se retourne). Avez-vous réellement essayé ce code? –

+0

je l'ai essayé et fonctionne bien! Merci! –

1

ListBox.Text représente seulement partie sélectionnée des éléments de la zone de liste.

Une citation de documentation MSDN:

Lorsque la valeur de cette propriété est définie sur une valeur de chaîne, les recherches ListBox pour l'élément dans la zone de liste qui correspond au texte spécifié et sélectionne l'élément. Vous pouvez également utiliser cette propriété pour déterminer quels éléments sont actuellement sélectionnés dans la zone de liste

Cela devrait fonctionner:

using System.Linq; 
... 

string[] lines = File.ReadAllLines(fileName); 
listBox.Items.AddRange(lines.ToArray<object>()); 
Questions connexes