2017-08-15 1 views
0

J'ai 2 formulaires, sur Form1 J'ai un bouton et dans le Form2 j'ai un ListBox avec des données. Ce que je veux est de cliquer sur le bouton Form1 et enregistrer les données à partir du Form2ListBox dans un fichier texte.Comment puis-je enregistrer une zone de liste dans un fichier texte

Ce que j'ai essayé:

Ce bouton est Form1

private void toolStripButtonGuardar_Click(object sender, EventArgs e) 
    { 
     var myForm = new FormVer(); 

     //Escolher onde salvar o arquivo 
     SaveFileDialog sfd = new SaveFileDialog(); 
     sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     sfd.Title = "Guardar"; 
     sfd.Filter = "Arquivos TXT (*.txt)|*.txt"; 

     if (sfd.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 

       File.WriteAllLines(sfd.FileName, myForm.listBox.Items.OfType<string>()); 

       //Mensagem de confirmação 
       MessageBox.Show("Guardado com sucesso", "Notificação", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 

Mais cela ne fonctionne pas, toujours enregistrer le fichier vide.

+0

Eh bien, est-ce 'myForm.listBox.Items.OfType ()' retour n'importe quoi? Si 'myForm' est un' Form', il n'est pas clair ce que vous en attendez, car vous ne montrez jamais ce formulaire à l'utilisateur. Donc, aucune interaction n'a jamais été faite avec ses contrôles. Qu'est-ce que vous essayez réellement d'obtenir de cette forme? – David

+1

'var myForm = nouveau FormVer();' - bien voilà votre problème (enfin, l'un d'entre eux). Vous créez une instance complètement nouvelle et complètement séparée de 'FormVer' qui (en l'occurrence) n'a * pas * de données dans sa listbox. Vous devez créer l'instance de 'FormVer' qui * possède * les données disponibles ici d'une façon ou d'une autre. – Corak

+0

Comment créer une instance? Devrais-je créer un cours? Désolé je suis nouveau à ce que je ne suis pas sûr par où commencer. – Amauri

Répondre

1
myForm.listBox.Items.OfType<string>() 

va retourner un vide dénombrable depuis Items contient ListBoxItem instances

Les éléments suivants doivent travailler:

ListBox listBox = myForm.listBox; 
IEnumerable<string> lines = listBox.Items.Select(item => listBox.GetItemText(item)); 

File.WriteAllLines(sfd.FileName, lines); 
+0

J'ai essayé votre exemple et donne une erreur dans "Select", dit qu'il ne contient pas de définition. – Amauri

+0

@Amauri Assurez-vous que vous avez 'System.Linq' dans vos résultats –

+0

omg oui j'ai System.Linq dans mes résultats – Amauri