-4

.txtXML の代わりにファイルを使用したいのですが、 WriteAllLineS/WriteAllTextReadAllLines/を引き続き使用したいと考えていReadAllTextます。2 つのテキスト ボックス 1 と 2 があり、その横に「保存」ボタンと「読み込み」ボタンがあります。各テキスト ボックスに 1 つです。

これまでの私のコードは、最初のボックスから 2 番目のボックスにデータをレプリケートします。リストは次のとおりです。

public partial class Form1 : Form
{
 string fileName = "Cache/textBoxdata.txt";

    public Form1()
    {
        InitializeComponent();
    }
private void load1_Click_1(object sender, EventArgs e)
    {  
      textBox1.Lines = File.ReadAllLines(fileName);
    }

 private void Save1_Click_1(object sender, EventArgs e)
    {
        File.WriteAllLines(fileName, textBox1.Lines);
     }

private void load2_Click(object sender, EventArgs e)
    {
        textBox2.Lines = File.ReadAllLines(fileName); 
    }

private void save2_Click(object sender, EventArgs e)
    {
        File.WriteAllLines(fileName, textBox2.Lines);
    }
}

2 つのテキスト ボックスにテキストを書き込めるようにするには、[保存] ボタンをクリックします。これにより、入力したテキストがファイルに書き込まれます。次に、アプリを再度開いて [読み込み] ボタンをクリックすると、データがファイルから読み込まれ、テキスト ボックスに表示されます。

現時点では、最初のテキスト ボックスが機能します。2 番目のテキスト ボックスには、2 番目のテキスト ボックスではなく、最初のテキスト ボックスに書いた内容が表示されます。

4

2 に答える 2

1

なぜ2つの保存/ロードボタンがあるのですか?あなたの質問は、両方のテキストボックスを一度に保存/ロードすることについてです。したがって、操作ごとに1つのボタンのみが必要です。

テキストボックスの行をファイルに保存/ファイルからロードするには、すでに行っているように使用できますWriteAllLinesReadAllLinesファイルを1つだけにしたいので、最初のテキストボックスの行がどこで終わり、2番目のテキストボックスの行がどこから始まるかを知る必要があります。これを行う最も簡単な方法は、ファイルに行数を書き込むことです。

private void SaveTextboxes()
{
    List<string> linesToSave = new List<string>();

    linesToSave.Add(textBox1.Lines.Length.ToString());
    linesToSave.AddRange(textBox1.Lines);

    linesToSave.Add(textBox2.Lines.Length.ToString());
    linesToSave.AddRange(textBox2.Lines);

    File.WriteAllLines(filename, linesToSave);
}

private void LoadTextboxes()
{
    string[] loadedLines = File.ReadAllLines(filename);

    int index = 0;

    int n = int.Parse(loadedLines[index]);
    string[] lines = new string[n];
    Array.Copy(loadedLines, index + 1, lines, 0, n);
    textBox1.Lines = lines;

    index += n + 1;

    n = int.Parse(loadedLines[index]);
    lines = new string[n];
    Array.Copy(loadedLines, index + 1, lines, 0, n);
    textBox2.Lines = lines;
}

さらにテキストボックスを追加すると、必要な数のテキストボックスに対してこれを繰り返すことができます。テキストボックスの配列を作成し、それをループします。

テキストボックスごとに個別の保存/読み込みボタンが必要な場合は、テキストの一部のみを上書きするため、少し混乱する可能性があります。基本的に、これは、保存時に最初にファイル全体を2つの別々の配列に読み取り、次にそれぞれの配列を新しいテキストに置き換えて書き戻すことを意味します。

于 2013-03-03T23:34:11.540 に答える
0

もちろん、テキストボックス内のテキストはロード後も同じです-同じファイルを使用しています...

コンテンツを2つの異なるファイルに保存できれば、うまくいくはずです

于 2013-03-03T22:02:00.903 に答える