2015-09-01 2 views
1

Очень любезно, интеллектуальный член переполнения стека показал мне, как цикл с «Do Until» и создавать окна сообщений, чтобы пользователь мог сохранить файл или переименовать его, если он уже существует. Тем не менее, я все еще нажимаю на стену. Я не могу сохранить данные ListView в цикле for for, с именем файла, которое я выбрал в поле ввода (см. Код ниже). Как будто у меня есть две отдельные части кода, потому что rtb сохраняет данные в Rich Text File, называемом Test.txt, и saveFile не имеет к этому никакого отношения! Пожалуйста, помогитеСохранение данных с именем файла по моему выбору

Код

Dim fileSaved As Boolean 

    Do Until fileSaved 
     Dim saveFile As String = InputBox("Enter a file name to save this message") 
     If saveFile = "" Then Exit Sub 
     Dim docs As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments 
     Dim filePath As String = IO.Path.Combine(docs, "Visual Studio 2013\Projects", saveFile & ".txt") 

      fileSaved = True 
      If My.Computer.FileSystem.FileExists(filePath) Then 
       Dim msg As String = "File Already Exists. Do You Wish To Overwrite it?" 
       Dim style As MsgBoxStyle = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.Critical 
       fileSaved = (MsgBox(msg, style, "Warning") = MsgBoxResult.Yes) 
      End If 
     Loop 

     'THIS NEXT bit of code saves content to Test.txt NOT saveFile as desired! 

     Dim rtb As New RichTextBox 
     rtb.AppendText("Generation, Num Of Juveniles, Num of Adults, Num of Semiles, Total" & vbNewLine) 
     For Each saveitem As ListViewItem In ListView1.Items 
      rtb.AppendText(
          saveitem.Text & ", " & 
          saveitem.SubItems(1).Text & ", " & 
          saveitem.SubItems(2).Text & ", " & 
          saveitem.SubItems(3).Text & ", " & 
          saveitem.SubItems(4).Text & vbNewLine) 
     Next 
     rtb.SaveFile("C:\Users\SMITH\Documents\Visual Studio 2013\Projects\Test.txt", _ 
     RichTextBoxStreamType.PlainText) 
+0

Вместо InputBox, A 'FileSaveDialog' обеспечит навигацию и утверждение для выбора и, возможно, вопрос «перезаписать?». – Plutonix

+0

Если вы не хотите, чтобы текст LV в 'test.txt' не помещал его в RTB, напишите его в файл. – Plutonix

+0

Я не думаю, что член SO, о котором вы говорите, ожидал, что вы даже не поймете основные части кода. Вы должны принять исправление Стива в качестве предлога, чтобы перечитать весь этот код и полностью его понять. Почему вы ожидали, что файл будет храниться где-то в другом месте, имея путь hardcoded ("rtb.SaveFile (" C: \ Users \ SMITH \ Documents \ Visual Studio 2013 \ Projects \ Test.txt ""). – varocarbas

ответ

2

При попытке сохранить файл с помощью метода RichTextBox SaveFile вы должны быть в состоянии использовать переменную filePath, которые получают входной сигнал от вашего пользователя. Но эта переменная объявлена ​​внутри блока Do Do not .... Loop и в соответствии с scope rules of variables in VB.NET недоступна вне этого блока. Вы можете переместить объявление переменной перед входом в цикл

Dim fileSaved As Boolean 

Dim filePath As String 
Do Until fileSaved 
    Dim saveFile As String = InputBox("Enter a file name to save this message") 
    If saveFile = "" Then Exit Sub 
    Dim docs as String = My.Computer.FileSystem.SpecialDirectories.MyDocuments 
    filePath = IO.Path.Combine(docs, "Visual Studio 2013\Projects", saveFile & ".txt") 

    fileSaved = True 
    If My.Computer.FileSystem.FileExists(filePath) Then 
     Dim msg As String = "File Already Exists. Do You Wish To Overwrite it?" 
     Dim style As MsgBoxStyle = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.Critical 
     fileSaved = (MsgBox(msg, style, "Warning") = MsgBoxResult.Yes) 
    End If 
Loop 

' The remainder of your code can be left unchanged until the SaveFile line 

Теперь вы можете использовать его в вызове

rtb.SaveFile(filePath, RichTextBoxStreamType.PlainText) 
+0

Большое спасибо. Мне так жаль звучать так плотно, но когда я пытался использовать filePath как какой-то параметр, я продолжал получать синтаксические ошибки. Как именно я могу позвонить? – Student

+1

@student в отправленном вами коде, измените последнее утверждение на 'rtb.SaveFile (filePath, RichTextBoxStreamType.PlainText)'. – Blackwood

+0

@Blackwood спасибо. Я пробовал эти предложения, но в нем не указано filePath. Если я объявлю это с Dim filePath в верхней части кода, как предполагает Стив, он генерирует еще одну ошибку: «Variable filePath скрывает переменную в закрывающем блоке» – Student

Смежные вопросы