No wiec mam DataGridView a w nim komórki ze stringiem.
Chce zrobić tak żeby po wpisaniu dwóch znaków do komórki automatycznie zacząć edytować kolejną komórkę wiec mam taki kod(nic lepszego nie mogłem wymyślić):

private void HexValue_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    textedit = (TextBox)e.Control;
    textedit.SelectionStart = 0;
    textedit.KeyPress -= EditKeyPress;
    textedit.KeyPress += EditKeyPress;
}
private void EditKeyPress(object sender, KeyPressEventArgs e)
{
    if(checkKey(e.KeyChar))
    {
        textedit.SelectionStart = CurSelSta;
        e.KeyChar = e.KeyChar.ToString().ToUpper()[0];

    }else
    {
        e.Handled = true;
    }
    textBox1.Text = textedit.SelectionStart.ToString();
    if (textedit.SelectionStart==2)
    {
        SendKeys.Send("{TAB}");
        SendKeys.Send("{F2}");
    }
}

checkKey(e.KeyChar) - sprawdza czy e.KeyChar jest literą od 'a' do 'f' lub cyfra od '0' od '9';

i podczas edycji wciśnięcie klawisza wywołuje EditKeyPress(..) ale jak sprawdzić aktualne położenie kursora?

textedit.SelectionStart

nie działa prawidłowo ponieważ jest (tak mi się wydaje) w złym miejscu(?)
po wpisaniu do komórki dwóch znaków pokazywało że jest na pozycji 1, po wpisaniu jednego znaku pokazywał ze jest na pozycji 0 a przed wpisaniem czegokolwiek pokazywał też 0;
Nie wiem też dlaczego

textedit.KeyPress -= EditKeyPress;
textedit.KeyPress += EditKeyPress;

musi być w tej kolejności(inaczej albo EditKeyPress nie wykonywało się albo wykonywało kilka krotnie)