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)