Q:

Utilizando o CellClick para carregar dados de um registro

Estou fazendo uma aplicação em C# no Windows Forms do Visual Studio sem usar banco de dados, estou controlando tudo por uma classe (Pessoa) e mais duas classes (PessoaFisica e PessoaJuridica) herdadas da classe base.  
Estou tentando carregar o DataGrid com os dados de um cadastro que eu faço no programa no momento que eu clico na linha selecionada, mas não estou conseguindo (o que inicialmente precisa aparecer nas linhas do DataGrid é o primeiro dado cadastrado e depois quando selecionar ela com um clique aí sim aparece todos os dados de volta nas TextBox onde eles foram inseridas).  Por exemplo, eu mostro o nome de cada usuario cadastrado nas linhas da datagrid e quando eu clico em uma linha, quero que os dados cadastrados sejam mostrados de volta em cada textbox onde ele foi inserido. 
Estou salvando os dados do cadastro em uma lista, desta forma
List<Pessoa> listcadastro = new List<Pessoa>();
listcadastro. Add(new Pessoa(/*aqui eu coloco cada text box que contem os dados que eu quero*/)); 

mas não estou conseguindo entender como fazer isso e também vi que pode ser usado o CellClick.  Não estou postando o código pois não esta ocorrendo nenhum erro pois eu não estou sabendo como implementar o codigo essa função RowSelectionChanged para exibir os dados cadastrados pela textbox no momento que eu clico na linha selecionada.  
Vi que tem sobre o event data aqui nesse site: RowSelectionChanged Event (WebHierarchicalDataGrid) dizendo que existe o CurrentSelectedRows e PreviousSelectedRows e gostaria de saber se um desses realmente atende o que eu preciso. 
Atualização:
Está dando erro na parte de salvar, é nessa parte de pegar o index
List<Pessoa> listcadastro = new List<Pessoa>();

//exibir todos os nomes que foram cadastrados um em baixo do outro na grid
       int Row;
private void bt_salvar_Click_1(object sender, EventArgs e)
{

    listcadastro. Add(new Pessoa(txt_nome. Text, txt_endereco. Text, int. Parse(txt_ano. Text), txt_telefone. Text));
    Row = dataGridView1.CurrentRow. Index;
    dataGridView1.Rows. Add(listcadastro[Row].Nome);
}

//mostrar todos os dados de volta na textbox em que foi inserido quando selecionar a linha 
public void DataGridView1_CellClick(object sender, EventArgs e)
{
    if (dataGridView1.RowCount > 0)
    {
        txt_nome. Text = dataGridView1[0, dataGridView1.CurrentRow. Index].Value. ToString();
        txt_endereco. Text = dataGridView1[0, dataGridView1.CurrentRow. Index].Value. ToString();
        txt_ano. Text = dataGridView1[0, dataGridView1.CurrentRow. Index].Value. ToString();
        txt_telefone. Text = dataGridView1[0, dataGridView1.CurrentRow. Index].Value. ToString();

    }
}

Aqui em baixo eu fiz uma montagem mostrando como é para ficar, ali na grid aparece só o nome do usuario cadastrado 
 

A:

Para identificar a Pessoa selecionada você pode recuperar direto da sua lista através do index da linha selecionada:
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
    Pessoa pessoaSelecionada = listcadastro[datagridview1.CurrentCell. RowIndex];
    txt_nome. Text = pessoaSelecionada. Nome;
    txt_endereco. Text = pessoaSelecionada. Endereco;
    txt_ano. Text = pessoaSelecionada. Ano. ToString();
    txt_telefone. Text = pessoaSelecionada. Telefone;
}

Para adicionar no grid da forma que está implementando, você pode fazer:
listcadastro. Add(new Pessoa(txt_nome. Text, txt_endereco. Text, int. Parse(txt_ano. Text), txt_telefone. Text));
dataGridView1.Rows. Add(listcadastro. Last().Nome);

