Q:

Gravar labels num ficheiro e fazer load da informação

Eu estou a tentar criar uma maneira para:

criar várias labels por um botão - feito;
gravar a informação dessas labels numa lista (texto, left coords e top coords) - feito como apresento a seguir;
fazer load dessa lista pela ordem de texto, left, top para recriar a label no mesmo local depois de ter desligado a app - dificuldade neste passo;

O código que tenho para já é o seguinte:    
List <String> labelList = new List<String>(); //lista para texto
List<int> labelLeft = new List<int>(); //coords left
List<int> labelTop = new List<int>(); //coords top

O que eu tenho para o botão de escrita no ficheiro é o seguinte:
private void button3_Click(object sender, EventArgs e)
{
    foreach (Label label1 in this. Controls. OfType<Label>())
    {
        labelList. Add(label1.Text); //id da label é "label1"
        labelLeft. Add(label1.Left);
        labelTop. Add(label1.Top);
    }

    for (int i = 0; i < labelList. Count(); i++)
    {
        TextWriter tw = new StreamWriter("SavedGame.txt");

        // write lines of text to the file
        tw. WriteLine(labelList[i].Text);
        tw. WriteLine(labelLeft[i]);
        tw. WriteLine(labelTop[i]);

        // close the stream     
        tw. Close();
    }
}

Que para já não tenho problema, a ideia é escrever os dados no ficheiro cada vez que o ciclo roda uma vez assim que tenho os dados todos na primeira lista. 
Agora a minha dificuldade está em ler os dados para os voltar a reproduzir pois o que eu tentei foi o seguinte:
private void button4_Click(object sender, EventArgs e)
{
    for (int i = 0; i < labelList. Count(); i++)
    {
        Label l = new Label();
        TextReader tr = new StreamReader("SavedGame.txt");

        string ltext = tr. ReadLine();
        string labelLeft = tr. ReadLine();
        string labelTop = tr. ReadLine();

        //Convert the strings to int
        l.Text = ltext;
        l.Left = Convert. ToInt32(labelLeft);
        l.Top = Convert. ToInt32(labelTop);

        // close the stream
        tr. Close();
    }
}

Eu sei que o meu script de leitura pode estar errado mas ha alguma maneira de eu alcançar o pretendido que expliquei acima? 
Obrigado. 

A:

Fiz uma simulação e encontrei dois problemas:

Ao salvar, você está sobreescrevendo o txt. 
use TextWriter tw = new StreamWriter("SavedGame.txt", true); para dar append ao invés de sobreescrever o arquivo. 
Você está gerando o label mas não está adicionando ele ao form. 
Use this. Controls. Add(l); para adicionar o Label l no form.