2017-08-15 48 views
0

我有2個表格,在Form1我有一個按鈕,並在Form2我有一個ListBox與數據。 我想要的是點擊Form1上的按鈕,並將數據從Form2ListBox保存在文本文件中。如何保存一個文本文件中的列表框

我曾嘗試:

這是在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); 
      } 
     } 
    } 

按鈕,但它不工作,始終保存文件的空白。

+0

嗯,確實'myForm.listBox.Items.OfType ()'返回什麼?如果'myForm'是一個'Form',那麼您對它的期望並不清楚,因爲您從未真正向用戶展示過這種形式。所以沒有與其控制進行任何交互。你究竟想從這種形式中得到什麼? – David

+1

'var myForm = new FormVer();' - 那麼你的問題(好吧,其中之一)。你創建一個全新的,完全獨立的'FormVer'實例,它(假設)沒有*列表框中的任何數據。你需要使'FormVer'的實例具有*這裏提供的數據。 – Corak

+0

如何製作實例? 我需要創建一個課程嗎? 對不起,我是新來的,我不知道從哪裏開始。 – Amauri

回答

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

會返回一個空的枚舉,因爲Items包含ListBoxItem實例

下面應該工作:

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

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

我試過你的例子,並在「選擇」中給出錯誤,說它不包含定義。 – Amauri

+0

@Amauri讓你有'System.Linq'在你的使用 –

+0

omg是我有System.Linq在我的使用 – Amauri

相關問題