2017-11-16 8 views
0

TextBoxの内容を(好ましくは)1つのファイルにまとめて保存し、それぞれのテキストボックスに書き戻す必要がありますファイルを開く。基本的に私はD & D statシートを作成しており、各プレイヤーが[文字の名前] .txtとして入力したものを保存したいと思います。私はすでに、単純な貯蓄を持って、単一の制御およびコードを使用して書き留める:複数のテキストボックスにファイルを保存、分割、書き込みする方法

Dim SaveCharacter As StreamWriter 
     If txtName.Text = "" Then 
      MessageBox.Show("In order to save, you must enter a name for your character.", "Error: No Name Entered") 
     Else 
      Try 
       SaveCharacter = File.AppendText("H:\Visual Basic Projects\DAndD-2.5\DAndD-2.5\Saves\" & txtName.Text & ".txt") 
       SaveCharacter.WriteLine(frmNotes.rtxNotes.Text) 
       SaveCharacter.Close() 
      Catch 
       MessageBox.Show("Error") 
      End Try 
     End If 

'Next event handler 
      Dim OpenCharacter As StreamReader 
      OpenCharacter = File.OpenText("H:\Visual Basic Projects\DAndD-2.5\DAndD-2.5\Saves\Jared.txt") 
      Do Until OpenCharacter.EndOfStream 
       frmNotes.rtxNotes.Text = OpenCharacter.ReadToEnd.ToString() 
       For Each strLine As String In frmNotes.rtxNotes.Text.Split(vbNewLine) 
       Next 
      Loop 

は私が必要なものを行う簡単な(っぽい)の方法は、特に質量であり、(数行のコード)することなく、各TextBoxを別の.txtファイルとして保存しますか?

ありがとうございました!

+1

[** serialization **](https://www.codeproject.com/Articles/254617/Serialization-Part-I-Binary-Serialization)を使用して、文字列を[** 'List Of T) '**](https://msdn.microsoft.com/en-us/library/6sh2ey19(v = vs.110).aspx)。保存/読み込みを行うと、フォームのすべてのテキストボックスが繰り返し表示され、テキストをリストに追加/削除できます。 –

答えて

1

これは、コントロールごとに1行、ファイルにすべてのあなたのTextBoxesの内容を書きます:

Dim textBoxes = Me.Controls.OfType(Of TextBox).ToArray() 
Dim lines = IO.File.ReadAllLines(filePath) 

For i = 0 To lines.GetUpperBound(0) 
    textBoxes(i).Text = lines(i) 
Next 

なしていることを前提としています

IO.File.WriteAllLines(filePath, Me.Controls.OfType(Of TextBox).Select(Function(tb) tb.Text)) 

これが戻ってそれらTextBoxesにファイルを読み込みますTextBoxesは複数行で、読み取り時にファイルを検証しないため、行数とTextBoxesが一致しているかどうかを確認したい場合があります。

+0

テキストボックスを追加、削除、または移動すると壊れるので疑いがあります。 – SSS

+0

@SSS、あなたは正しいかもしれませんが、それは質問された質問に答えることを意味しません。 – jmcilhinney

+0

私はdownvoterではなかった、私はちょうど推測していた – SSS

3

すべてのコントロールをループし、テキストボックスを引き出しは:

Sub SaveFile(strFilename As String) 
    Using fs As New System.IO.FileStream(strFilename, IO.FileMode.OpenOrCreate) 
     Using sr As New System.IO.StreamWriter(fs) 
     For Each ctl As Control In Me.Controls 
      If TypeOf ctl Is TextBox Then 
      Dim txt As TextBox = DirectCast(ctl, TextBox) 
      sr.WriteLine(txt.Name & ":" & txt.Text) 
      End If 
     Next ctl 
     End Using 
    End Using 
    End Sub 

    Sub Readfile(strfilename As String) 
    Using fs As New System.IO.FileStream(strfilename, IO.FileMode.Open) 
     Using sr As New System.IO.StreamReader(fs) 
     Do Until sr.EndOfStream 
      Dim strLine As String = sr.ReadLine 
      Dim colonposition As Integer = strLine.IndexOf(":") 
      If colonposition > 0 And colonposition < strLine.Length - 1 Then 
      Dim strTextBoxName As String = strLine.Substring(0, colonposition) 
      Dim strTextBoxText As String = strLine.Substring(colonposition + 1) 
      Dim ctl() As Control = Me.Controls.Find(strTextBoxName, False) 
      If ctl.Length > 0 AndAlso TypeOf ctl(0) Is TextBox Then 
       DirectCast(ctl(0), TextBox).Text = strTextBoxText 
      End If 
      End If 
     Loop 
     End Using 
    End Using 
    End Sub 

上記のコードは、フォーム自体にテキストボックスのために働きます。コンテナを歩くための再帰関数として再作成することもできますが、読者のための練習として残しておきます。

関連する問題