Look at the TextBox.SelectionStart property - it gives the current caret position. If it is zero, and the SelectionLength is zero, the cursor is at the start and no text is selected.
BTW: You don't want this in KeyDown - you want it in KeyPress:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
TextBox tb = sender as TextBox;
if (tb != null)
if (tb.SelectionStart == 0 && tb.SelectionLength == 0 && e.KeyChar == '0')
e.Handled = true;