VB. NET как сохранить просмотр списка с помощью savefiledialog - PullRequest
0 голосов
/ 20 января 2020

Что-то не так в моем коде, я хочу сохранить элемент списка в текстовый файл, используя savefiledialog.

Я получаю сообщение об ошибке «Не удалось разрешить перегрузку, поскольку ни один из доступных« WriteAllLines »не принимает это количество аргументов».

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles ChromeButton3.Click
        Dim s As New SaveFileDialog
        s.Filter = "text|*.txt"
        s.Title = "Save Your Hits"
        If s.ShowDialog = Windows.Forms.DialogResult.OK Then
            For Each myItem As ListViewItem In ListView1.Items
                File.WriteAllLines(myItem.Text & vbNewLine & myItem.SubItems(1).Text & vbNewLine & myItem.SubItems(2).Text & vbNewLine & myItem.SubItems(3).Text & vbNewLine & vbNewLine)
            Next
        End If
    End Sub

1 Ответ

0 голосов
/ 21 января 2020

Ваша ошибка

Ошибка разрешения перегрузки

может быть исправлена ​​с помощью документации. Это хорошая идея сделать это любым незнакомым методом. Просто Google метод, а затем "in. net" Первая ссылка, которая появилась https://docs.microsoft.com/en-us/dotnet/api/system.io.file.writealllines?view=netframework-4.8 И первая топика c в документации перегрузки. Я думаю, вы видите, что ни одна из перегрузок не соответствует тому, что вы пытались передать.

Как уже упоминалось в комментариях File.Write Все строки не совсем подходят для ваших целей. Вместо создания всех этих строк и двойной строки между записями сделайте каждую строку отдельной строкой, разделяющей каждое поле запятой. Я использовал StringBuilder, который предоставляет изменяемый (изменяемый) тип данных (в отличие от String, который является неизменным). Спасает компилятор от выбрасывания и создания новых строк на каждой итерации.

Я добавил новую строку на каждой итерации, содержащую интерполированную строку. Интерполированная строка начинается с $. Это позволяет напрямую смешивать переменные, заключенные в {}, с литеральными символами.

После l oop вы преобразуете StringBuilder в String и записываете в файл с именем файла, предоставленным в диалоговом окне. коробка.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim s As New SaveFileDialog
    s.Filter = "text|*.txt"
    s.Title = "Save Your Hits"
    If s.ShowDialog = DialogResult.OK Then
        Dim fileName = s.FileName
        Dim sb As New StringBuilder
        For Each myItem As ListViewItem In ListView1.Items
            sb.AppendLine($"{myItem.Text},{myItem.SubItems(1).Text},{myItem.SubItems(2).Text},{myItem.SubItems(3).Text}")
        Next
        File.WriteAllText(fileName, sb.ToString)
    End If
End Sub
...