Q:

Navigation and memorising text box data

The program has a panel which holds a text box and the panel has two buttons on each side.
Each button acts as a 'next' (>>) and 'previous' (<<) navigation. I want to be able to navigate to the next panel by clicking '>>' this will clear the text box. Then when I click '<<' I want to go back to the previous panel with the text box containing the data previously added. However I want to do this without having to create two panels on top of each other and setting the visibility to true or false (which I am able to do). I want to achieve this by using only the one panel so the process can be done an infinite number of times. I hope this is clear to understand if you require more information please let me know.
Here is an image of my interface to clarify things:

A:

since you have the page number, why not just create a list (or use a dictionary with the page number as a key), then in the button handler for >> and << collect the text for the current page (and put it in the list or dictionary) and replace it with the text for the previous page (from the list or dictionary).
code could look something like this:
public partial class Form1 : Form
{
    Dictionary<Decimal, String> TextInfo;

    public Form1()
    {
        InitializeComponent();

        TextInfo= new Dictionary<Decimal, String>();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        numPage.Value = 1;
    }

    private void bnForward_Click(object sender, EventArgs e)
    {
        if (TextInfo.ContainsKey(numPage.Value))
        {
            TextInfo[numPage.Value] = textBox1.Text;
        }
        else
        {
            TextInfo.Add(numPage.Value, textBox1.Text);
        }

        numPage.Value++;

        if (TextInfo.ContainsKey(numPage.Value))
        {
            textBox1.Text = TextInfo[numPage.Value];
        }
        else
        {
            textBox1.Text = "";
        }
    }

    private void bnBack_Click(object sender, EventArgs e)
    {
        if (numPage.Value == 1)
            return;

        if (TextInfo.ContainsKey(numPage.Value))
        {
            TextInfo[numPage.Value] = textBox1.Text;
        }
        else
        {
            TextInfo.Add(numPage.Value, textBox1.Text);
        }

        numPage.Value--;

        if (TextInfo.ContainsKey(numPage.Value))
        {
            textBox1.Text = TextInfo[numPage.Value];
        }
        else
        {
            textBox1.Text = "";
        }
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {

    }

}

