Пара причин, по которым код может быть неисправен.
Чтобы по-настоящему закрепить это, поместите свое короткое преобразование в новую строку, например:
short val = Convert.ToInt16(txtBoxValue.Text);
string strChar = strTest.Substring(0, val);
Вероятно, значение в txtBoxValue.Text не является коротким (оно может быть слишком большим или содержать буквенные символы). Если он действителен и ему назначено значение val, то в strTest может не хватить символов для работы подстроки, хотя обычно это возвращает другую ошибку. Кроме того, второй параметр подстроки может потребовать int (не уверен, сейчас не могу проверить), поэтому вам может потребоваться преобразовать в int32 вместо 16.
Какое значение txtBoxValue.Text во время ваших тестов?